Рейтинг:1

ansible — получить список всех имен хостов и соответствующие значения ansible_host из инвентаря

флаг us

Мой инвентарь выглядит так:

db0 ansible_host=10.0.0.1
db1 ansible_host=10.0.0.2
приложение0 ansible_host=10.0.0.3
приложение1 ansible_host=10.0.0.4
...

Из этого мне нужно извлечь такой список:

- имя: дб0
  IP-адрес: 10.0.0.1
- имя: дб1
  IP-адрес: 10.0.0.2
- имя: приложение0
  IP-адрес: 10.0.0.3
- имя: приложение1
  IP-адрес: 10.0.0.4

Я знаю, что могу получить все хосты, используя группы ['все'].

Я также могу получить ansible_host значение для каждого хоста, использующего hostvars['<hostname>']['ansible_host'].

Как мне объединить это, чтобы создать нужный мне список?

Рейтинг:1
флаг br

Например

host_ip: "{{ dict(ansible_play_hosts_all|
                  zip(ansible_play_hosts_all|
                      map('extract', hostvars, 'ansible_host'))) }}"

создает словарь

  host_ip:
    приложение0: 10.0.0.3
    приложение1: 10.0.0.4
    БД0: 10.0.0.1
    БД1: 10.0.0.2

Затем используйте dict2items чтобы создать список

host_ip_list: "{{ host_ip|dict2items(key_name='имя',
                                     value_name='ip') }}"

дает ожидаемую структуру

  host_ip_list:
  - IP-адрес: 10.0.0.1
    имя: дб0
  - IP-адрес: 10.0.0.2
    имя: дб1
  - IP-адрес: 10.0.0.3
    имя: приложение0
  - IP-адрес: 10.0.0.4
    имя: приложение1
флаг us
Хотя это хорошо, это не совсем тот формат, который мне нужен.
флаг br
Используйте *dict2items* для создания списка. Я добавил пример.
флаг us
Отлично, это работает.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.