Я создаю сборник пьес с этой игрой:анзибль: как позвонить в модуль `add_host` для всех хостов пьесы
На хостах hypervisors
:
- получить список виртуальных машин со всех хостов
- использовать модуль
add_host
, чтобы добавить их все в новой группе инвентаризации называетсяguests
Мой инвентарь:
[hypervisors]
host1
host2
Мой сборник пьес:
- hosts: hypervisors
- shell: virsh list | awk 'NR>2' | awk '{print $2}'
register: result_virsh
- add_host:
name: "{{ item }}"
group: "guests"
with_items: "{{ result_virsh.stdout_lines }}"
Модуль add_host
bypasses the play host loop and only runs once for all the hosts in the play.
Затем он вызывается один раз (для хоста 1), это частный случай использования этого модуля (см. Ссылку выше), как если бы переменная run_once
была неявно зафиксирована на true
.
Как его использовать для всех хостов в группе hypervisors
?
EDIT: Пример воспроизвести его на компьютере с только локальный
Создать файл /TMP/host1_test имитировать возвращение гостей vm1 и Vm2:
vm1
vm2
Создать файл /tmp/host2_test, чтобы имитировать возвращение гостей vm3 и VM4:
vm3
vm4
Используйте этот инвентарь (test_add_host.ini) с двумя узлами, как с фиксированным IP-адресом 127.0.0.1 :
[hypervisors]
host1 ansible_host=127.0.0.1 test_filename=/tmp/host1_test
host2 ansible_host=127.0.0.1 test_filename=/tmp/host2_test
Используйте этот сборник пьес (test_add_host.YML):
- hosts: hypervisors
gather_facts: no
tasks:
- shell: "cat {{ test_filename }}"
register: result_virsh
- add_host:
name: "{{ item }}"
group: "guests"
with_items: "{{ result_virsh.stdout_lines }}"
- hosts: guests
gather_facts: no
tasks:
- local_action: ping
вызовов это сборник пьес локально с помощью команды:
ansible-playbook -c local -i test_add_host.ini test_add_host.yml
- Первые хозяева игры вызова host1 и host2
- хостов Второй игра вызова vm1 и vm2
Что я должен сделать, чтобы назвать все хосты (VM1, Vm2, VM3 и VM4) в второй игре?
Argh! Я не против запуска «гипервизоров» в сериале, это было так просто! БЛАГОДАРЯ! –