Ansible получает имена хостов из одной группы в качестве переменной для другой play

Вот инвентарный файл.

[abc]
host1
host2

[123]
host3

И main.yml

#play1
- hosts: abc
  roles:
    - { role: abc }
  tasks: 
    ...
#play2
- hosts: 123
  roles:
    - { role: 123 }
  tasks:
    debug: msg="{{inventory_hostname}}"

В основном мне нужно запускать некоторые команды на host3, а командам нужны host1 и host2 в нем. Итак, как я могу получить host1 и host2, которые находятся в группе abc, в play2 debug: msg="{{inventory_hostname}}", я знаю, что inventory_hostname получает host3. есть ли другой способ получить только host1 и host2. Дайте мне знать, если я не понимаю.

Заранее спасибо.,


person venkatama    schedule 12.06.2020    source источник


Ответы (1)


Вы можете использовать магическую переменную групп, как описано в документация.

groups - это список всех групп (и хостов) в инвентаре. Это можно использовать для перечисления всех хостов в группе.

Таким образом, вы можете ссылаться, например, на groups['abc'] или groups['abc'][0].

person chash    schedule 12.06.2020
comment
Спасибо, сработали. Я также зацикливал магическую переменную групп и работал как шарм - person venkatama; 12.06.2020
comment
Есть ли способ использовать операцию ИЛИ в групповой магической переменной, например with_items: {{ groups['123'] }} or {{ groups['234'] }} - person venkatama; 12.06.2020
comment
Каковы ваши намерения? Вы хотите объединить обе группы или использовать groups['234'], если в groups['123'] нет хостов? - person chash; 12.06.2020
comment
Итак, есть 2 среды, и сценарий создает файл hosts с тем, что когда-либо env, в которое попадает сервер, например, env1 - это группа ['123'] и env2 group ['234']. они могут быть группой [123] или [234] в файле хоста, и когда я зацикливаю хосты из любой группы, существующей в файле хоста . - debug: msg: "{{item}}" with_items: "{{ groups['123'] }} or {{ groups['234'] }}" - person venkatama; 12.06.2020
comment
В переменной groups нет ничего особенного. Относитесь к ней как к любой другой переменной. Например, вы можете сделать {{ groups['123'] | default(groups['234']) }}. - person chash; 12.06.2020