Вложенный l oop дюйм Ansible - PullRequest
2 голосов
/ 08 мая 2020

Мне известна документация по вложенным циклам: http://docs.ansible.com/ansible/playbooks_loops.html#nested -loops У меня 3 сервера: скажем, server1, server2, server3. Мне нужно выполнить команду следующим образом:

Выполнить команду на сервере1
Выполнить команду на сервере1, Выполнить команду на сервере2
Выполнить команду на сервере1, Выполнить команду на сервере2, Выполнить команду на сервере3

Есть идеи, как это сделать с помощью циклов в ansible? Я знаю, как запускать вложенные циклы, используя l oop и фильтр продукта. Но не знаю, как я могу справиться со своим конкретным случаем, используя Ansible.

1 Ответ

1 голос
/ 08 мая 2020

Это зависит от структуры данных. Например, playbook сделает работу

- hosts: server1,server2,server3
  vars:
    batch001:
      - command: "foo"
        hosts: [server1]
      - command: "bar"
        hosts: [server1, server2]
      - command: "baz"
        hosts: [server1, server2, server3]
  tasks:
    - command: "{{ item.command }}"
      loop: "{{ batch001 }}"
      when: inventory_hostname in item.hosts

Следующим вариантом будет создание словаря серверов с вложенными списками команд. Например,

- hosts: server1,server2,server3
  vars:
    batch002:
      server1:
        commands: ["foo", "bar", "baz"]
      server2:
        commands: ["foo", "bar"]
      server3:
        commands: ["foo"]
  tasks:
    - command: "{{ item }}"
      loop: "{{ batch002[inventory_hostname]['commands'] }}"
...