Это произойдет с сообщением name 'run_id' is not defined
, потому что во время ввода параметров run_id
все еще недоступно:
bash_command = \
"""
echo '{{ params.run_id_readable }}';
"""
t1 = BashOperator(
task_id="t1",
bash_command=bash_command,
params={"run_id_readable": run_id.split('.')[0].replace('T', '_').replace('-', '').replace(':', '')},
dag=dag,
)
Это снова не удастся, потому что kwargs
также недоступен:
bash_command = \
"""
echo '{{ params.run_id_readable }}';
"""
t1 = BashOperator(
task_id="t1",
bash_command=bash_command,
params={"run_id_readable": kwarg.get('run_id').split('.')[0].replace('T', '_').replace('-', '').replace(':', '')},
dag=dag,
)
Это будет правильный путь, так как символ run_id
будет доступен во время рендеринга шаблона jinja:
bash_command = \
"""
echo '{{ run_id.split('.')[0].replace('T', '_').replace('-', '').replace(':', '') }}';
"""
t1 = BashOperator(
task_id="t1",
bash_command=bash_command,
dag=dag,
)
С помощью PythonOperator
вы можете воспользоваться тем, что kwargs
dict доступен во время выполнения 'callable_function`:
def python_callable(**kwargs):
""" """
dag_id = kwargs.get('dag').dag_id
task_id = kwargs.get('task').task_id
run_id = kwargs.get('run_id', '-.:').split('.')[0].replace('T', '_').replace('-', '').replace(':', '')
print("{}_{}_{}".format(dag_id, task_id, run_id))
t2 = PythonOperator(
task_id="t2",
provide_context=True,
python_callable=python_callable,
dag=dag)