Skip to content

Commit f838c4e

Browse files
author
Sanjay Prabhakar
committed
[patch] moved functions to mas.py
1 parent 8bb2e70 commit f838c4e

3 files changed

Lines changed: 62 additions & 62 deletions

File tree

src/mas/devops/mas.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import re
1313
import yaml
1414
from os import path
15+
from time import sleep
1516
from types import SimpleNamespace
1617
from kubernetes.dynamic.resource import ResourceInstance
1718
from openshift.dynamic import DynamicClient
@@ -194,3 +195,62 @@ def updateIBMEntitlementKey(dynClient: DynamicClient, namespace: str, icrUsernam
194195

195196
secret = secretsAPI.apply(body=secret, namespace=namespace)
196197
return secret
198+
199+
def waitForPVC(dynClient: DynamicClient, namespace: str, pvcName: str) -> bool:
200+
pvcAPI = dynClient.resources.get(api_version="v1", kind="PersistentVolumeClaim")
201+
maxRetries = 60
202+
foundReadyPVC = False
203+
retries = 0
204+
while not foundReadyPVC and retries < maxRetries:
205+
retries += 1
206+
try:
207+
pvc = pvcAPI.get(name=pvcName, namespace=namespace)
208+
if pvc.status.phase == "Bound":
209+
foundReadyPVC = True
210+
else:
211+
logger.debug("Waiting 5s for PVC {pvcName} to be ready before checking again ...")
212+
sleep(5)
213+
except NotFoundError:
214+
logger.debug("Waiting 5s for PVC {pvcName} to be created before checking again ...")
215+
sleep(5)
216+
return foundReadyPVC
217+
218+
219+
def patchPendingPVC(dynClient: DynamicClient, namespace: str, pvcName: str, storageClassName: str = None) -> bool:
220+
pvcAPI = dynClient.resources.get(api_version="v1", kind="PersistentVolumeClaim")
221+
try:
222+
pvc = pvcAPI.get(name=pvcName, namespace=namespace)
223+
if pvc.status.phase == "Pending" and pvc.spec.storageClassName is None:
224+
if storageClassName is not None and storageClassName(dynClient, name=storageClassName) is not None:
225+
pvc.spec.storageClassName = storageClassName
226+
else:
227+
defaultStorageClasses = getDefaultStorageClasses(dynClient)
228+
if defaultStorageClasses.provider is not None:
229+
pvc.spec.storageClassName = defaultStorageClasses.rwo
230+
else:
231+
logger.error("Unable to set storageClassName in PVC {pvcName}.")
232+
return False
233+
234+
pvcAPI.patch(body=pvc, namespace=namespace)
235+
236+
maxRetries = 60
237+
foundReadyPVC = False
238+
retries = 0
239+
while not foundReadyPVC and retries < maxRetries:
240+
retries += 1
241+
try:
242+
patchedPVC = pvcAPI.get(name=pvcName, namespace=namespace)
243+
if patchedPVC.status.phase == "Bound":
244+
foundReadyPVC = True
245+
else:
246+
logger.debug("Waiting 5s for PVC {pvcName} to be bound before checking again ...")
247+
sleep(5)
248+
except NotFoundError:
249+
logger.error("The patched PVC {pvcName} does not exist.")
250+
return False
251+
252+
return foundReadyPVC
253+
254+
except NotFoundError:
255+
logger.error("PVC {pvcName} does not exist")
256+
return False

src/mas/devops/ocp.py

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
from kubernetes.stream import stream
2121
from kubernetes.stream.ws_client import ERROR_CHANNEL
2222

23-
from .mas import getDefaultStorageClasses
24-
2523
import yaml
2624

2725
logger = logging.getLogger(__name__)
@@ -200,65 +198,6 @@ def crdExists(dynClient: DynamicClient, crdName: str) -> bool:
200198
logger.debug(f"CRD does not exist: {crdName}")
201199
return False
202200

203-
def waitForPVC(dynClient: DynamicClient, namespace: str, pvcName: str) -> bool:
204-
pvcAPI = dynClient.resources.get(api_version="v1", kind="PersistentVolumeClaim")
205-
maxRetries = 60
206-
foundReadyPVC = False
207-
retries = 0
208-
while not foundReadyPVC and retries < maxRetries:
209-
retries += 1
210-
try:
211-
pvc = pvcAPI.get(name=pvcName, namespace=namespace)
212-
if pvc.status.phase == "Bound":
213-
foundReadyPVC = True
214-
else:
215-
logger.debug("Waiting 5s for PVC {pvcName} to be ready before checking again ...")
216-
sleep(5)
217-
except NotFoundError:
218-
logger.debug("Waiting 5s for PVC {pvcName} to be created before checking again ...")
219-
sleep(5)
220-
return foundReadyPVC
221-
222-
223-
def patchPendingPVC(dynClient: DynamicClient, namespace: str, pvcName: str, storageClassName: str = None) -> bool:
224-
pvcAPI = dynClient.resources.get(api_version="v1", kind="PersistentVolumeClaim")
225-
try:
226-
pvc = pvcAPI.get(name=pvcName, namespace=namespace)
227-
if pvc.status.phase == "Pending" and pvc.spec.storageClassName is None:
228-
if storageClassName is not None and storageClassName(dynClient, name=storageClassName) is not None:
229-
pvc.spec.storageClassName = storageClassName
230-
else:
231-
defaultStorageClasses = getDefaultStorageClasses(dynClient)
232-
if defaultStorageClasses.provider is not None:
233-
pvc.spec.storageClassName = defaultStorageClasses.rwo
234-
else:
235-
logger.error("Unable to set storageClassName in PVC {pvcName}.")
236-
return False
237-
238-
pvcAPI.patch(body=pvc, namespace=namespace)
239-
240-
maxRetries = 60
241-
foundReadyPVC = False
242-
retries = 0
243-
while not foundReadyPVC and retries < maxRetries:
244-
retries += 1
245-
try:
246-
patchedPVC = pvcAPI.get(name=pvcName, namespace=namespace)
247-
if patchedPVC.status.phase == "Bound":
248-
foundReadyPVC = True
249-
else:
250-
logger.debug("Waiting 5s for PVC {pvcName} to be bound before checking again ...")
251-
sleep(5)
252-
except NotFoundError:
253-
logger.error("The patched PVC {pvcName} does not exist.")
254-
return False
255-
256-
return foundReadyPVC
257-
258-
except NotFoundError:
259-
logger.error("PVC {pvcName} does not exist")
260-
return False
261-
262201

263202
# Assisted by WCA@IBM
264203
# Latest GenAI contribution: ibm/granite-8b-code-instruct

src/mas/devops/tekton.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222

2323
from jinja2 import Environment, FileSystemLoader
2424

25-
from .ocp import getConsoleURL, waitForCRD, waitForDeployment, waitForPVC, patchPendingPVC, crdExists
25+
from .ocp import getConsoleURL, waitForCRD, waitForDeployment, crdExists
26+
from .mas import waitForPVC, patchPendingPVC
2627

2728
logger = logging.getLogger(__name__)
2829

0 commit comments

Comments
 (0)