我使用的是Airflow2.0与KubernetesPodOperator
想要运行一个命令,从操作员运行的图像内部使用一个文件作为参数。这是我使用的:
KubernetesPodOperator(
namespace=commons.kubernetes_namespace,
labels=commons.labels,
image=f"myregistry.io/myimage:{config['IMAGE_TAG']}",
arguments=[
"python",
"run_module.py ",
"-i",
f'args/{config["INPUT_DIR"]}/{task_id}.json'
],
name=dag_name + task_id,
task_id=task_id,
secrets=[secret_volume]
)
但是这给了我错误:
raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: args/airflow2test/processing-pipeline.json
图像不使用任何宏。
有人知道吗?我做错了什么?
这是一个从PR在apache-airflow-providers-cncf-kubernetes
的2.0.0
版本中发布开始的bug。更改的目标是允许对.json
文件进行模板化。关于它所产生的问题,GitHub上有一个问题。PR最终解决了这个错误,并在2.0.2版中发布了该提供程序。
解决方案:
- 升级到最新的
apache-airflow-providers-cncf-kubernetes
(目前为2.0.2) - 如果升级不是一个选项,使用自定义
KubernetesPodOperator
有两种方法可以解决这个问题一个是改变template_fields
另一个是改变template_ext
:
第一个选项:正如raphaelauv发布的问题,不允许渲染arguments
字段:
class MyKubernetesPodOperator(KubernetesPodOperator):
template_fields = tuple(x for x in KubernetesPodOperator.template_fields if x != "arguments")
第2个选项:如果你不喜欢渲染.json
文件:
class MyKubernetesPodOperator(KubernetesPodOperator):
template_ext = ('.yaml', '.yml',)