【问题标题】:Pass variable inside nested jinja template in Airflow在 Airflow 的嵌套 jinja 模板中传递变量
【发布时间】:2021-09-23 00:26:15
【问题描述】:

我创建了一个变量(来自 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'] 应该返回 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 但没有运气,params.path 正在返回 None。

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

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

【问题讨论】:

    标签: bash environment-variables jinja2 airflow


    【解决方案1】:

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

    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']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多