我正在尝试使用 Ansible 设置我的 sshd_config 文件。出于设计原因(我们有虚拟机和物理机,具有不同的 NIC),管理接口不是固定的,所以在我的模板中我不能只放
{{ ansible_eth0.ipv4.address }}
因为我事先不知道哪个接口将成为管理接口,所以我需要发现它。我知道 IP 总是在一个范围内(例如 192.168.1.0/24)。
如何发现哪个接口具有该 IP,然后在模板中使用它?
我正在尝试使用 Ansible 设置我的 sshd_config 文件。出于设计原因(我们有虚拟机和物理机,具有不同的 NIC),管理接口不是固定的,所以在我的模板中我不能只放
{{ ansible_eth0.ipv4.address }}
因为我事先不知道哪个接口将成为管理接口,所以我需要发现它。我知道 IP 总是在一个范围内(例如 192.168.1.0/24)。
如何发现哪个接口具有该 IP,然后在模板中使用它?
Ansible 提供了一个名为的事实ansible_all_ipv4_addresses
,它是所有 IP 地址的列表。
要查找管理 IP,请参阅此工作示例:
测试.yml:
- hosts: all
gather_facts: yes
tasks:
- debug: var=ansible_all_ipv4_addresses
- set_fact:
man_ip: "{{ item }}"
with_items: "{{ ansible_all_ipv4_addresses }}"
when: "item.startswith('192.168.1')"
- debug: var=man_ip
在本地运行测试播放:
ansible-playbook -c local -i localhost, test.yml
该变量{{ man_ip }}
将具有管理 IP 地址的 IP 地址。
当你gather_facts: false
在你的剧本中有一个角色时,这有点棘手。
但是,您可以setup
有选择地在这样的角色内部运行。
---
- setup:
gather_subset: [network]
- debug: msg={{ ansible_all_ipv4_addresses }}
请参阅https://docs.ansible.com/ansible/latest/modules/setup_module.html