Home > Enterprise >  Pass variable inside nested jinja template in Airflow
Pass variable inside nested jinja template in Airflow

Time:09-23

I created a Variable (from Airflow UI):

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

and trying to access using var.json.env_variables.xx inside bash operator. But the value of "xx" is dynamic, which I am passing from REST API and accessing it using dag_run.conf['param'] (dag_run.conf['param'] should return xx). Eventually I want to run var.json.env_variables.xx. How can I achieve that inside bash operator in Airflow? I am trying to run the following code but its showing Jinja Syntax Error.

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

What I want: It should fetch the value of var.json.env_variables.xx. I have also tried using params but no luck, params.path is returning None.

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

Any kind of help is highly appreciated.

CodePudding user response:

You don't need the extra {{...}} in the Jinja expression around dag_run.conf and you'll also need the typical item access of a dictionary. Try using a template expression like this:

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

This is the log entry when passing in a triggering config of {"param": "xx"} to the operator instantiation above:

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

  • Related