Matyas Tamas
03/03/2021, 5:11 AMdagster-k8s/config
tags when trying to set some job spec values.kubernetes.client.V1PodSpec(..., **user_defined_k8s_config.pod_spec_config)
in <http://dagster_k8s.jobs|dagster_k8s.jobs>
and given that V1PodSpec
takes snake case arguments:
https://github.com/kubernetes-client/python/blob/master/kubernetes/client/models/v1_pod_spec.py@solid(
tags={
"dagster-k8s/config": {
"pod_spec_config": {
"node_selector": {"<http://cloud.google.com/gke-nodepool|cloud.google.com/gke-nodepool>": "cpu-workers"},
}
}
}
)
def mysolid_snake_tags(_):
return "done."
# runs and returns correctly
@solid(
tags={
"dagster-k8s/config": {
"pod_spec_config": {
"nodeSelector": {"<http://cloud.google.com/gke-nodepool|cloud.google.com/gke-nodepool>": "cpu-workers"},
}
}
}
)
def mysolid_camel_tags(_):
return "done."
# ERROR:
# dagster.core.errors.DagsterSubprocessError: During celery execution errors occurred in workers: [mysolid_camel_tags]: TypeError: __init__() got an unexpected keyword argument 'nodeSelector'
#
# Stack Trace:
# File "/usr/local/lib/python3.8/site-packages/dagster_celery/core_execution_loop.py", line 79, in core_celery_execution_loop
# step_events = result.get()
# File "/usr/local/lib/python3.8/site-packages/celery/result.py", line 219, in get self.maybe_throw(callback=callback)
# File "/usr/local/lib/python3.8/site-packages/celery/result.py", line 335, in maybe_throw self.throw(value, self._to_remote_traceback(tb))
# File "/usr/local/lib/python3.8/site-packages/celery/result.py", line 328, in throw self.on_ready.throw(*args, **kwargs)
# File "/usr/local/lib/python3.8/site-packages/vine/promises.py", line 234, in throw reraise(type(exc), exc, tb) File "/usr/local/lib/python3.8/site-packages/vine/utils.py", line 30, in reraise raise value
#
# File "/usr/local/lib/python3.8/site-packages/dagster/core/execution/api.py", line 722, in pipeline_execution_iterator
# for event in pipeline_context.executor.execute(pipeline_context, execution_plan):
# File "/usr/local/lib/python3.8/site-packages/dagster_celery/core_execution_loop.py", line 155, in core_celery_execution_loop
# raise DagsterSubprocessError(
sashank
03/03/2021, 5:19 PMMatyas Tamas
03/03/2021, 5:20 PMsashank
03/03/2021, 6:14 PMV1PodSpec
snake_case
, but secondary level keys can be camel or snake caseimport kubernetes
# Directly passing the argument
job_container = kubernetes.client.V1Container(name="my_job", image="my_image:tag")
pod_spec = kubernetes.client.V1PodSpec(
containers=[job_container],
node_selector={"key": "value"},
)
# Using **kwargs
config_2 = {"node_selector": {"key": "value"}}
pod_spec_2 = kubernetes.client.V1PodSpec(
containers=[job_container],
**config_2,
)
assert pod_spec.to_dict() == pod_spec_2.to_dict()
# Using **kwargs with camelCase
exception_raised = False
config_3 = {"nodeSelector": {"key": "value"}}
try:
pod_spec_3 = kubernetes.client.V1PodSpec(
containers=[job_container],
**config_3,
)
except:
exception_raised = True
assert exception_raised
nodeAffinity
is at the second level, so it’s not passed directly as a keyword arg and is rather just a dictionary keyMatyas Tamas
03/03/2021, 6:35 PM