Ansible: как получить IP-адрес только из полного доменного имени в Ansible?

Итак, вот установка.

Я передаю список FQDN через дополнительные переменные в playbook, но ключ управляющей машины копируется с соответствующими IP-адресами. Также в инвентаре нет их конкретной группы.

Хост для этой playbook - это сервер, который может быть или не быть частью этого списка, который я передаю через дополнительные vars. Итак, в playbook вообще нет фактов об этих узлах.

Итак, мой вопрос заключается в том, как мне получить IP-адреса соответствующих хостов на лету, чтобы я мог перебрать их, чтобы выполнить некоторые проверки некоторых свойств, которые я установил с использованием их FQDN через другую книгу / роль ранее. (Примечание: мне строго нужно полное доменное имя для установки этих свойств)

Я использовал модуль delegate_to и передавал полное доменное имя, и он работает, но он спрашивает, хочу ли я продолжить подключение (да / нет), и ждет ввода пользователя для первоначального запуска (если дано да, он работает, как ожидалось). Есть ли у них какой-либо другой более простой и понятный способ решить эту проблему?
(Примечание: помните, что я не могу изменять содержимое инвентаря, например ставить псевдоним и т. д.)

Вот фрагмент кода:

- name: Checks
  become_user: hdfs
  shell: hdfs dfsadmin –report
  delegate_to: "{{ item.host_name }}"
  with_items:
    - "{{rackDetails}}"

Вот фрагмент главного файла yml, в котором вызывается указанная выше роль:

- name: Checks for the property
  hosts: servernode
  roles:
    - Checks

Фрагмент кода инвентаря выглядит следующим образом:

[servernode]
10.0.2.15 ansible_ssh_user = grant ansible_ssh_pass = grant
[все]
10.0.2.15 ansible_ssh_user = grant ansible_ssh_pass = grant
10.0.2.16 ansible_ssh_user = grant ansible_ssh_pass = grant
10.0. 2.17 ansible_ssh_user = grant ansible_ssh_pass = grant
10.0.2.18 ansible_ssh_user = grant ansible_ssh_pass = grant
10.0.2.19 ansible_ssh_user = grant ansible_ssh_pass = grant

И, наконец, вот что я передаю через дополнительные вары:

{"rackDetails":[{"host_name":"prod_node1.paas.com","rack_name":"/rack1"},{"host_name":"prod_node2.paas.com","rack_name":"/rack2"},{"host_name":"prod_node3.paas.com","rack_name":"/rack3"}]}

person Girish Mane    schedule 08.06.2017    source источник
comment
В Ansible есть dig плагин поиска. К сожалению, ваш вопрос мне непонятен.   -  person techraf    schedule 09.06.2017
comment
@techraf Пожалуйста, дайте мне знать, какую часть вопроса вы не поняли, чтобы я мог сформулировать ее лучше.   -  person Girish Mane    schedule 09.06.2017
comment
Мне непонятно все, кроме как получить IP-адрес.   -  person techraf    schedule 09.06.2017


Ответы (2)


Интересно, работает ли delegate_to, если хосты передаются как дополнительные вары, но не живут в инвентаре.

В любом случае вы можете использовать плагин поиска dig: http://docs.ansible.com/ansible/playbooks_lookups.html#the-dns-lookup-dig

{{ lookup('dig', item.host_name) }}
person Chris Lam    schedule 09.06.2017
comment
delegate_to работает, его просто первоначальный запуск запрашивает ввод пользователя для продолжения соединения (да / нет), поскольку я думаю, что ansible не знает fqdn, а только их IP-адреса. Начиная со второго запуска, я получаю ожидаемый результат. - person Girish Mane; 09.06.2017

Вместо этого, я думаю, вы хотите преобразовать их в FQDN в IP-адреса и поместить их в -l (ограничение) в playbook:

ansible-playbook my_playbook -l $( getent hosts $( cat fqdns.txt ) | cut -d' ' -f1 | tr '\n' ',' )
person Jack    schedule 09.06.2017