Body
Goal: move every remote airflow CLI command (anything backed by a public REST API endpoint)
into airflowctl. Admin commands have no API and are local-only. They run components (scheduler,
api-server, triggerer, dag-processor, kerberos, standalone), manage the DB, or reach internals
directly (DAG parsing/rendering, local provider manager). Those remain in the airflow CLI and are
out of scope here.
Why:
AIP-81: Enhanced Security in CLI via Integration of API
and its sub-proposal
AIP-94: Decouple Remote Commands from the airflow CLI.
How to do it: follow PR #68175 (the reference
example). For each command, add an *Operations class/method in
airflow-ctl/src/airflowctl/api/operations.py backed by the existing API endpoint (the CLI command is
auto-generated from it), add help text in help_texts.yaml, and add tests under airflow-ctl-tests/.
Anything that needs more than a single endpoint or some transformation belongs in
airflow-ctl/src/airflowctl/ctl/commands instead.
Note: Always create PRs with relates: #issue_number as the issue should be manually closed at the end.
CLI Implementation Guide
Deprecation (applies to every migrated command): once a command is available in airflowctl, add
a deprecation warning to its matching airflow CLI command pointing at the new airflowctl one (as
#68175 did). This is part of the same work item. There is no separate deprecation task.
Tracking: each command below is a GitHub issue, following the #66173 to #66176 approach. For a
group with no *Operations yet, first a foundation issue adds the operations, then one issue per
command that depends on that foundation issue. Only tasks currently lacks operations. Every other
group already has its *Operations, so its commands are independent issues.
[x] = migrated (in airflowctl and the airflow side deprecated).
Admin (no API, local-only, not migrated, stay in the airflow CLI):
dags: show, show-dependencies, test, reserialize (parse/render DAGs directly)
tasks: test, render (execute/render DAG files directly)
providers: links, widgets, hooks, triggers, behaviours, logging, secrets,
executors, queues, notifications, configs, lazy-loaded, auth-managers (read the local
provider manager)
dags
tasks
assets
pools
variables
connections
backfill
jobs
config
providers
Committer
Body
Goal: move every remote
airflowCLI command (anything backed by a public REST API endpoint)into
airflowctl. Admin commands have no API and are local-only. They run components (scheduler,api-server, triggerer, dag-processor, kerberos, standalone), manage the DB, or reach internals
directly (DAG parsing/rendering, local provider manager). Those remain in the
airflowCLI and areout of scope here.
Why:
AIP-81: Enhanced Security in CLI via Integration of API
and its sub-proposal
AIP-94: Decouple Remote Commands from the airflow CLI.
How to do it: follow PR #68175 (the reference
example). For each command, add an
*Operationsclass/method inairflow-ctl/src/airflowctl/api/operations.pybacked by the existing API endpoint (the CLI command isauto-generated from it), add help text in
help_texts.yaml, and add tests underairflow-ctl-tests/.Anything that needs more than a single endpoint or some transformation belongs in
airflow-ctl/src/airflowctl/ctl/commandsinstead.Note: Always create PRs with relates: #issue_number as the issue should be manually closed at the end.
CLI Implementation Guide
Deprecation (applies to every migrated command): once a command is available in
airflowctl, adda deprecation warning to its matching
airflowCLI command pointing at the newairflowctlone (as#68175 did). This is part of the same work item. There is no separate deprecation task.
Tracking: each command below is a GitHub issue, following the #66173 to #66176 approach. For a
group with no
*Operationsyet, first a foundation issue adds the operations, then one issue percommand that depends on that foundation issue. Only
taskscurrently lacks operations. Every othergroup already has its
*Operations, so its commands are independent issues.[x]= migrated (inairflowctland theairflowside deprecated).Admin (no API, local-only, not migrated, stay in the
airflowCLI):dags:show,show-dependencies,test,reserialize(parse/render DAGs directly)tasks:test,render(execute/render DAG files directly)providers:links,widgets,hooks,triggers,behaviours,logging,secrets,executors,queues,notifications,configs,lazy-loaded,auth-managers(read the localprovider manager)
dags
dags trigger([AIP-94] Create a CLI airflowctl client and adopt it in existing commands #68175)dags delete([AIP-94] Create a CLI airflowctl client and adopt it in existing commands #68175)dags listdags detailsdags statedags list-runsdags list-jobsdags list-import-errorsdags reportdags cleardags pausedags unpausedags next-executiontasks
tasks([AIP-94] airflowctl tasks: add TasksOperations and TaskInstancesOperations to operations.py #66173)tasks state(depends on [AIP-94] airflowctl tasks: add TasksOperations and TaskInstancesOperations to operations.py #66173)tasks states-for-dag-run(depends on [AIP-94] airflowctl tasks: add TasksOperations and TaskInstancesOperations to operations.py #66173)tasks clear(depends on [AIP-94] airflowctl tasks: add TasksOperations and TaskInstancesOperations to operations.py #66173)tasks list(depends on [AIP-94] airflowctl tasks: add TasksOperations and TaskInstancesOperations to operations.py #66173)tasks failed-deps(depends on [AIP-94] airflowctl tasks: add TasksOperations and TaskInstancesOperations to operations.py #66173)assets
assets materialize([AIP-94] Create a CLI airflowctl client and adopt it in existing commands #68175)assets listassets detailspools
pools: list / get / set / delete / import / export ([AIP-94] Create a CLI airflowctl client and adopt it in existing commands #68175)variables
variables listvariables getvariables setvariables deletevariables importconnections
connections listconnections addconnections deleteconnections importconnections testconnections create-default-connectionsbackfill
backfill createjobs
jobs checkconfig
config get-valueconfig listproviders
providers listproviders getCommitter