Redwood
Redwood RunMyJobs → Apache Airflow
Migrate Redwood RunMyJobs process definitions, chains, and schedules to Apache Airflow DAGs.
Redwood RunMyJobs (now Redwood Workload Automation) is a cloud-native enterprise scheduler with a process-chain model. Its process definitions, chains, and schedule definitions are well-structured and amenable to automated extraction. BatchFoundry maps RunMyJobs process chains to Airflow DAGs, handling parameter passing, calendar definitions, and cross-chain dependencies.
Concept Mapping
Process definitionTask / Operator
Process chainDAG
Chain stepTask in DAG
Step dependencyTask dependency (>>)
Schedule definitionschedule_interval / timetable
ParameterAirflow Param / Variable
Condition (on success/failure)TriggerRule
QueueAirflow worker queue / Pool
Notificationon_failure_callback / email_on_failure
Cross-chain dependencyExternalTaskSensor
The Hard Parts We Handle
- RunMyJobs REST API extraction for job inventory
- Process chain parameter binding → Airflow templating
- Cross-chain dependencies → ExternalTaskSensor
- RunMyJobs calendar and exception definitions
- Conditional branching in chains → BranchPythonOperator
- Queue and agent mapping to Airflow workers
RunMyJobs process chain to DAG
Before
/* RunMyJobs Process Chain (simplified JSON) */
{
"chain": "DAILY_ETL",
"schedule": "0 1 * * MON-FRI",
"steps": [
{ "name": "EXTRACT", "process": "etl.Extract" },
{ "name": "LOAD", "process": "etl.Load",
"dependsOn": ["EXTRACT"], "condition": "SUCCESS" }
]
}After (Airflow)
# Apache Airflow DAG
from airflow.decorators import dag
from airflow.operators.bash import BashOperator
from pendulum import datetime
@dag(schedule="0 1 * * 1-5", start_date=datetime(2025,1,1), catchup=False)
def daily_etl():
extract = BashOperator(task_id="extract", bash_command="/opt/etl/extract.sh")
load = BashOperator(task_id="load", bash_command="/opt/etl/load.sh")
extract >> load
daily_etl()Ready to migrate from Redwood RunMyJobs?
Talk to a BatchFoundry engineer about your workload estate.
Talk to an Engineer