Skip to content

Conversation

mtulio
Copy link

@mtulio mtulio commented Jul 25, 2025

Introducing feature gate support to the cloudConfigTransformer of cloud-config sync controller, so we can ensure custom configuration depending of OCP feature gate.

The idea is to provide the interface to enable the CCM feature of default SG provisioning on NLBs, SPLAT-2137.

The feature gate will added to providers in follow up PRs, starting to AWS config transformer: c61b48d , related to #391

-func setOpenShiftDefaults(cfg *awsconfig.CloudConfig) {
+func setOpenShiftDefaults(cfg *awsconfig.CloudConfig, features featuregates.FeatureGate) {
	if cfg.Global.ClusterServiceLoadBalancerHealthProbeMode == "" {
		// OpenShift uses Shared mode by default.
		// This attaches the health check for Cluster scope services to the "kube-proxy"
		// health check endpoint served by OVN.
		cfg.Global.ClusterServiceLoadBalancerHealthProbeMode = "Shared"
	}
+	if features.Enabled("AWSServiceLBNetworkSecurityGroup") {
+		if cfg.Global.NLBSecurityGroupMode != awsconfig.NLBSecurityGroupModeManaged {
+			// OpenShift enforces security group by default when deploying
+			// service type loadbalancer NLB.
+			cfg.Global.NLBSecurityGroupMode = awsconfig.NLBSecurityGroupModeManaged
+		}
+	}

}

Ref: SPLAT-2341

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jul 25, 2025
@openshift-ci openshift-ci bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jul 25, 2025
@openshift-ci-robot
Copy link

openshift-ci-robot commented Jul 25, 2025

@mtulio: This pull request references SPLAT-2341 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.20.0" version, but no target version was set.

In response to this:

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Copy link
Contributor

openshift-ci bot commented Jul 25, 2025

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@mtulio
Copy link
Author

mtulio commented Jul 25, 2025

/test all

@openshift-ci-robot
Copy link

openshift-ci-robot commented Jul 25, 2025

@mtulio: This pull request references SPLAT-2341 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.20.0" version, but no target version was set.

In response to this:

Introducing feature gate support to the cloudConfigTransformer of cloud-config sync controller, so we can ensure custom configuration depending of OCP feature gate.

The idea is to provide the interface to enable the CCM feature of default SG provisioning on NLBs, SPLAT-2137.

Ref: SPLAT-2341

Usage example on AWS config transformer: c61b48d

-func setOpenShiftDefaults(cfg *awsconfig.CloudConfig) {
+func setOpenShiftDefaults(cfg *awsconfig.CloudConfig, features featuregates.FeatureGate) {
  if cfg.Global.ClusterServiceLoadBalancerHealthProbeMode == "" {
  	// OpenShift uses Shared mode by default.
  	// This attaches the health check for Cluster scope services to the "kube-proxy"
  	// health check endpoint served by OVN.
  	cfg.Global.ClusterServiceLoadBalancerHealthProbeMode = "Shared"
  }
+	if features.Enabled("AWSServiceLBNetworkSecurityGroup") {
+		if cfg.Global.NLBSecurityGroupMode != awsconfig.NLBSecurityGroupModeManaged {
+			// OpenShift enforces security group by default when deploying
+			// service type loadbalancer NLB.
+			cfg.Global.NLBSecurityGroupMode = awsconfig.NLBSecurityGroupModeManaged
+		}
+	}

}

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@mtulio mtulio force-pushed the SPLAT-2341-fg-support branch 2 times, most recently from daa3141 to 15fff4a Compare July 25, 2025 22:03
@mtulio
Copy link
Author

mtulio commented Jul 25, 2025

Local make test is passing.
/test all

@mtulio
Copy link
Author

mtulio commented Jul 25, 2025

Hey Mike and Joel, PTAL if I followed the expected approach for FG in the config sync controller?

I will use it to gate the CCM feature NLB+SG.

thanks

/assign @JoelSpeed @elmiko

@openshift-ci-robot
Copy link

openshift-ci-robot commented Jul 25, 2025

@mtulio: This pull request references SPLAT-2341 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.20.0" version, but no target version was set.

In response to this:

Introducing feature gate support to the cloudConfigTransformer of cloud-config sync controller, so we can ensure custom configuration depending of OCP feature gate.

The idea is to provide the interface to enable the CCM feature of default SG provisioning on NLBs, SPLAT-2137.

Usage example on AWS config transformer: c61b48d

-func setOpenShiftDefaults(cfg *awsconfig.CloudConfig) {
+func setOpenShiftDefaults(cfg *awsconfig.CloudConfig, features featuregates.FeatureGate) {
  if cfg.Global.ClusterServiceLoadBalancerHealthProbeMode == "" {
  	// OpenShift uses Shared mode by default.
  	// This attaches the health check for Cluster scope services to the "kube-proxy"
  	// health check endpoint served by OVN.
  	cfg.Global.ClusterServiceLoadBalancerHealthProbeMode = "Shared"
  }
+	if features.Enabled("AWSServiceLBNetworkSecurityGroup") {
+		if cfg.Global.NLBSecurityGroupMode != awsconfig.NLBSecurityGroupModeManaged {
+			// OpenShift enforces security group by default when deploying
+			// service type loadbalancer NLB.
+			cfg.Global.NLBSecurityGroupMode = awsconfig.NLBSecurityGroupModeManaged
+		}
+	}

}

Ref: SPLAT-2341
Related to #391

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci-robot
Copy link

openshift-ci-robot commented Jul 25, 2025

@mtulio: This pull request references SPLAT-2341 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.20.0" version, but no target version was set.

In response to this:

Introducing feature gate support to the cloudConfigTransformer of cloud-config sync controller, so we can ensure custom configuration depending of OCP feature gate.

The idea is to provide the interface to enable the CCM feature of default SG provisioning on NLBs, SPLAT-2137.

Usage example on AWS config transformer: c61b48d , related to #391

-func setOpenShiftDefaults(cfg *awsconfig.CloudConfig) {
+func setOpenShiftDefaults(cfg *awsconfig.CloudConfig, features featuregates.FeatureGate) {
  if cfg.Global.ClusterServiceLoadBalancerHealthProbeMode == "" {
  	// OpenShift uses Shared mode by default.
  	// This attaches the health check for Cluster scope services to the "kube-proxy"
  	// health check endpoint served by OVN.
  	cfg.Global.ClusterServiceLoadBalancerHealthProbeMode = "Shared"
  }
+	if features.Enabled("AWSServiceLBNetworkSecurityGroup") {
+		if cfg.Global.NLBSecurityGroupMode != awsconfig.NLBSecurityGroupModeManaged {
+			// OpenShift enforces security group by default when deploying
+			// service type loadbalancer NLB.
+			cfg.Global.NLBSecurityGroupMode = awsconfig.NLBSecurityGroupModeManaged
+		}
+	}

}

Ref: SPLAT-2341

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@mtulio mtulio changed the title SPLAT-2341: Creating feature gate support in the cloud-config sync controller SPLAT-2341: Add feature gate support in the cloud-config sync controller Jul 30, 2025
@mtulio mtulio force-pushed the SPLAT-2341-fg-support branch from 15fff4a to 3b032b3 Compare July 31, 2025 17:45
@mtulio
Copy link
Author

mtulio commented Jul 31, 2025

The last version was introducing a panic when closing the channel twice, I just fixed it in the last commit as we are now calling SetupSignalHandler early to setup the FG acessor. Re-testing:

/test e2e-aws-ovn

@mtulio
Copy link
Author

mtulio commented Aug 1, 2025

e2e-aws-ovn is green, testing all others.

/test all

Copy link
Contributor

@JoelSpeed JoelSpeed left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

General direction here looks fine, I guess individual transformers will need to be updated to handle enabling/disabling certain features?

When the configmap is changed, do we somehow reload/restart the deployment with the new config?

@mtulio mtulio force-pushed the SPLAT-2341-fg-support branch from 3b032b3 to 9b983c1 Compare August 25, 2025 15:56
@mtulio
Copy link
Author

mtulio commented Aug 25, 2025

Thanks for review, @JoelSpeed .

General direction here looks fine, I guess individual transformers will need to be updated to handle enabling/disabling certain features?

The idea of PR #391, this commit specifically will enhance a feature to the AWS provider to the NLB+SG feature we are working on. Is it ok for you?

When the configmap is changed, do we somehow reload/restart the deployment with the new config?

Honestly I did not follow the question. Would you mind sharing which configuration your are referring to? I thought the assessor would take care of that restart when the FeatureGate API is changed, but it was an assumption based in the initial exploration. Let me explore how the cluster-cloud-controller-manager in a cluster installed with CustomNoUpgrade

@mtulio
Copy link
Author

mtulio commented Aug 25, 2025

/test all

@mtulio
Copy link
Author

mtulio commented Aug 25, 2025

Running locally the test is passing, checking if test [It] Cloud config sync reconciler On BareMetal platform should skip config sync for BareMetal platform failure is flake:
/test unit

@mtulio
Copy link
Author

mtulio commented Aug 25, 2025

Running locally the test is passing, checking if test [It] Cloud config sync reconciler On BareMetal platform should skip config sync for BareMetal platform failure is flake: /test unit

yeah, that's a flake. Still investigating it. The test failed now is [It] Trusted CA bundle sync controller ca bundle from cloud config should be added if it differs from proxy one, I observed it locally. Checking again:

/test unit

@mtulio mtulio force-pushed the SPLAT-2341-fg-support branch from 9b983c1 to c50b1b5 Compare August 25, 2025 22:54
@mtulio
Copy link
Author

mtulio commented Aug 25, 2025

After some agent-peering review I am observing test 'flaking'/leaking cloud-config, the latest version is preventing randomly failures by enforcing deleting it. I am not sure if this is a parallel execution issue, still checking.

/test unit

@mtulio
Copy link
Author

mtulio commented Aug 26, 2025

/test unit

1 similar comment
@mtulio
Copy link
Author

mtulio commented Aug 26, 2025

/test unit

@mtulio
Copy link
Author

mtulio commented Aug 26, 2025

okay, looks like unit arent flake now. I am investigating if new tests were introducing it.

@mtulio
Copy link
Author

mtulio commented Aug 27, 2025

Thanks for review, @JoelSpeed .

When the configmap is changed, do we somehow reload/restart the deployment with the new config?

Honestly I did not follow the question. Would you mind sharing which configuration your are referring to? I thought the assessor would take care of that restart when the FeatureGate API is changed, but it was an assumption based in the initial exploration. Let me explore how the cluster-cloud-controller-manager in a cluster installed with CustomNoUpgrade

Confirming that the controller is restarting after config gate is changed ( in this case the CCCMO container):

$ oc get pods  -n openshift-cloud-controller-manager-operator -l k8s-app=cloud-manager-operator -o json | jq -r '.items[].status.containerStatuses[] | select(.name=="cluster-cloud-controller-manager").state'
{
  "running": {
    "startedAt": "2025-08-27T18:37:55Z"
  }
}

$ oc patch featuregate cluster --type='merge' -p='{
  "spec": {
    "featureSet": "CustomNoUpgrade",
    "customNoUpgrade": {
      "disabled": [
        "VSphereMultiNetworks"
      ]
    }
  }
}'
....
$ oc logs  -n openshift-cloud-controller-manager-operator cluster-cloud-controller-manager-operator-696bf58c7b-xfzw7 -c cluster-cloud-controller-manager
....
0827 19:39:28.274659       1 main.go:203] "FeatureGates changed" enabled=...
I0827 19:39:28.274747       1 main.go:214] "FeatureGates initialized" logger="CCMOperator.setup"...
I0827 19:39:28.274995       1 event.go:377] Event(v1.ObjectReference{Kind:"Deployment", Namespace:"openshift-cloud-controller-manager", Name:"aws-cloud-controller-manager", UID:"06bc6486-c285-482f-aad7-108d30e47085"...
I0827 19:39:28.275043       1 main.go:245] "starting manager" logger="CCMOperator.setup"
I0827 19:39:28.275137       1 server.go:208] "Starting metrics server" logger="CCMOperator.controller-runtime.metrics"
....

$ oc get pods  -n openshift-cloud-controller-manager-operator -l k8s-app=cloud-manager-operator -o json | jq -r '.items[].status.containerStatuses[] | select(.name=="cluster-cloud-controller-manager").state'
{
  "running": {
    "startedAt": "2025-08-27T19:39:28Z"
  }
}

LMK if this address your questions.

@openshift-merge-robot openshift-merge-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 27, 2025
@JoelSpeed
Copy link
Contributor

So you've shown that we restart the operator, but what happened to the operands? Did the CCM pods get updated because of the change to the configmap when the feature was rolled out?

@mtulio
Copy link
Author

mtulio commented Aug 28, 2025

So you've shown that we restart the operator, but what happened to the operands? Did the CCM pods get updated because of the change to the configmap when the feature was rolled out?

Hi @JoelSpeed - which configmap are you referring to? openshift-cloud-controller-manager/cloud-config? If so any changes in the feature gate, will:

  • restart the sync-controller
  • sync-controller will re-sync the cloud-config, evaluating any new gate
  • update the cloud-config (openshift-cloud-controller-manager/cloud-config) on CCM namespace
  • and CCM pods will be restarted, which mounts the configmap

Am I missing something in your questions or not following your thoughts here? if so, would you mind providing specific examples or eventual misunderstanding?

Injecting features to allow transformers for each cloud provider
implementation so enabled feature gates can be eavaluated.
@mtulio mtulio force-pushed the SPLAT-2341-fg-support branch from c50b1b5 to ce021d5 Compare August 28, 2025 21:40
@openshift-merge-robot openshift-merge-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 28, 2025
@mtulio mtulio force-pushed the SPLAT-2341-fg-support branch from ce021d5 to 45349ca Compare August 28, 2025 22:57
@JoelSpeed
Copy link
Contributor

and CCM pods will be restarted, which mounts the configmap

What triggers the CCM pods to be restarted?

@mtulio
Copy link
Author

mtulio commented Sep 1, 2025

and CCM pods will be restarted, which mounts the configmap

What triggers the CCM pods to be restarted?

Deployment rools out the CCM pods after updating the hash of cloud-config's configmap:

$ oc get deployment.apps/aws-cloud-controller-manager -n openshift-cloud-controller-manager  -o yaml | yq ea .spec.template.metadata.annotations -
operator.openshift.io/config-hash: 3a3cd981ecd5560fc7c4405e9d1af9b23f51cf343a740dc3bc0127a94799e0e0

# update/patch ConfigMap cloud-provider-config/openshift-config

$ oc get deployment.apps/aws-cloud-controller-manager -n openshift-cloud-controller-manager  -o yaml | yq ea .spec.template.metadata.annotations -
operator.openshift.io/config-hash: c58e7513224b2164d101fb8428c198a78386f4bba20f5d52ab955be78197be9e

@JoelSpeed
Copy link
Contributor

Deployment rools out the CCM pods after updating the hash of cloud-config's configmap:

Thanks for the reminder, in which case, yep, I think my concerns are alleviated, this should be good

Enabling feature gate acessor to the cloud-config sync controller.
@mtulio mtulio force-pushed the SPLAT-2341-fg-support branch from 45349ca to c63ea02 Compare September 2, 2025 16:06
@mtulio mtulio marked this pull request as ready for review September 2, 2025 16:07
@openshift-ci openshift-ci bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Sep 2, 2025
@openshift-ci openshift-ci bot requested review from nrb and pierreprinetti September 2, 2025 16:16
@jcpowermac
Copy link
Contributor

/lgtm

@openshift-ci openshift-ci bot added the lgtm Indicates that a PR is ready to be merged. label Sep 2, 2025
@openshift-ci-robot
Copy link

openshift-ci-robot commented Sep 2, 2025

@mtulio: This pull request references SPLAT-2341 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.21.0" version, but no target version was set.

In response to this:

Introducing feature gate support to the cloudConfigTransformer of cloud-config sync controller, so we can ensure custom configuration depending of OCP feature gate.

The idea is to provide the interface to enable the CCM feature of default SG provisioning on NLBs, SPLAT-2137.

The feature gate will added to providers in follow up PRs, starting to AWS config transformer: c61b48d , related to #391

-func setOpenShiftDefaults(cfg *awsconfig.CloudConfig) {
+func setOpenShiftDefaults(cfg *awsconfig.CloudConfig, features featuregates.FeatureGate) {
  if cfg.Global.ClusterServiceLoadBalancerHealthProbeMode == "" {
  	// OpenShift uses Shared mode by default.
  	// This attaches the health check for Cluster scope services to the "kube-proxy"
  	// health check endpoint served by OVN.
  	cfg.Global.ClusterServiceLoadBalancerHealthProbeMode = "Shared"
  }
+	if features.Enabled("AWSServiceLBNetworkSecurityGroup") {
+		if cfg.Global.NLBSecurityGroupMode != awsconfig.NLBSecurityGroupModeManaged {
+			// OpenShift enforces security group by default when deploying
+			// service type loadbalancer NLB.
+			cfg.Global.NLBSecurityGroupMode = awsconfig.NLBSecurityGroupModeManaged
+		}
+	}

}

Ref: SPLAT-2341

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@mtulio
Copy link
Author

mtulio commented Sep 2, 2025

/jira refresh

@openshift-ci-robot
Copy link

openshift-ci-robot commented Sep 2, 2025

@mtulio: This pull request references SPLAT-2341 which is a valid jira issue.

In response to this:

/jira refresh

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Copy link
Contributor

openshift-ci bot commented Sep 2, 2025

@mtulio: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/level0-clusterinfra-azure-ipi-proxy-tests c63ea02 link false /test level0-clusterinfra-azure-ipi-proxy-tests
ci/prow/e2e-gcp-ovn c63ea02 link false /test e2e-gcp-ovn
ci/prow/e2e-gcp-ovn-upgrade c63ea02 link false /test e2e-gcp-ovn-upgrade

Full PR test history. Your PR dashboard.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@JoelSpeed
Copy link
Contributor

/approve

@mtulio Is there something observable as an output of this PR that we can leverage for pre-merge testing to check the functionality? Or is this all just plumbing at this point?

Copy link
Contributor

openshift-ci bot commented Sep 3, 2025

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: JoelSpeed

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Sep 3, 2025
@mtulio
Copy link
Author

mtulio commented Sep 3, 2025

/test ?

Copy link
Contributor

openshift-ci bot commented Sep 3, 2025

@mtulio: The following commands are available to trigger required jobs:

/test e2e-aws-ovn
/test e2e-aws-ovn-upgrade
/test fmt
/test images
/test lint
/test okd-scos-images
/test security
/test unit
/test vendor
/test verify-deps
/test vet

The following commands are available to trigger optional jobs:

/test e2e-azure-manual-oidc
/test e2e-azure-ovn
/test e2e-azure-ovn-upgrade
/test e2e-gcp-ovn
/test e2e-gcp-ovn-upgrade
/test e2e-ibmcloud-ovn
/test e2e-nutanix-ovn
/test e2e-openstack-ovn
/test e2e-vsphere-ovn
/test level0-clusterinfra-azure-ipi-proxy-tests
/test okd-scos-e2e-aws-ovn
/test regression-clusterinfra-vsphere-ipi-ccm

Use /test all to run the following jobs that were automatically triggered:

pull-ci-openshift-cluster-cloud-controller-manager-operator-main-e2e-aws-ovn
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-e2e-aws-ovn-upgrade
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-e2e-azure-ovn
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-e2e-azure-ovn-upgrade
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-e2e-gcp-ovn
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-e2e-gcp-ovn-upgrade
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-e2e-openstack-ovn
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-e2e-vsphere-ovn
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-fmt
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-images
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-level0-clusterinfra-azure-ipi-proxy-tests
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-lint
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-okd-scos-e2e-aws-ovn
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-okd-scos-images
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-security
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-unit
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-vendor
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-verify-deps
pull-ci-openshift-cluster-cloud-controller-manager-operator-main-vet

In response to this:

/test ?

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@mtulio
Copy link
Author

mtulio commented Sep 3, 2025

/approve

@mtulio Is there something observable as an output of this PR that we can leverage for pre-merge testing to check the functionality? Or is this all just plumbing at this point?

@JoelSpeed I didn't increase verbosity to this PR right now, the plan is to work on a new optional presubmit to drive the #400, which will test this PR completely. Let me know if this makes sense, otherwise I can think in some logging output in a provider transformer just to output here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants