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"