111131: Default storage class has no provisioner
121232: None or more then one default Storage Class is defined
131333: CSI provider does not belong to the recommended providers
14- (34: No CSI provider found)
1514
161541: Not able to bind PersitantVolume to PersitantVolumeClaim
171642: ReadWriteOnce is not a supported access mode
@@ -58,7 +57,6 @@ def check_default_storageclass(k8s_client_storage):
5857 storageclasses_dict = json .loads (storageclasses )
5958
6059 ndefault_class = 0
61-
6260 for item in storageclasses_dict ["items" ]:
6361 storage_class_name = item ["metadata" ]["name" ]
6462 annotations = item ["metadata" ]["annotations" ]
@@ -74,7 +72,6 @@ def check_default_storageclass(k8s_client_storage):
7472 "This means the default storage class has no provisioner." ,
7573 return_code = 31 ,
7674 )
77-
7875 if ndefault_class != 1 :
7976 raise SCSTestException (
8077 "More then one or none default StorageClass is defined! " ,
@@ -86,7 +83,15 @@ def check_default_storageclass(k8s_client_storage):
8683 return default_storage_class
8784
8885
89- def create_pvc_pod (k8s_api_instance , storage_class , pvc_name = PVC_NAME , pod_name = POD_NAME , pv_name = PV_NAME , namespace = NAMESPACE , num_retries = NUM_RETRIES ):
86+ def create_pvc_pod (
87+ k8s_api_instance ,
88+ storage_class ,
89+ pvc_name = PVC_NAME ,
90+ pod_name = POD_NAME ,
91+ pv_name = PV_NAME ,
92+ namespace = NAMESPACE ,
93+ num_retries = NUM_RETRIES ,
94+ ):
9095 """
9196 1. Create PersistantVolumeClaim
9297 2. Create pod which uses the PersitantVolumeClaim
@@ -108,22 +113,22 @@ def create_pvc_pod(k8s_api_instance, storage_class, pvc_name = PVC_NAME, pod_nam
108113 )
109114
110115 api_response = k8s_api_instance .create_namespaced_persistent_volume_claim (
111- NAMESPACE , body_pvc
116+ namespace , body_pvc
112117 )
113118
114119 # 2. Create a pod which makes use of the PersitantVolumeClaim
115120 logger .debug (f"create pod: { pod_name } " )
116121
117122 pod_vol = client .V1Volume (
118- name = PV_NAME ,
123+ name = pv_name ,
119124 persistent_volume_claim = client .V1PersistentVolumeClaimVolumeSource (pvc_name ),
120125 )
121126 pod_con = client .V1Container (
122127 name = "nginx" ,
123128 image = "nginx" ,
124129 ports = [client .V1ContainerPort (container_port = 80 )],
125130 volume_mounts = [
126- client .V1VolumeMount (name = PV_NAME , mount_path = "/usr/share/nginx/html" )
131+ client .V1VolumeMount (name = pv_name , mount_path = "/usr/share/nginx/html" )
127132 ],
128133 )
129134 pod_spec = client .V1PodSpec (volumes = [pod_vol ], containers = [pod_con ])
@@ -143,7 +148,7 @@ def create_pvc_pod(k8s_api_instance, storage_class, pvc_name = PVC_NAME, pod_nam
143148 retries = 0
144149 while pod_status != "Running" and retries <= num_retries :
145150 api_response = k8s_api_instance .read_namespaced_pod (
146- POD_NAME , NAMESPACE , _preload_content = False
151+ pod_name , namespace , _preload_content = False
147152 )
148153 pod_info = json .loads (api_response .read ().decode ("utf-8" ))
149154 pod_status = pod_info ["status" ]["phase" ]
@@ -159,7 +164,9 @@ def create_pvc_pod(k8s_api_instance, storage_class, pvc_name = PVC_NAME, pod_nam
159164 return 0
160165
161166
162- def check_default_persistentvolumeclaim_readwriteonce (k8s_api_instance ):
167+ def check_default_persistentvolumeclaim_readwriteonce (
168+ k8s_api_instance , pvc_name = PVC_NAME
169+ ):
163170 """
164171 3. Check if PV got succesfully created using ReadWriteOnce
165172 """
@@ -174,8 +181,8 @@ def check_default_persistentvolumeclaim_readwriteonce(k8s_api_instance):
174181 logger .debug ("searching for corresponding pv" )
175182 for pv in pv_list :
176183 logger .debug (f"parsing pv: { pv ['metadata' ]['name' ]} " )
177- if pv ["spec" ]["claimRef" ]["name" ] == PVC_NAME :
178- logger .debug (f"found pv to pvc: { PVC_NAME } " )
184+ if pv ["spec" ]["claimRef" ]["name" ] == pvc_name :
185+ logger .debug (f"found pv to pvc: { pvc_name } " )
179186
180187 if pv ["status" ]["phase" ] != "Bound" :
181188 raise SCSTestException (
@@ -191,12 +198,12 @@ def check_default_persistentvolumeclaim_readwriteonce(k8s_api_instance):
191198 return 0
192199
193200
194- def check_csi_provider (k8s_core_api ):
201+ def check_csi_provider (k8s_core_api , allowed_csi_prov = ALLOWED_CSI_PROV ):
195202 pods = k8s_core_api .list_namespaced_pod (namespace = "kube-system" )
196203 csi_list = []
197204 for pod in pods .items :
198205 if "csi" in pod .metadata .name :
199- if pod .metadata .name in ALLOWED_CSI_PROV :
206+ if pod .metadata .name in allowed_csi_prov :
200207 csi_list .append (pod .metadata .name )
201208 logger .info (f"CSI-Provider: { pod .metadata .name } " )
202209 else :
@@ -206,10 +213,6 @@ def check_csi_provider(k8s_core_api):
206213 )
207214 else :
208215 logger .info ("CSI-Provider: No CSI Provider found." )
209- # raise SCSTestException(
210- # "CSI-Provider: No CSI Provider found.",
211- # return_code=34,
212- # )
213216 return 0
214217
215218
@@ -344,18 +347,15 @@ def main(argv):
344347 with TestEnvironment (kubeconfig ) as env :
345348 # Check if default storage class is defined (MANDATORY)
346349 k8s_core_api = env .k8s_core_api
347-
350+ logger . debug ( "check_default_storageclass()" )
348351 try :
349- logger .debug ("check_default_storageclass()" )
350352 default_class_name = check_default_storageclass (env .k8s_storage_api )
351- except SCSTestException as test_exception : # delete
352- logger .error (f"L{ inspect .currentframe ().f_lineno } { test_exception } " )
353- env .return_message = f"{ test_exception } "
354- env .return_code = test_exception .return_code
355- except Exception as exception_message : # nochmal prüfen ob SCSTest spezifischer
356- logger .error (f"L{ inspect .currentframe ().f_lineno } { exception_message } " )
357- env .return_message = f"{ exception_message } "
353+ except SCSTestException :
354+ raise
355+ except Exception :
358356 env .return_code = 1
357+ logger .debug ("check_default_storageclass() failed" )
358+ return env .return_code
359359
360360 try :
361361 env .return_code = create_pvc_pod (k8s_core_api , default_class_name )
0 commit comments