Ansible последовательное выполнение задачи на основе хоста, указанного в файле хоста

#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 и включить в игру. если у вас есть какие-либо идеи, пожалуйста, поделитесь