Execution Modes
Spage runs tasks in two ways: one after another (sequential) or at the same time (parallel). Choose based on your needs.
Two Modes
Both respect task dependencies from before
, after
, and variables.
Sequential Mode
In this mode, tasks are executed one after the other, in the order they appear in the playbook. This is the default execution mode.
Control-flow keywords such as before
and after
are ignored, as they are not applicable in sequential mode.
Configuration
spage.yaml
execution_mode: sequential
How it works
playbook.yaml
- name: Task 1
debug: msg="Starting"
- name: Task 2
apt: name=curl state=present
- name: Task 3
debug: msg="Complete"
When to use
- Development and testing
- Limited resources
- Tasks that must run in order
- Debugging issues
Example config
sequential.yaml
execution_mode: sequential
executor: local
logging:
level: info
format: plain
Parallel Mode
Runs tasks together when dependencies allow.
Configuration
spage.yaml
execution_mode: parallel
How it works
Spage finds task dependencies automatically:
Explicit dependencies
- name: Install package
apt: name=nginx state=present
- name: Start service
systemd: name=nginx state=started
after: Install package # Must wait for install
Variable dependencies
- name: Get system info
setup:
register: system_facts
- name: Use system info
debug: msg="OS is {{ system_facts.ansible_distribution }}"
# Waits for system_facts automatically
Example execution
playbook.yaml
- name: Task A
debug: msg="Task A"
register: task_a_result
- name: Task B
debug: msg="Task B"
- name: Task C (uses A)
debug: msg="Task C needs {{ task_a_result }}"
- name: Task D
debug: msg="Task D"
When to use
If you can clearly define dependencies between tasks and want faster playbook execution, you should use parallel mode.
Example config
parallel.yaml
execution_mode: parallel
executor: local
logging:
level: info
format: json
ssh:
options:
ssh_args: "-o ControlMaster=auto"