如何在Ansible中获取主机专用网络地址
我试过这样的方法:如何在Ansible中获取主机专用网络地址,ansible,Ansible,我试过这样的方法: gather_facts: yes tasks: - debug: var=ansible_all_ipv4_addresses - set_fact: man_ip: "{{ item }}" with_items: ansible_all_ipv4_addresses when: "item.startswith('10.')" - debug: var=man_ip 它可以工作,但我使用docker的
gather_facts: yes
tasks:
- debug: var=ansible_all_ipv4_addresses
- set_fact:
man_ip: "{{ item }}"
with_items: ansible_all_ipv4_addresses
when: "item.startswith('10.')"
- debug: var=man_ip
它可以工作,但我使用docker的服务器有问题,因为docker容器的接口地址也是以10.x.x.x
开始的
那么,如何获取主机专用网络地址?如何:
- debug: var="ansible_eth0['ipv4']['address']"
或
您可以使用
ansible\u all\u ip\u地址
fact和ipaddr
过滤器
{{ ansible_all_ipv4_addresses | ipaddr('private') | first }}
注意:您可以通过ansible-m setup localhost
编辑:您还可以使用ipaddr
{{ ansible_all_ipv4_addresses | ipaddr('10.0.0.0/8') | first }}
ansible_eth0['ipv4']['address']
是否始终包含专用网络地址?否,这取决于它是如何设置的,或者在最坏的情况下:随机(有一些问题;-))当然,如果您启用了eth1或在无线上,您必须选择正确的接口。对我来说,它总是有效的。我在vanilla安装/设置中验证了它。@helloV我在SoftLayer使用服务器。因此,它不能保证私有网络总是在eth0中。我想这是相当棘手的,因为主机本身不知道私有/公共IP的概念。它只知道它有IP。所以可能没有干净的解决方案。您可能需要将该信息存储在某个位置,或者以某种方式检测到它—可能会将任务委托给另一台无法访问私有IP的主机,并尝试从那里ping它。
{{ ansible_all_ipv4_addresses | ipaddr('10.0.0.0/8') | first }}
- debug: var=hostvars[inventory_hostname].private_ipv4