From 8d1b13bc27b1c43df6ce5f4338199b7dd5dd370f Mon Sep 17 00:00:00 2001 From: terc1997 <64480693+terc1997@users.noreply.github.com> Date: Mon, 1 Sep 2025 17:31:35 -0300 Subject: [PATCH 1/2] [patch] delete csv when install plan fails --- src/mas/devops/olm.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/mas/devops/olm.py b/src/mas/devops/olm.py index 5481000b..4447d0c3 100644 --- a/src/mas/devops/olm.py +++ b/src/mas/devops/olm.py @@ -11,6 +11,7 @@ import logging from time import sleep from os import path +from re import search from kubernetes.dynamic.exceptions import NotFoundError from openshift.dynamic import DynamicClient @@ -152,6 +153,7 @@ def applySubscription(dynClient: DynamicClient, namespace: str, packageName: str while installPlanPhase != "Complete": installPlanResource = installPlanAPI.get(name=installPlanName, namespace=namespace) installPlanPhase = installPlanResource.status.phase + _deleteFailedCsv(dynClient, name=name, namespace=namespace) sleep(30) # Wait for Subscription to complete @@ -186,3 +188,17 @@ def _findAndDeleteResources(api, resourceType: str, labelSelector: str, namespac for item in resources.items: logger.info(f"Deleting {resourceType} {item.metadata.name}") api.delete(name=item.metadata.name, namespace=namespace) + + +def _deleteFailedCsv(dynClient: DynamicClient, name: str, namespace: str): + subscriptionsAPI = dynClient.resources.get(api_version="operators.coreos.com/v1alpha1", kind="Subscription") + subscriptionResource = subscriptionsAPI.get(name=name, namespace=namespace) + + conditionsSortedByTimestamp = sorted(subscriptionResource.status.conditions, key=lambda item: item['lastTransitionTime'], reverse=True) + if conditionsSortedByTimestamp[0]['reason'] == 'ConstraintsNotSatisfiable': + message=conditionsSortedByTimestamp[0]['message'] + captureGroup=r"clusterserviceversion\s+([a-zA-Z0-9\-\.]+)" + csvName=search(captureGroup, message) + + csvAPI = dynClient.resources.get(api_version="operators.coreos.com/v1alpha1", kind="ClusterServiceVersion") + csvAPI.delete(name=csvName, namespace=namespace) From c09d97fa3e10670ea6a57bd958bc2e8706b33b5c Mon Sep 17 00:00:00 2001 From: terc1997 <64480693+terc1997@users.noreply.github.com> Date: Mon, 1 Sep 2025 17:38:04 -0300 Subject: [PATCH 2/2] [patch] fix formatting Signed-off-by: terc1997 <64480693+terc1997@users.noreply.github.com> --- src/mas/devops/olm.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mas/devops/olm.py b/src/mas/devops/olm.py index 4447d0c3..cf8d6e60 100644 --- a/src/mas/devops/olm.py +++ b/src/mas/devops/olm.py @@ -196,9 +196,9 @@ def _deleteFailedCsv(dynClient: DynamicClient, name: str, namespace: str): conditionsSortedByTimestamp = sorted(subscriptionResource.status.conditions, key=lambda item: item['lastTransitionTime'], reverse=True) if conditionsSortedByTimestamp[0]['reason'] == 'ConstraintsNotSatisfiable': - message=conditionsSortedByTimestamp[0]['message'] - captureGroup=r"clusterserviceversion\s+([a-zA-Z0-9\-\.]+)" - csvName=search(captureGroup, message) + message = conditionsSortedByTimestamp[0]['message'] + captureGroup = r"clusterserviceversion\s+([a-zA-Z0-9\-\.]+)" + csvName = search(captureGroup, message) csvAPI = dynClient.resources.get(api_version="operators.coreos.com/v1alpha1", kind="ClusterServiceVersion") csvAPI.delete(name=csvName, namespace=namespace)