#ansible
#ansible
Вопрос:
Как я могу выполнить первую задачу для первого хоста 123.345.45.1, тогда как для второй и третьей задачи мне нужно выполнить вторую и третью задачи 2 хоста и далее, но при использовании последовательности, например, 123.345.45.2, потребуется выполнить 2-ю и 3-ю задачи, как только она будет полностью завершена, затем следует перейти к 3-му хосту 123.345.45.3 для выполнения 2-го и 3-го хостов.задача завершена. Как мне этого добиться?
host.yml
[server-group-1]
123.345.45.1
123.345.45.2
123.345.45.3
123.345.45.4
123.345.45.5
main.yml в роли
- name: Execute first sh
shell:"/nityo/execute.sh"
- name: Execute second sh
shell:"/nityo/script/execute.sh"
loop: {{ loop_3_times }}
- name: Execute third sh
shell:"/nityo/bin/execute.sh"
Ответ №1:
Опись и сборник задач, приведенные ниже, упрощены для тестирования,
shell> cat hosts
123.345.45.1
123.345.45.2
123.345.45.3
[server_group_1]
123.345.45.1
123.345.45.2
123.345.45.3
shell> cat playbook.yml
- hosts: server_group_1
serial: 1
gather_facts: false
vars:
schedule:
123.345.45.1: [1]
123.345.45.2: [2, 3]
123.345.45.3: [2, 3]
tasks:
- name: Task 1
debug:
msg: OK
when: 1 in schedule[inventory_hostname]
- name: Task 2
debug:
msg: OK
when: 2 in schedule[inventory_hostname]
- name: Task 3
debug:
msg: OK
when: 3 in schedule[inventory_hostname]
следует следовать расписанию, например
PLAY [server_group_1] ***********************
TASK [Task 1] *******************************
ok: [123.345.45.1] =>
msg: OK
TASK [Task 2] *******************************
skipping: [123.345.45.1]
TASK [Task 3] *******************************
skipping: [123.345.45.1]
PLAY [server_group_1] ***********************
TASK [Task 1] *******************************
skipping: [123.345.45.2]
TASK [Task 2] *******************************
ok: [123.345.45.2] =>
msg: OK
TASK [Task 3] *******************************
ok: [123.345.45.2] =>
msg: OK
PLAY [server_group_1] ***********************
TASK [Task 1] *******************************
skipping: [123.345.45.3]
TASK [Task 2] *******************************
ok: [123.345.45.3] =>
msg: OK
TASK [Task 3] *******************************
ok: [123.345.45.3] =>
msg: OK
Комментарии:
1. привет, проблема с этим подходом заключается в том, что иногда задачи 2 и 3 должны выполняться на 1 хосте одновременно, в то время как некоторые задачи, такие как задача 4, должны выполняться параллельно. например, после выполнения задач 2 и 3 хостом A, затем задачи 2 и 3 должны быть выполнены хостом B, после чего задача 4 должна быть выполнена хостом A, за которым следует хост B
2. по мере того, как я исследую, мы могли бы использовать group и включить в игру. если у вас есть какие-либо идеи, пожалуйста, поделитесь