Я пытаюсь динамически сгенерировать часть файла / etc / hosts с помощью ansible, собирая факты со всех хостов и перебирая полученный hostvars
, чтобы получить IP-адрес второго интерфейса (мне нужен частный IP-адрес на этом интерфейсе, скорее чем публичный IP другого интерфейса)
Я могу получить эту информацию с одного хоста, используя следующие игры:
- name: play 1
hosts: all
- name: play 2
hosts: localhost
connection: local
become: no
tasks:
- debug:
var: hostvars['mysinglehost'].ansible_all_ipv4_addresses[1]
... но я бы хотел перебрать все хосты и получить это значение от каждого хоста, в конечном итоге записывая эту информацию в файл моих хостов, но я бы согласился просто получить некоторую отладочную информацию :)
Я пытался
...
- debug:
var: hostvars[item].ansible_all_ipv4_addresses[1]
with_inventory_hostnames:
- all
...
... который дает результат, которого я ожидаю, но когда я пытаюсь вывести msg
с помощью этой задачи отладки:
...
- debug:
msg: "{{ hostvars[item].ansible_all_ipv4_addresses[1] }}"
with_inventory_hostnames:
- all
...
Я получаю следующую ошибку (как и при попытке, например, записи в файл с помощью lineinfile
):
fatal: [localhost]: FAILED! =>
msg: |-
The task includes an option with an undefined variable. The error was: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_all_ipv4_addresses'
Я не уверен, почему это происходит, поскольку он пытается ссылаться на ту же самую переменную. Есть ли способ сделать это?
var
, не работает с этой ошибкой при использованииmsg
и фигурных скобок. Мне интересно, ошибка ли это в используемой мной версии Ansible (2.10.5) - person ticktockhouse   schedule 09.03.2021ip
? Сегодня у меня была такая же проблема с докер-контейнером centos 7, и я обнаружил, что не получу никаких сетевых фактов без этой доступной команды. См. сборщик фактов. Установкаiproute
(предоставлениеip
на centos 7) устранила проблему. - person Zeitounator   schedule 10.03.2021ip
. Я думаю, проблема связана с попыткой разобратьhostvars
. Я начинаю думать, что, может быть, я нашел ошибку ..? - person ticktockhouse   schedule 14.03.2021ansible_all_ipv4_addresses
для этого конкретного хоста. Вы можете легко подтвердить это, запустив- debug: var=ansible_all_ipv4_addresses
в своей первой игре, которая вернетundefinied
. Затем вы должны понять, почему (например, этот хост имеет только соединение ipv6, пользователь, выполняющий установку, не имеет доступа к этой информации и т. Д.) - person Zeitounator   schedule 14.03.2021