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
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-30 10:48 +0200
1import kubernetes
3from ocp_resources.utils.constants import TIMEOUT_4MINUTES
4from ocp_resources.resource import NamespacedResource
7class Job(NamespacedResource):
8 """
9 Job object.
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 """
28 api_group = NamespacedResource.ApiGroup.BATCH
30 class Condition(NamespacedResource.Condition):
31 COMPLETE = "Complete"
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
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", {})
68 if self.backoff_limit is not None:
69 self.res["spec"]["backoffLimit"] = self.backoff_limit
71 if self.containers:
72 self.res["spec"].setdefault("template", {}).setdefault("spec", {})
73 self.res["spec"]["template"]["spec"]["containers"] = self.containers
75 if self.service_account:
76 self.res["spec"]["template"]["spec"]["serviceAccount"] = self.service_account
78 if self.restart_policy:
79 self.res["spec"]["template"]["spec"]["restartPolicy"] = self.restart_policy
81 def delete(self, wait=False, timeout=TIMEOUT_4MINUTES, body=None):
82 """
83 Delete Job object
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().
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)