Skip to content

Commit a7cbd74

Browse files
jonded94Jonas Dedden
andauthored
Fix issue of duplicated environment variables (#869)
* Fix issue of replicated environment variables * Test for non-replicated environment variables --------- Co-authored-by: Jonas Dedden <[email protected]>
1 parent 39038be commit a7cbd74

File tree

2 files changed

+36
-27
lines changed

2 files changed

+36
-27
lines changed

dask_kubernetes/operator/controller/controller.py

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import asyncio
2+
import copy
23
import time
34
from collections import defaultdict
45
from contextlib import suppress
@@ -79,14 +80,15 @@ def build_scheduler_deployment_spec(
7980
"labels": labels,
8081
"annotations": annotations,
8182
}
82-
spec = {}
83-
spec["replicas"] = 1
84-
spec["selector"] = {
85-
"matchLabels": labels,
86-
}
87-
spec["template"] = {
88-
"metadata": metadata,
89-
"spec": pod_spec,
83+
spec = {
84+
"replicas": 1,
85+
"selector": {
86+
"matchLabels": labels,
87+
},
88+
"template": {
89+
"metadata": metadata,
90+
"spec": pod_spec,
91+
},
9092
}
9193
return {
9294
"apiVersion": "apps/v1",
@@ -132,14 +134,15 @@ def build_worker_deployment_spec(
132134
"labels": labels,
133135
"annotations": annotations,
134136
}
135-
spec = {}
136-
spec["replicas"] = 1 # make_worker_spec returns dict with a replicas key?
137-
spec["selector"] = {
138-
"matchLabels": labels,
139-
}
140-
spec["template"] = {
141-
"metadata": metadata,
142-
"spec": pod_spec,
137+
spec = {
138+
"replicas": 1,
139+
"selector": {
140+
"matchLabels": labels,
141+
},
142+
"template": {
143+
"metadata": metadata,
144+
"spec": copy.deepcopy(pod_spec),
145+
},
143146
}
144147
deployment_spec = {
145148
"apiVersion": "apps/v1",
@@ -157,13 +160,11 @@ def build_worker_deployment_spec(
157160
"value": f"tcp://{cluster_name}-scheduler.{namespace}.svc.cluster.local:8786",
158161
},
159162
]
160-
for i in range(len(deployment_spec["spec"]["template"]["spec"]["containers"])):
161-
if "env" in deployment_spec["spec"]["template"]["spec"]["containers"][i]:
162-
deployment_spec["spec"]["template"]["spec"]["containers"][i]["env"].extend(
163-
env
164-
)
163+
for container in deployment_spec["spec"]["template"]["spec"]["containers"]:
164+
if "env" in container:
165+
container["env"].extend(env)
165166
else:
166-
deployment_spec["spec"]["template"]["spec"]["containers"][i]["env"] = env
167+
container["env"] = env
167168
return deployment_spec
168169

169170

@@ -187,19 +188,19 @@ def build_job_pod_spec(job_name, cluster_name, namespace, spec, annotations, lab
187188
"labels": labels,
188189
"annotations": annotations,
189190
},
190-
"spec": spec,
191+
"spec": copy.deepcopy(spec),
191192
}
192193
env = [
193194
{
194195
"name": "DASK_SCHEDULER_ADDRESS",
195196
"value": f"tcp://{cluster_name}-scheduler.{namespace}.svc.cluster.local:8786",
196197
},
197198
]
198-
for i in range(len(pod_spec["spec"]["containers"])):
199-
if "env" in pod_spec["spec"]["containers"][i]:
200-
pod_spec["spec"]["containers"][i]["env"].extend(env)
199+
for container in pod_spec["spec"]["containers"]:
200+
if "env" in container:
201+
container["env"].extend(env)
201202
else:
202-
pod_spec["spec"]["containers"][i]["env"] = env
203+
container["env"] = env
203204
return pod_spec
204205

205206

dask_kubernetes/operator/controller/tests/test_controller.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,14 @@ async def test_object_dask_cluster(k8s_cluster, kopf_runner, gen_cluster):
636636
wg = worker_groups[0]
637637
assert isinstance(wg, DaskWorkerGroup)
638638

639+
# Test for non-replicated environment variables; Fix for https://github.com/dask/dask-kubernetes/issues/841
640+
for deployment in await wg.deployments():
641+
env_vars = deployment.spec["template"]["spec"]["containers"]["env"]
642+
env_var_names = [env_var["name"] for env_var in env_vars]
643+
assert len(env_var_names) == len(set(env_var_names))
644+
assert "DASK_WORKER_NAME" in env_var_names
645+
assert "DASK_SCHEDULER_ADDRESS" in env_var_names
646+
639647
scheduler_pod = await cluster.scheduler_pod()
640648
assert isinstance(scheduler_pod, Pod)
641649

0 commit comments

Comments
 (0)