3030def configureTektonFeatureFlags (dynClient : DynamicClient ) -> bool :
3131 """
3232 Configure Tekton feature flags to disable coschedule (Affinity Assistant).
33-
33+
3434 This prevents the "more than one PersistentVolumeClaim is bound" error when
3535 tasks use multiple PVCs with incompatible access modes.
36-
36+
3737 Parameters:
3838 dynClient (DynamicClient): OpenShift Dynamic Client
39-
39+
4040 Returns:
4141 bool: True if configuration is successful, False otherwise
4242 """
4343 try :
4444 configMapAPI = dynClient .resources .get (api_version = "v1" , kind = "ConfigMap" )
4545 namespace = "openshift-pipelines"
4646 configMapName = "feature-flags"
47-
47+
4848 # Get the existing ConfigMap
4949 try :
5050 featureFlags = configMapAPI .get (name = configMapName , namespace = namespace )
5151 logger .info (f"Found existing Tekton feature-flags ConfigMap in { namespace } " )
52-
52+
5353 # Update the coschedule setting
5454 if featureFlags .data is None :
5555 featureFlags .data = {}
56-
56+
5757 currentCoschedule = featureFlags .data .get ("coschedule" , "workspaces" )
5858 if currentCoschedule != "disabled" :
5959 logger .info (f"Updating Tekton coschedule setting from '{ currentCoschedule } ' to 'disabled'" )
6060 featureFlags .data ["coschedule" ] = "disabled"
6161 configMapAPI .patch (body = featureFlags , namespace = namespace )
6262 logger .info ("Successfully updated Tekton feature flags to disable coschedule" )
63-
63+
6464 # Restart the Tekton controller to apply changes
6565 logger .info ("Restarting tekton-pipelines-controller to apply feature flag changes" )
6666 deploymentAPI = dynClient .resources .get (api_version = "apps/v1" , kind = "Deployment" )
6767 controller = deploymentAPI .get (name = "tekton-pipelines-controller" , namespace = namespace )
68-
68+
6969 # Trigger a rollout by updating an annotation
7070 if controller .spec .template .metadata .annotations is None :
7171 controller .spec .template .metadata .annotations = {}
7272 controller .spec .template .metadata .annotations ["kubectl.kubernetes.io/restartedAt" ] = datetime .now ().isoformat ()
7373 deploymentAPI .patch (body = controller , namespace = namespace )
74-
74+
7575 # Wait for the controller to be ready
7676 logger .debug ("Waiting for tekton-pipelines-controller to be ready after restart" )
7777 foundReadyController = waitForDeployment (dynClient , namespace = namespace , deploymentName = "tekton-pipelines-controller" )
@@ -84,11 +84,11 @@ def configureTektonFeatureFlags(dynClient: DynamicClient) -> bool:
8484 else :
8585 logger .info ("Tekton coschedule is already set to 'disabled', no changes needed" )
8686 return True
87-
87+
8888 except NotFoundError :
8989 logger .warning (f"ConfigMap { configMapName } not found in { namespace } , it may not exist yet" )
9090 return False
91-
91+
9292 except Exception as e :
9393 logger .error (f"Error configuring Tekton feature flags: { str (e )} " )
9494 return False
0 commit comments