我有一个具有 2 个网络接口的虚拟机,eth0 和 ens10。
所以目前我用的是这个:
- name: Add IP address of all hosts to all hosts
lineinfile:
dest: /etc/hosts
regexp: '.*{{ item }}$'
line: "{{ hostvars[item].ansible_host }} {{item}}"
state: present
when: hostvars[item].ansible_host is defined
with_items: "{{ groups.all }}"
但这只会添加 Ansible 文件中指定的主机的 IP(这是 eth0 interafce)。
我想将ens10接口IP添加到hosts文件中。
答案1
我想将ens10接口IP添加到hosts文件中。
ens10
您可以使用变量获取接口的地址ansible_ens10.ipv4.address
(假设您已启用事实收集)。但是,对于您正在做的事情,使用可能更有意义ansible_all_ipv4_addresses
,这将允许您执行如下操作:
# Ensure we collect facts from all hosts
- hosts: all
# Generate entries in /etc/hosts file
- hosts: all
gather_facts: false
tasks:
- blockinfile:
path: /etc/hosts
marker: "{mark} {{ item }}"
block: |
{% for addr in hostvars[item].ansible_all_ipv4_addresses %}
{{ addr }} {{ item }}
{% endfor %}
loop: "{{ groups.all }}"
这可能会让你输入/etc/hosts
类似以下内容的条目:
# BEGIN hostA
192.168.1.1 hostA
100.64.0.1 hostA
# END hostA
# BEGIN hostB
192.168.1.2 hostA
# END hostB
(假设主机 A 有两个地址,192.168.1.1
和100.64.0.1
,而主机 B 有一个地址,192.168.1.2
。)
如果您不想ansible_all_ipv4_addresses
,您可以将循环限制到特定的接口名称:
- hosts: all
- hosts: all
gather_facts: false
tasks:
- blockinfile:
path: /etc/hosts
marker: "{mark} {{ item }}"
block: |
{% for iface in ['ens9', 'ens10'] if iface in hostvars[item].ansible_interfaces %}
{{ hostvars[item]['ansible_%s' % iface].ipv4.address }} {{ item }} {{ item }}-{{iface}}
{% endfor %}
loop: "{{ groups.all }}"