2016-12-27 9 views
2

Есть ли способ получить частный IP каждого узла?Ansible - получить имена хостов и частные IP-адреса из файла инвентаризации

С этим шаблоном:

{{ ansible_managed }} 

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1   localhost localhost.localdomain localhost6 localhost6.localdomain6 

{% for item in groups['all'] %} 
{{ hostvars[item]['ansible_ssh_host'] }} {{ item }} 
{% endfor %} 

я получаю следующий результат:

Ansible managed 

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1   localhost localhost.localdomain localhost6 localhost6.localdomain6 

127.0.0.1 arithproducer 
127.0.0.1 controller 
127.0.0.1 restapi 

Будучи мой файл инвентаризации:

[control] 
controller ansible_ssh_host=192.168.50.3 ansible_ssh_user=vagrant 

[servers] 
restapi ansible_ssh_host=192.168.50.5 ansible_ssh_user=vagrant 

[producers] 
arithproducer ansible_ssh_host=192.168.50.4 ansible_ssh_user=vagrant 

[services:children] 
servers 
producers 

Идея заключается в том, чтобы получить эту информацию, так что я могу заполнить файл /etc/hosts/ в узле управления

+1

испытано. Работает нормально (т. Е. Создает IP-адреса, указанные в файле инвентаризации). У тебя что-то не так, но в этом нет. – techraf

ответ

0

Вы можете использовать приведенный ниже шаблон и файл задачи.

Файл шаблона

{{ ansible_managed }} 

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1   localhost localhost.localdomain localhost6 localhost6.localdomain6 


{% for group in groups %} 
{% if groups[group] and group != 'all' %} 
{% for host in groups[group] %} 
{{hostvars[host].ansible_default_ipv4.address}} {{ ansible_hostname }} 
{% endfor %} 

{% endif %} 
{% endfor %} 

Задача Файл

--- 
- name: Create HostsFile 
    hosts: development 
    user: vagrant 
    become: yes 
    become_method: sudo 

    tasks: 
    - name: Create Hosts File 
     template: src=hostsFile.j2 dest=/tmp/hosts owner=root group=root