发现管理IP并在模板中使用它

时间:2014-09-05 10:37:21

标签: ansible ansible-facts

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

{{ ansible_eth0.ipv4.address }}

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

如何找到具有该IP的接口,然后在模板中使用它?

2 个答案:

答案 0 :(得分:9)

Ansible提供了一个名为ansible_all_ipv4_addresses的事实,它是所有IP地址的列表。

要查找管理IP,请参阅此工作示例:

test.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地址
  • 当:" item.startswith(' 192.168.1')" 将限制分配给以192.168.1开头的ips

在本地运行测试:

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

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

答案 1 :(得分: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