带有环境变量

时间:2021-03-24 15:32:17

标签: bash airflow

我在 /etc/sysconfig/airflow 中配置了环境变量

PASSWORD=pass123

我希望能够在 BashOperator 中的 Bash 命令中使用它,以便密码在 Airflow UI 或日志中不可见。该变量随后将用于 DAG 任务,如下所示。

con = 'username/$PASSWORD@//ex01-db.mybiz.com:1521/dwh'

sqlcl_cmd = f"""/oracle/sqlcl/bin/sql -s {con} > /data/tmp/extract.csv <<EOF
SET SQLFORMAT CSV
SET FEEDBACK OFF
SET TERMOUT OFF
SET ECHO OFF
SELECT * FROM ORDER.DAILY_SALES;
EXIT
EOF
"""

BashOperator(
    task_id = 'extract_order',
    bash_command = sqlcl_cmd,
    dag = dag
)

然而,观察到变量 $PASSWORD 没有被 Bash 扩展,导致错误。如何在 BashOperator 中正确使用要传递给 bash_command 的环境变量。

1 个答案:

答案 0 :(得分:0)

首先,测试您的气流用户是否可以访问该变量。 '回声$密码'。如果不想在日志中显示,可以临时更改 $PASSWORD。

如果是,那么您可以在 bash 任务中传递带有参数的 con,如您在此处看到的:https://airflow.apache.org/docs/apache-airflow/1.10.2/tutorial.html

con = 'username/$PASSWORD@//ex01-db.mybiz.com:1521/dwh'

sqlcl_cmd = f"""/oracle/sqlcl/bin/sql -s {{params.con}} > /data/tmp/extract.csv <<EOF
SET SQLFORMAT CSV
SET FEEDBACK OFF
SET TERMOUT OFF
SET ECHO OFF
SELECT * FROM ORDER.DAILY_SALES;
EXIT
EOF
"""

BashOperator(
    task_id = 'extract_order',
    params={'con': con},
    bash_command = sqlcl_cmd,
    dag = dag
)