2014-09-05 36 views
2

我想使用Ansible來設置我的sshd_config文件。對於設計上的原因(我們有兩個虛擬機和物理機,用不同的NIC)的管理界面是不固定的,所以在我的模板,我不能只是把發現管理IP並在模板中使用它

{{ ansible_eth0.ipv4.address }} 

,因爲我不提前知道哪個接口是怎麼回事作爲管理界面,我需要發現它。我知道IP總是在一個範圍內(例如192.168.1.0/24)。

如何才能發現哪個接口具有該IP,然後在模板中使用它?

回答

5

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地址。

+2

應該是 - > with_items:「{{ansible_all_ipv4_addresses}}」 – milan 2016-10-21 06:02:09