|
| 1 | +from __future__ import annotations |
| 2 | +from typing import TYPE_CHECKING |
1 | 3 | import json
|
2 | 4 | import signal
|
3 | 5 |
|
|
7 | 9 | from villas.controller.exceptions import SimulationException
|
8 | 10 | from villas.controller.util import merge
|
9 | 11 |
|
| 12 | +if TYPE_CHECKING: |
| 13 | + from villas.controller.components.managers.kubernetes \ |
| 14 | + import KubernetesManager |
| 15 | + |
10 | 16 |
|
11 | 17 | class KubernetesJob(Simulator):
|
12 | 18 |
|
13 |
| - def __init__(self, manager, **args): |
| 19 | + def __init__(self, manager: KubernetesManager, **args): |
14 | 20 | super().__init__(**args)
|
15 | 21 |
|
16 | 22 | self.manager = manager
|
@@ -40,6 +46,16 @@ def schema(self):
|
40 | 46 | **super().schema
|
41 | 47 | }
|
42 | 48 |
|
| 49 | + def _owner(self): |
| 50 | + if self.manager.my_pod_name and self.manager.my_pod_uid: |
| 51 | + return k8s.client.V1OwnerReference( |
| 52 | + kind='Pod', |
| 53 | + name=self.manager.my_pod_name, |
| 54 | + uid=self.manager.my_pod_uid |
| 55 | + ) |
| 56 | + |
| 57 | + return None |
| 58 | + |
43 | 59 | def _prepare_job(self, job, payload):
|
44 | 60 | # Create config map
|
45 | 61 | cm = self._create_config_map(payload)
|
@@ -84,6 +100,9 @@ def _prepare_job(self, job, payload):
|
84 | 100 | job.metadata.generate_name = name + '-'
|
85 | 101 | job.metadata.name = None
|
86 | 102 |
|
| 103 | + if o := self._owner(): |
| 104 | + job.metadata.owner_references = [o] |
| 105 | + |
87 | 106 | if job.metadata.labels is None:
|
88 | 107 | job.metadata.labels = {}
|
89 | 108 |
|
@@ -119,6 +138,9 @@ def _create_config_map(self, payload):
|
119 | 138 | }
|
120 | 139 | )
|
121 | 140 |
|
| 141 | + if o := self._owner(): |
| 142 | + self.cm.metadata.owner_references = [o] |
| 143 | + |
122 | 144 | return c.create_namespaced_config_map(
|
123 | 145 | namespace=self.manager.namespace,
|
124 | 146 | body=self.cm
|
@@ -147,6 +169,7 @@ def _delete_job(self):
|
147 | 169 | self.properties['pod_names'] = []
|
148 | 170 |
|
149 | 171 | def start(self, payload):
|
| 172 | + # Delete prior job |
150 | 173 | self._delete_job()
|
151 | 174 |
|
152 | 175 | job = payload.get('job', {})
|
|
0 commit comments