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

{{ ansible_eth0.ipv4.address }}

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

如何发现哪个接口(interface)具有该 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
  • 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 地址。

    关于ansible - 发现管理 IP 并在模板中使用它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25683964/

    10-11 02:58
    查看更多