Skip to content

Commit 8d1b13b

Browse files
committed
[patch] delete csv when install plan fails
1 parent 651287a commit 8d1b13b

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

src/mas/devops/olm.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import logging
1212
from time import sleep
1313
from os import path
14+
from re import search
1415

1516
from kubernetes.dynamic.exceptions import NotFoundError
1617
from openshift.dynamic import DynamicClient
@@ -152,6 +153,7 @@ def applySubscription(dynClient: DynamicClient, namespace: str, packageName: str
152153
while installPlanPhase != "Complete":
153154
installPlanResource = installPlanAPI.get(name=installPlanName, namespace=namespace)
154155
installPlanPhase = installPlanResource.status.phase
156+
_deleteFailedCsv(dynClient, name=name, namespace=namespace)
155157
sleep(30)
156158

157159
# Wait for Subscription to complete
@@ -186,3 +188,17 @@ def _findAndDeleteResources(api, resourceType: str, labelSelector: str, namespac
186188
for item in resources.items:
187189
logger.info(f"Deleting {resourceType} {item.metadata.name}")
188190
api.delete(name=item.metadata.name, namespace=namespace)
191+
192+
193+
def _deleteFailedCsv(dynClient: DynamicClient, name: str, namespace: str):
194+
subscriptionsAPI = dynClient.resources.get(api_version="operators.coreos.com/v1alpha1", kind="Subscription")
195+
subscriptionResource = subscriptionsAPI.get(name=name, namespace=namespace)
196+
197+
conditionsSortedByTimestamp = sorted(subscriptionResource.status.conditions, key=lambda item: item['lastTransitionTime'], reverse=True)
198+
if conditionsSortedByTimestamp[0]['reason'] == 'ConstraintsNotSatisfiable':
199+
message=conditionsSortedByTimestamp[0]['message']
200+
captureGroup=r"clusterserviceversion\s+([a-zA-Z0-9\-\.]+)"
201+
csvName=search(captureGroup, message)
202+
203+
csvAPI = dynClient.resources.get(api_version="operators.coreos.com/v1alpha1", kind="ClusterServiceVersion")
204+
csvAPI.delete(name=csvName, namespace=namespace)

0 commit comments

Comments
 (0)