4

我正在尝试使用 Ansible 设置我的 sshd_config 文件。出于设计原因(我们有虚拟机和物理机,具有不同的 NIC),管理接口不是固定的,所以在我的模板中我不能只放

{{ ansible_eth0.ipv4.address }}

因为我事先不知道哪个接口将成为管理接口,所以我需要发现它。我知道 IP 总是在一个范围内(例如 192.168.1.0/24)。

如何发现哪个接口具有该 IP,然后在模板中使用它?

4

2 回答 2

12

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
  • set_fact注册了一个变量,以后可以在你的游戏中使用
  • with_items遍历所有 IP 地址
  • when: "item.startswith('192.168.1')"会将分配限制为以 192.168.1 开头的 ips

在本地运行测试播放:

ansible-playbook -c local -i localhost, test.yml

该变量{{ man_ip }}将具有管理 IP 地址的 IP 地址。

于 2014-09-05T13:51:01.287 回答
0

当你gather_facts: false在你的剧本中有一个角色时,这有点棘手。

但是,您可以setup有选择地在这样的角色内部运行。

---
- setup:
    gather_subset: [network]

- debug: msg={{ ansible_all_ipv4_addresses }}

请参阅https://docs.ansible.com/ansible/latest/modules/setup_module.html

于 2019-01-25T04:27:20.537 回答