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 провайдера.

Решение:

  1. Обновите до последней версии apache-airflow-providers-cncf-kubernetes (в настоящее время 2.0.2)
  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',)
Другие вопросы по тегам