在DAG脚本中
PARAM = {
'key1' : 'value1',
'key2' : 'value2'
}
t1 = KubernetesPodOperator(
task_id=task_id,
name=task_name,
cmds=["pipenv", "run", "python3", "myscript.py"],
env_vars={
'GCS_PROJECT': GCS_PROJECT,
'GCS_BUCKET': GCS_BUCKET,
'PARAM': PARAM # this line throws an error
},
image=docker_image
)
在上面的情况下,我未能通过字典(PARAM)。我试图通过两个列表(键列表和一个值列表,以便以后可以将它们拉链),但它也无法使用。错误消息是这样的
kubernetes.client.exceptions.ApiException: (400)
Reason: Bad Request
HTTP response headers: ......
HTTP response body: {
......
"apiVersion":"v1",
"metadata":{},
"status":"Failure",
"message":"Pod in version \"v1\" cannot be handled as a Pod: json: cannot be unmarshal object into Go struct field EnvVar.spec.containers.env.value of type string"
....
}
有没有办法通过PARAM?
分析解答
环境变量是字符串。除非您首先将其转换为字符串(例如,通过将其序列化为JSON),否则您不能在环境变量中像字典一样传递结构化变量。您可以这样做:
t1 = KubernetesPodOperator(
task_id=task_id,
name=task_name,
cmds=["pipenv", "run", "python3", "myscript.py"],
env_vars={
'GCS_PROJECT': GCS_PROJECT,
'GCS_BUCKET': GCS_BUCKET,
'PARAM': json.dumps(PARAM),
},
image=docker_image,
)