2017-10-07 5 views
1

내가 set_fact가 하나의 호스트에 바인딩하고 사실 {{ hostvars['client1']['ansible_eth0']['ipv4']['address'] }}에서 클라이언트의 IP를 얻을 수 있습니다 또한, 다른에서 사용할 수 없습니다 것을 알고 한 핸드북에 대해 정의 된 사실/변수를 다른 핸드북에서 어떻게 사용합니까?

- 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 

아래 같은 각본이 있다고 할 수 있습니다. 그러나 yml 파일의 여러 위치에서 참조 할 수있는 지역 변수를 정의하는 방법이 있습니까?

답변

1

사실은 재생되지 않은 호스트에 바인딩되며, 실행중인 플레이 북의 수명 동안 정의 된 채로 유지됩니다.

다른 호스트에서 사실을 참조하는 방법을 이미 알고있는 것 같습니다. 사용하십시오. 하나 (첫 번째 작전에 set_fact을 유지하는 경우) :

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

나는에 이상 hostname을 사용 : (첫 번째 플레이에서 사실을 설정할 필요가 없을 것 같다 때문에)

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

또는 원하는 호스트를 참조하십시오. 플레이 북의 client1이 호스트 그룹입니다. 호스트 이름과 일치하거나 일치하지 않을 수 있습니다. 또한 여러 호스트로 해석 될 수 있습니다.

+0

두 번째 플레이 북에 'client1'이름을 사용하는 자동화 된 방법이 있는지 알고 싶었습니다. 지역 변수 또는 무작위로 한 곳에서 정의 될 수 있고 여러 곳에서 참조되는 것과 같습니다. – pdna

+0

예에서'client1'은 호스트 그룹 이름 (호스트 패턴)입니다. 그룹 이름과 일치하는 단일 호스트, 그룹 이름과 일치하지 않는 단일 호스트 또는 여러 호스트로 해석 될 수 있습니다. XY 문제를 해결하려고합니다. – techraf

+0

내 경우에는 단일 호스트 (그룹이 아님) 만 일치합니다. – pdna