Coverage for ocp_resources/job.py: 0%

31 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-01-30 10:48 +0200

1import kubernetes 

2 

3from ocp_resources.utils.constants import TIMEOUT_4MINUTES 

4from ocp_resources.resource import NamespacedResource 

5 

6 

7class Job(NamespacedResource): 

8 """ 

9 Job object. 

10 

11 Args: 

12 name (str): Job name. 

13 namespace (str): Namespace name. 

14 client (DynamicClient): Dynamic client for connecting to a remote cluster. 

15 teardown (bool): Indicates if this resource would need to be deleted. 

16 yaml_file (str): Yaml file for the resource. 

17 delete_timeout (int): Timeout associated with delete action. 

18 backoff_limit (int): The number of retries for a job. 

19 restart_policy (str): The restart policy of the pod. 

20 service_account (str): Optional. Service account name. 

21 containers (list): List of containers belonging to the pod that the job will create. 

22 background_propagation_policy (str): Control how object dependents will be deleted when an object is 

23 deleted (for example the pods left behind when you delete a Job). Options are: "Background", 

24 "Foreground" and "Orphan". Read more here: 

25 https://kubernetes.io/docs/concepts/architecture/garbage-collection/#cascading-deletion 

26 """ 

27 

28 api_group = NamespacedResource.ApiGroup.BATCH 

29 

30 class Condition(NamespacedResource.Condition): 

31 COMPLETE = "Complete" 

32 

33 def __init__( 

34 self, 

35 name=None, 

36 namespace=None, 

37 client=None, 

38 teardown=True, 

39 yaml_file=None, 

40 delete_timeout=TIMEOUT_4MINUTES, 

41 backoff_limit=None, 

42 restart_policy=None, 

43 service_account=None, 

44 containers=None, 

45 background_propagation_policy=None, 

46 **kwargs, 

47 ): 

48 super().__init__( 

49 name=name, 

50 namespace=namespace, 

51 client=client, 

52 teardown=teardown, 

53 yaml_file=yaml_file, 

54 delete_timeout=delete_timeout, 

55 **kwargs, 

56 ) 

57 self.restart_policy = restart_policy 

58 self.backoff_limit = backoff_limit 

59 self.service_account = service_account 

60 self.containers = containers 

61 self.background_propagation_policy = background_propagation_policy 

62 

63 def to_dict(self) -> None: 

64 super().to_dict() 

65 if not self.kind_dict and not self.yaml_file: 

66 self.res.setdefault("spec", {}) 

67 

68 if self.backoff_limit is not None: 

69 self.res["spec"]["backoffLimit"] = self.backoff_limit 

70 

71 if self.containers: 

72 self.res["spec"].setdefault("template", {}).setdefault("spec", {}) 

73 self.res["spec"]["template"]["spec"]["containers"] = self.containers 

74 

75 if self.service_account: 

76 self.res["spec"]["template"]["spec"]["serviceAccount"] = self.service_account 

77 

78 if self.restart_policy: 

79 self.res["spec"]["template"]["spec"]["restartPolicy"] = self.restart_policy 

80 

81 def delete(self, wait=False, timeout=TIMEOUT_4MINUTES, body=None): 

82 """ 

83 Delete Job object 

84 

85 Args: 

86 wait (bool): True to wait for Job to be deleted. 

87 timeout (int): Time to wait for resource deletion. 

88 body (dict): Content to send to delete(). 

89 

90 Returns: 

91 bool: True if delete succeeded, False otherwise. 

92 """ 

93 if not body and self.background_propagation_policy: 

94 body = kubernetes.client.V1DeleteOptions(propagation_policy=self.background_propagation_policy) 

95 return super().delete(wait=wait, timeout=timeout, body=body)