airflow2.0 с KubernetesPodOperator: TemplateNotFound
Я использую 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
Изображение не использует никаких макросов.
Кто-нибудь знает? Что я делаю не так?
1 ответ
Это была ошибка, которая началась с PR, выпущенного в версии
2.0.0
из . Целью изменения было создание шаблонов файлов. На возникла GitHubпроблема, связанная с созданными им проблемами. В конечном итоге ошибка была устранена с помощью PR, выпущенного в версии 2.0.2 провайдера.
Решение:
- Обновите до последней версии
apache-airflow-providers-cncf-kubernetes
(в настоящее время 2.0.2) - Если обновление невозможно, используйте индивидуальный
KubernetesPodOperator
Есть два способа обойти эту проблему: изменить
template_fields
другой - изменить
template_ext
:
1-й вариант: как указано в выпуске 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',)