创建dag run时,将参数传递给Airflow Experimental REST api

Pet*_*erg 6 airflow

看起来Airflow有一个实验性的REST api,允许用户使用https POST请求创建dag运行.这太棒了.

有没有办法通过HTTP将参数传递给create dag run?从这里发现的官方文档来看,似乎答案是"不",但我希望我错了.

har*_*oet 11

我遇到过同样的问题."conf"值必须是字符串

curl -X POST \
    http://localhost:8080/api/experimental/dags/<DAG_ID>/dag_runs \
    -H 'Cache-Control: no-cache' \
    -H 'Content-Type: application/json' \
    -d '{"conf":"{\"key\":\"value\"}"}'
Run Code Online (Sandbox Code Playgroud)

  • 我仍然无法理解。对于未来的读者来说,这并不意味着您只有一个常规的 json 字典作为有效负载。您必须拥有一个 json 字典,其中包含一个键“conf”和一个 _string_ 值,该值必须是有效的 json。IE json-in-json。在我自己的(python)代码中,这意味着这样的内容: `payload = dict(conf=json.dumps(dict(key="value"))` `requests.post(url, json=payload, headers=headers) ` (3认同)
  • 节省了我的一天:) (2认同)

Pet*_*erg 6

源代码来看,似乎参数可以传递到dag运行中.

如果http请求的主体包含json,并且该json包含顶级键,则conf该键的值conf将作为配置传递给它trigger_dag.有关其工作原理的更多信息,请点击此处.


Pan*_*kaj 3

对于稳定的 REST API来说,情况不再如此。

你可以做类似的事情 -

curl --location --request POST 'localhost:8080/api/v1/dags/unpublished/dagRuns' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic YWRtaW46YWRtaW4=' \
--data-raw '{
    "dag_run_id": "dag_run_1",
    "conf": {
        "key": "value"
    }
}'
Run Code Online (Sandbox Code Playgroud)

我知道这个问题是针对实验性 API 提出的,但这个问题是气流 REST API 的热门搜索结果。