2017-10-07 33 views
1

可以說我有類似下面如何在另一個劇本中使用定義的事實/變量?

- name: install nagios client 
    hosts: client1 
    roles: 
    - nagios-client 
    set_fact: 
    client_ip: "{{ ansible_default_ipv4.address }}" 
    client_hostname: "{{ ansible_hostname }}" 

- name: register client 
    hosts: server 
    vars: 
    - ip: {{ client_ip }} 
    - hostname: {{ client_hostname }} 
    role: 
    - register-nagios-client 

我知道set_fact被綁定到一個主機,不能在另一種使用,也可以得到事實{{ hostvars['client1']['ansible_eth0']['ipv4']['address'] }}客戶端的IP一個劇本。但是有沒有辦法來定義一個局部變量,可以在yml文件的多個位置引用?

回答

1

事實是綁定到主機不玩,並保持爲正在運行的劇本的生命定義。

您似乎已經知道如何引用來自其他主機的事實,請使用它。或者(如果你在第一個劇本保留set_fact):

vars: 
    - ip: "{{ hostvars['hostname'][client_ip] }}" 
    - hostname: "{{ hostvars['hostname'][client_hostname] }}" 

或(因爲似乎沒有必要設置的事實,第一次玩):

vars: 
    - ip: "{{ hostvars['hostname'][ansible_default_ipv4][address] }}" 
    - hostname: "{{ hostvars['hostname'][ansible_hostname] }}" 

我用hostname以上請參考你想要的主機。您的Playbook中的client1是一個主機組。它可能會或可能不匹配主機的名稱。它也可能解析爲多個主機。

+0

我只是想知道是否有一個自動的方式來使用第二個劇本的'client1'名稱。像局部變量或可以在劇本中的一個地方定義並在多個地方引用的東西。 – pdna

+0

您的示例中的'client1'是主機組名稱(主機模式)。它可能會解析爲匹配組名的單個主機,單個主機不匹配組名或多個主機。您正在嘗試解決XY問題。 – techraf

+0

在我的用例中,它只匹配單個主機(不是組)。 – pdna

相關問題