mirror of
https://github.com/clearml/clearml-agent
synced 2025-05-08 22:09:33 +00:00
Support k8s glue container env vars merging
This commit is contained in:
parent
9ce6baf074
commit
14ac584577
@ -433,7 +433,7 @@ class K8sIntegration(Worker):
|
|||||||
script_encoded.encode('ascii')
|
script_encoded.encode('ascii')
|
||||||
).decode('ascii'))
|
).decode('ascii'))
|
||||||
|
|
||||||
container = merge_dicts(
|
container = self._merge_containers(
|
||||||
container,
|
container,
|
||||||
dict(name=name, image=docker_image,
|
dict(name=name, image=docker_image,
|
||||||
command=['/bin/bash'],
|
command=['/bin/bash'],
|
||||||
@ -441,7 +441,7 @@ class K8sIntegration(Worker):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if template['spec']['containers']:
|
if template['spec']['containers']:
|
||||||
template['spec']['containers'][0] = merge_dicts(template['spec']['containers'][0], container)
|
template['spec']['containers'][0] = self._merge_containers(template['spec']['containers'][0], container)
|
||||||
else:
|
else:
|
||||||
template['spec']['containers'].append(container)
|
template['spec']['containers'].append(container)
|
||||||
|
|
||||||
@ -591,3 +591,17 @@ class K8sIntegration(Worker):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def get_ssh_server_bash(cls, ssh_port_number):
|
def get_ssh_server_bash(cls, ssh_port_number):
|
||||||
return ' ; '.join(line.format(port=ssh_port_number) for line in cls.BASH_INSTALL_SSH_CMD)
|
return ' ; '.join(line.format(port=ssh_port_number) for line in cls.BASH_INSTALL_SSH_CMD)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _merge_containers(c1, c2):
|
||||||
|
def merge_env(k, d1, d2, not_set):
|
||||||
|
if k != "env":
|
||||||
|
return not_set
|
||||||
|
# Merge environment lists, second list overrides first
|
||||||
|
return list({
|
||||||
|
item['name']: item for envs in (d1, d2) for item in envs
|
||||||
|
}.values())
|
||||||
|
|
||||||
|
return merge_dicts(
|
||||||
|
c1, c2, custom_merge_func=merge_env
|
||||||
|
)
|
||||||
|
@ -1,17 +1,23 @@
|
|||||||
from typing import Callable, Dict, Any
|
from typing import Callable, Dict, Any, Optional
|
||||||
|
|
||||||
|
_not_set = object()
|
||||||
|
|
||||||
|
|
||||||
def filter_keys(filter_, dct): # type: (Callable[[Any], bool], Dict) -> Dict
|
def filter_keys(filter_, dct): # type: (Callable[[Any], bool], Dict) -> Dict
|
||||||
return {key: value for key, value in dct.items() if filter_(key)}
|
return {key: value for key, value in dct.items() if filter_(key)}
|
||||||
|
|
||||||
|
|
||||||
def merge_dicts(dict1, dict2):
|
def merge_dicts(dict1, dict2, custom_merge_func=None):
|
||||||
|
# type: (Any, Any, Optional[Callable[[str, Any, Any, Any], Any]]) -> Any
|
||||||
""" Recursively merges dict2 into dict1 """
|
""" Recursively merges dict2 into dict1 """
|
||||||
if not isinstance(dict1, dict) or not isinstance(dict2, dict):
|
if not isinstance(dict1, dict) or not isinstance(dict2, dict):
|
||||||
return dict2
|
return dict2
|
||||||
for k in dict2:
|
for k in dict2:
|
||||||
if k in dict1:
|
if k in dict1:
|
||||||
dict1[k] = merge_dicts(dict1[k], dict2[k])
|
res = None
|
||||||
|
if custom_merge_func:
|
||||||
|
res = custom_merge_func(k, dict1[k], dict2[k], _not_set)
|
||||||
|
dict1[k] = merge_dicts(dict1[k], dict2[k], custom_merge_func) if res is None else res
|
||||||
else:
|
else:
|
||||||
dict1[k] = dict2[k]
|
dict1[k] = dict2[k]
|
||||||
return dict1
|
return dict1
|
||||||
|
Loading…
Reference in New Issue
Block a user