![](/img/trans.png)
[英]Construct list using jinja2 for KubernetesPodOperator in Airflow
[英]airflow - dynamically change namespace in KubernetesPodOperator
我在 kubernetes 上運行 airflow 1.10.13 並試圖找到一種方法來動態更改我運行任務的命名空間。 我嘗試使用模板並從 dag_run.conf json 中插入參數,但模板僅在“cmds”中呈現,而不在命名空間等其他任務字段中呈現。
我很想找到一個解決方案(使用模板或任何其他方式)來改變命名空間。
default_args = {
'owner': 'airflow',
'start_date': days_ago(1)
}
with DAG('test_ns', default_args=default_args, schedule_interval='@once') as dag:
ns = """ {{ dag_run.conf.ns }} """
example_task= KubernetesPodOperator(namespace=ns,
image='python:3.6',
cmds=["/bin/sh", "-c", "echo {{ns}}"],
arguments=[],
task_id='example_task',
name='example_task',
get_logs=True,
is_delete_operator_pod=True,
provide_context=True
)
KubernetesPodOperator 中的模板化字段列表沒有namespace
。
您可以創建自己的運算符,其行為與將namespace
添加到template_fields
的行為相同:
class MyKubernetesPodOperator(KubernetesPodOperator):
template_fields = KubernetesPodOperator.template_fields +('namespace',)
然后你可以使用你的代碼:
with DAG('test_ns', default_args=default_args, schedule_interval='@once') as dag:
ns = """ {{ dag_run.conf.ns }} """
example_task= MyKubernetesPodOperator(namespace=ns,...)
編輯:您的代碼的完整示例:
from datetime import datetime
from airflow import DAG
from airflow.providers.cncf.kubernetes.operators.kubernetes_pod import KubernetesPodOperator
class MyKubernetesPodOperator(KubernetesPodOperator):
template_fields = KubernetesPodOperator.template_fields + ('namespace',)
default_args = {
'owner': 'elad',
'start_date': datetime(2019, 11, 1),
}
with DAG(dag_id='stackoverflow',
default_args=default_args,
schedule_interval=None
) as dag:
ns = """ {{ dag_run.conf.ns }} """
example_task = MyKubernetesPodOperator(namespace=ns,
image='python:3.6',
cmds=["/bin/sh", "-c", "echo {{ns}}"],
arguments=[],
task_id='example_task',
name='example_task',
get_logs=True,
is_delete_operator_pod=True,
)
用conf
觸發 dag:
{"ns":"mynamespace"}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.