Generate a DAG from YAML¶
Generate an Airflow 3 DAG from a YAML file and inspect its task. Use Python 3.11 or later; the exercise runs locally without a scheduler or managed services.
Install the packages¶
In an empty directory:
python3 -m venv .venv
source .venv/bin/activate
pip install airflow-laminar 'airflow-balancer[airflow3]'
The shell commands use Linux/macOS syntax.
Describe the DAG¶
Create a config directory and save config/hello.yaml:
# @package _global_
_target_: airflow_config.Configuration
default_dag_args:
start_date: '2025-01-01T00:00:00+00:00'
catchup: false
dags:
hello:
schedule: null
tasks:
greet:
_target_: airflow_pydantic.BashTask
bash_command: echo laminar-ready
Generate a Python file¶
Save generate_dags.py beside the config directory:
from airflow_config import load_config
config = load_config("config", "hello")
config.generate("generated", airflow_major_version=3)
Run it:
python generate_dags.py
The generated directory contains hello.py.
Inspect the task¶
Save inspect_dag.py beside generate_dags.py:
import runpy
namespace = runpy.run_path("generated/hello.py")
dag = namespace["dag"]
print(dag.dag_id)
print(dag.get_task("greet").bash_command)
Run it:
python inspect_dag.py
The script prints these lines, alongside any Airflow import messages:
hello
echo laminar-ready
To run the DAG, place generated/hello.py in an initialized Airflow deployment’s DAG directory. Continue with the how-to guides for Airflow 2 generation, direct Python DAGs, and cron conversion.