Tutorial: run a DAG that retriggers itself¶
Create a countdown DAG that starts at two, retriggers twice, and then stops. Use a working local Airflow 3 development environment with its scheduler and worker running. Activate that environment before installing the integration.
Install the package¶
pip install 'airflow-ha[airflow3]'
Create the countdown DAG¶
Save ha_countdown.py in your Airflow DAG folder:
from datetime import datetime, timezone
from airflow import DAG
from airflow_ha import Action, HighAvailabilityOperator, Result
def count_down(**context):
remaining = int(context["dag_run"].conf.get("remaining", 2))
context["task"].log.info("Remaining: %s", remaining)
if remaining > 0:
return Result.PASS, Action.RETRIGGER
return Result.PASS, Action.STOP
with DAG(
dag_id="ha-countdown",
schedule=None,
start_date=datetime(2025, 1, 1, tzinfo=timezone.utc),
catchup=False,
max_active_runs=1,
) as dag:
countdown = HighAvailabilityOperator(
task_id="countdown",
python_callable=count_down,
pass_trigger_kwargs={
"conf": {"remaining": "{{ (dag_run.conf.get('remaining', 2)|int) - 1 }}"},
},
reference_date="start_date",
maxretrigger=2,
poke_interval=1,
timeout=30,
retries=0,
)
Wait for the scheduler to discover the DAG, then inspect its tasks:
airflow tasks list ha-countdown
The output includes countdown, countdown-decide, and five branch tasks.
Trigger the countdown¶
Unpause the DAG and start one run:
airflow dags unpause ha-countdown
airflow dags trigger ha-countdown
Open the DAG in Airflow’s UI. Its first countdown log contains Remaining: 2.
The countdown-retrigger-pass task creates another run. The next two logs
contain Remaining: 1 and Remaining: 0.
In the final run, countdown-stop-pass succeeds and both retrigger branches
are skipped. There are three successful runs, with no fourth run scheduled.
Trigger the DAG again to repeat the countdown from two.
For service monitoring and failure callbacks, continue with the how-to guides.