2016-12-27 74 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