IBM
IBM Workload Scheduler → Apache Airflow
Migrate IBM Workload Scheduler (TWS) job streams, dependencies, and calendars to Apache Airflow.
IBM Workload Scheduler (formerly Tivoli Workload Scheduler / TWS) is a mature enterprise scheduler used extensively in IBM-centric data centres, often alongside mainframe workloads. Its job streams, dependencies, and calendar-based scheduling map well to Airflow DAGs. BatchFoundry handles full TWS job stream extraction and DAG generation, including cross-workstation dependencies and time fence logic.
Concept Mapping
Job stream (schedule)DAG
Job definitionTask / Operator
Dependency (follows)Upstream task dependency (>>)
WorkstationAirflow worker queue
Calendar (run cycle)schedule_interval / timetable
Time restrictionexecution_timeout / SLA
Variable (%%VAR)Airflow Variable / Param
External dependencyExternalTaskSensor
Action (abend/rerun)on_failure_callback / retries
TWS Composer definitionDAG code
The Hard Parts We Handle
- TWS JCL database extraction and parsing
- Time fence and deadline logic → Airflow SLA
- Cross-workstation job dependencies
- TWS calendar and run-cycle translation
- External dependency chains across job streams
- IBM agent workstation → Airflow queue mapping
TWS job stream to DAG
Before
/* IBM TWS Job Stream (simplified) */
SCHEDULE DAILY_ETL ON WORKDAYS AT 0100
:
JDEFN EXTRACT
JOBFILE #/opt/jcl/extract.jcl
WORKSTATION UNIX01
JDEFN LOAD FOLLOWS EXTRACT
JOBFILE #/opt/jcl/load.jcl
WORKSTATION UNIX01
:
ENDAfter (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/replatformed/extract.sh")
load = BashOperator(task_id="load", bash_command="/opt/replatformed/load.sh")
extract >> load
daily_etl()Ready to migrate from IBM Workload Scheduler?
Talk to a BatchFoundry engineer about your workload estate.
Talk to an Engineer