在 Airflow 的嵌套神社模板中传递变量

Pass variable inside nested jinja template in Airflow

我创建了一个变量(来自 Airflow UI):

Key: env_variables
Value: {'xx': 'yy`}

并尝试使用 bash 运算符中的 var.json.env_variables.xx 进行访问。但是“xx”的值是动态的,这 我从 REST API 传递并使用 dag_run.conf['param'] 访问它(dag_run.conf['param'] 应该 return xx)。最后我要运行var.json.env_variables.xx。如何在 Airflow 的 bash 运算符中实现? 我正在尝试 运行 以下代码,但它显示 Jinja 语法错误。

task = BashOperator(
        bash_command="export KUBECONFIG=$KUBECONFIG:{{var.json.env_variables.{{dag_run.conf['param']}} }}

我想要的: 它应该获取 var.json.env_variables.xx 的值。我也尝试过使用参数但没有运气,params.path 是 returning None.

task = BashOperator(
        bash_command="export KUBECONFIG=$KUBECONFIG:{{params.path}},
        params: {
           "path":env_variables.get('{{dag_run.conf["param"]}}')
        }

非常感谢任何形式的帮助。

您不需要 Jinja 表达式中 dag_run.conf 周围的额外 {{...}},您还需要字典的典型项目访问。尝试使用这样的模板表达式:

nested_vars = BashOperator(
        task_id="nest_vars",
        bash_command="export KUBECONFIG=$KUBECONFIG:{{ var.json.env_variables[dag_run.conf['param']] }}"
    )

这是将 {"param": "xx"} 的触发配置传递给上面的运算符实例化时的日志条目:

INFO - Running command: ['bash', '-c', 'export KUBECONFIG=$KUBECONFIG:yy']