首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在另一个剧本中使用为一个剧本定义的事实/变量?

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

Stack Overflow用户
提问于 2017-10-08 07:01:03
回答 1查看 5.2K关注 0票数 1

假设我有一个如下所示的剧本

代码语言:javascript
运行
复制
- 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文件中的多个地方引用的局部变量呢?

EN

回答 1

Stack Overflow用户

发布于 2017-10-08 07:52:33

事实绑定到主机,而不是戏剧,并在运行的剧本的生命周期中保持定义。

您似乎已经知道如何引用来自另一个主机的事实,所以只需使用它。任一(如果您在第一本剧本中保留set_fact ):

代码语言:javascript
运行
复制
vars:
  - ip: "{{ hostvars['hostname'][client_ip] }}"
  - hostname: "{{ hostvars['hostname'][client_hostname] }}"

或者(因为似乎没有必要在第一个剧本中设定事实):

代码语言:javascript
运行
复制
vars:
  - ip: "{{ hostvars['hostname'][ansible_default_ipv4][address] }}"
  - hostname: "{{ hostvars['hostname'][ansible_hostname] }}"

我在上面使用了hostname来引用您想要的主机。实战手册中的client1是一个主机组。它可能与主机的名称匹配,也可能不匹配。它也可以解析到多个主机。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46625931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档