@@ -118,7 +118,7 @@ def create_whisk_user(self, whisk_user_dict, namespace="nuvolaris"):
118118 logging .error ("create_whisk_user %s" , ex )
119119 return False
120120
121- def delete_whisk_user (self , username , namespace = "nuvolaris" ):
121+ def delete_whisk_user (self , username : str , namespace = "nuvolaris" ):
122122 """ "
123123 Delete a whisk user using a DELETE operation
124124 param: username of the whisksusers resource to delete
@@ -147,7 +147,7 @@ def delete_whisk_user(self, username, namespace="nuvolaris"):
147147 logging .error (f"delete_whisk_user { ex } " )
148148 return False
149149
150- def get_whisk_user (self , username , namespace = "nuvolaris" ):
150+ def get_whisk_user (self , username : str , namespace = "nuvolaris" ):
151151 """ "
152152 Get a whisk user using a GET operation
153153 param: username of the whisksusers resource to delete
@@ -210,7 +210,7 @@ def update_whisk_user(self, whisk_user_dict, namespace="nuvolaris"):
210210 logging .error (f"update_whisk_user { ex } " )
211211 return False
212212
213- def get_config_map (self , cm_name , namespace = "nuvolaris" ):
213+ def get_config_map (self , cm_name : str , namespace = "nuvolaris" ):
214214 """
215215 Get a ConfigMap by name.
216216 :param cm_name: Name of the ConfigMap.
@@ -238,7 +238,7 @@ def get_config_map(self, cm_name, namespace="nuvolaris"):
238238 logging .error (f"get_config_map { ex } " )
239239 return None
240240
241- def post_config_map (self , cm_name , file_or_dir , namespace = "nuvolaris" ):
241+ def post_config_map (self , cm_name : str , file_or_dir : str , namespace = "nuvolaris" ):
242242 """
243243 Create a ConfigMap from a file or directory.
244244 :param cm_name: Name of the ConfigMap.
@@ -291,7 +291,7 @@ def post_config_map(self, cm_name, file_or_dir, namespace="nuvolaris"):
291291 logging .error (f"post_config_map { ex } " )
292292 return None
293293
294- def delete_config_map (self , cm_name , namespace = "nuvolaris" ):
294+ def delete_config_map (self , cm_name : str , namespace = "nuvolaris" ):
295295 """
296296 Delete a ConfigMap by name.
297297 :param cm_name: Name of the ConfigMap to delete.
@@ -320,7 +320,7 @@ def delete_config_map(self, cm_name, namespace="nuvolaris"):
320320 logging .error (f"delete_config_map { ex } " )
321321 return False
322322
323- def get_secret (self , secret_name , namespace = "nuvolaris" ):
323+ def get_secret (self , secret_name : str , namespace = "nuvolaris" ):
324324 """
325325 Get a Kubernetes secret by name.
326326 :param secret_name: Name of the secret.
@@ -348,7 +348,7 @@ def get_secret(self, secret_name, namespace="nuvolaris"):
348348 logging .error (f"get_secret { ex } " )
349349 return None
350350
351- def post_secret (self , secret_name , secret_data , namespace = "nuvolaris" ):
351+ def post_secret (self , secret_name : str , secret_data : dict , namespace = "nuvolaris" ):
352352 """
353353 Create a Kubernetes secret.
354354 :param secret_name: Name of the secret.
@@ -385,7 +385,7 @@ def post_secret(self, secret_name, secret_data, namespace="nuvolaris"):
385385 logging .error (f"post_secret { ex } " )
386386 return None
387387
388- def delete_secret (self , secret_name , namespace = "nuvolaris" ):
388+ def delete_secret (self , secret_name : str , namespace = "nuvolaris" ):
389389 """
390390 Delete a Kubernetes secret.
391391 :param secret_name: Name of the secret to delete.
@@ -412,11 +412,70 @@ def delete_secret(self, secret_name, namespace="nuvolaris"):
412412 except Exception as ex :
413413 logging .error (f"delete_secret { ex } " )
414414 return False
415+
416+ def get_jobs (self , name_filter : str = None , namespace = "nuvolaris" ):
417+ """
418+ Get all Kubernetes jobs in a specific namespace.
419+ :param namespace: Namespace to list jobs from.
420+ :return: List of jobs or None if failed.
421+ """
422+ url = f"{ self .host } /apis/batch/v1/namespaces/{ namespace } /jobs"
423+ headers = {"Authorization" : self .token }
424+ try :
425+ logging .info (f"GET request to { url } " )
426+ response = req .get (url , headers = headers , verify = self .ssl_ca_cert )
427+
428+ if response .status_code in [200 , 202 ]:
429+ logging .debug (
430+ f"GET to { url } succeeded with { response .status_code } . Body { response .text } "
431+ )
432+
433+ if name_filter :
434+ jobs = json .loads (response .text )["items" ]
435+ filtered_jobs = [job for job in jobs if name_filter in job ["metadata" ]["name" ]]
436+ return filtered_jobs
437+
438+ return json .loads (response .text )["items" ]
415439
416- def post_job (self , job_name , job_manifest , namespace = "nuvolaris" ):
440+ logging .error (
441+ f"GET to { url } failed with { response .status_code } . Body { response .text } "
442+ )
443+ return None
444+ except Exception as ex :
445+ logging .error (f"get_jobs { ex } " )
446+ return None
447+
448+ def delete_job (self , job_name : str , namespace = "nuvolaris" ):
449+ """
450+ Delete a Kubernetes job by name.
451+ :param job_name: Name of the job to delete.
452+ :param namespace: Namespace where the job is located.
453+ :return: True if deletion was successful, False otherwise.
454+ """
455+ url = f"{ self .host } /apis/batch/v1/namespaces/{ namespace } /jobs/{ job_name } "
456+ headers = {"Authorization" : self .token }
457+
458+ try :
459+ logging .info (f"DELETE request to { url } " )
460+ response = req .delete (url , headers = headers , verify = self .ssl_ca_cert )
461+
462+ if response .status_code in [200 , 202 ]:
463+ logging .debug (
464+ f"DELETE to { url } succeeded with { response .status_code } . Body { response .text } "
465+ )
466+ return True
467+
468+ logging .error (
469+ f"DELETE to { url } failed with { response .status_code } . Body { response .text } "
470+ )
471+ return False
472+ except Exception as ex :
473+ logging .error (f"delete_job { ex } " )
474+ return False
475+
476+ def post_job (self , job_manifest : json , namespace = "nuvolaris" ):
417477 """
418478 Create a Kubernetes job.
419- :param job_name: Name of the job.
420479 :param job_manifest: Dictionary containing the job manifest.
421480 :param namespace: Namespace where the job will be created.
422481 :return: The created job or None if failed.
@@ -440,7 +499,7 @@ def post_job(self, job_name, job_manifest, namespace="nuvolaris"):
440499 logging .error (f"post_job { ex } " )
441500 return None
442501
443- def get_pod_by_job_name (self , job_name , namespace = "nuvolaris" ):
502+ def get_pod_by_job_name (self , job_name : str , namespace = "nuvolaris" ):
444503 """
445504 Get the pod name associated with a job by its name.
446505 :param job_name: Name of the job.
@@ -474,7 +533,7 @@ def get_pod_by_job_name(self, job_name, namespace="nuvolaris"):
474533 logging .error (f"get_pod_by_job_name { ex } " )
475534 return None
476535
477- def stream_pod_logs (self , pod_name , namespace = "nuvolaris" ):
536+ def stream_pod_logs (self , pod_name : str , namespace = "nuvolaris" ):
478537 """
479538 Stream logs from a specific pod.
480539 :param pod_name: Name of the pod to stream logs from.
@@ -487,7 +546,7 @@ def stream_pod_logs(self, pod_name, namespace="nuvolaris"):
487546 if line :
488547 print (line .decode ())
489548
490- def check_job_status (self , job_name , namespace = "nuvolaris" ):
549+ def check_job_status (self , job_name : str , namespace = "nuvolaris" ):
491550 """
492551 Check the status of a job by its name.
493552 :param job_name: Name of the job to check.
0 commit comments