假设我有一个如下所示的剧本
- 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绑定到一台主机上,不能在另一台主机上使用,你也可以从facts {{ hostvars['client1']['ansible_eth0']['ipv4']['address'] }}获取客户端的IP地址。但是,有没有办法定义一个可以在yml文件中的多个地方引用的局部变量呢?
发布于 2017-10-08 07:52:33
事实绑定到主机,而不是戏剧,并在运行的剧本的生命周期中保持定义。
您似乎已经知道如何引用来自另一个主机的事实,所以只需使用它。任一(如果您在第一本剧本中保留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是一个主机组。它可能与主机的名称匹配,也可能不匹配。它也可以解析到多个主机。
https://stackoverflow.com/questions/46625931
复制相似问题