如何在另一个剧本中使用为一个剧本定义的事实/变量?

时间:2017-10-07 23:01:03

标签: ansible ansible-facts

假设我有一个类似下面的剧本

- 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 个答案:

答案 0 :(得分: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来引用您想要的主机。你的剧本中的client1是一个主持人群组。它可能与主机名称匹配,也可能不匹配。它也可以解析为多个主机。