patternMinor
Ansible execute task on different hosts in order
Viewed 0 times
orderhostsdifferentansibletaskexecute
Problem
Is it possible to use ansible to manage order of programs?
Im trying to find an automated solution which will do the following steps:
For example:
Im trying to find an automated solution which will do the following steps:
- run a program on HostA
- run a command on HostB which requires HostA program to run
- run a program on HostC if 2. step succeed
- run a command on HostD which requires HostC program to run
- run a command on HostE which requires HostC program to run
For example:
---
- hosts: neededhosts
roles:
- startprogram
- runcommand
- startsecprgoram
.
.
.startprogram:
- name: start hostA program
tasks:
- name: start program
hosts: HostA
shell: /etc/init.d/HostAprogram.sh startruncommand:
- name: run command on HostB
tasks:
- name: run command
hosts: HostB
shell: command which using host ASolution
Q: "Is it possible to use Ansible to manage the order of programs?"
A: Yes. It's possible. For example, the playbook below does the job
Example of the roles for the purpose of testing
Example of the output
A: Yes. It's possible. For example, the playbook below does the job
- hosts: HostA
tasks:
- include_role:
name: startprogram
- hosts: HostB
tasks:
- include_role:
name: runcommand
when: hostvars.HostA.HostAprogram_started|default(false)
- hosts: HostC
tasks:
- include_role:
name: startsecprogram
when: hostvars.HostB.HostBcommand_passed|default(false)
- hosts: HostD,HostE
tasks:
- debug:
msg: command on {{ inventory_hostname }} which requires HostC program to run
when: hostvars.HostC.HostCprogram_started|default(false)
Example of the roles for the purpose of testing
shell> cat roles/startprogram/tasks/main.yml
- debug:
msg: /etc/init.d/HostAprogram.sh start
- set_fact:
HostAprogram_started: true
shell> cat roles/runcommand/tasks/main.yml
- debug:
msg: command which using host A
- set_fact:
HostBcommand_passed: true
shell> cat roles/startsecprogram/tasks/main.yml
- debug:
msg: /etc/init.d/HostCprogram.sh start
- set_fact:
HostCprogram_started: true
Example of the output
ok: [HostA] => {
"msg": "/etc/init.d/HostAprogram.sh start"
}
ok: [HostB] => {
"msg": "command which using host A"
}
ok: [HostC] => {
"msg": "/etc/init.d/HostCprogram.sh start"
}
ok: [HostD] => {
"msg": "command on HostD which requires HostC program to run"
}
ok: [HostE] => {
"msg": "command on HostE which requires HostC program to run"
}
Context
StackExchange DevOps Q#10679, answer score: 8
Revisions (0)
No revisions yet.