首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >剧本host_vars

剧本host_vars
EN

Stack Overflow用户
提问于 2021-02-02 23:15:16
回答 1查看 2.6K关注 0票数 1

是否可以使用全局vars在剧本本身中为特定主机设置变量?

因此,游戏手册会被配置成这样:

代码语言:javascript
复制
---
- hosts:
    - host-1
    - host-2
  vars:
    host-1: # < - set vars for host-1 specifically
      a_var: yes
    host-2: # < - set vars for host-2 specifically
      a_var: no

我知道我可以在运行时使用group_vars、host_vars、库存文件或set_fact,但这不是我想要的。

博士们描述的“剧本host_vars",但我还没有弄清楚它是如何配置的。

EN

回答 1

Stack Overflow用户

发布于 2021-02-03 05:33:12

Q:使用全局"Set,在剧本本身中指定主机的vars."变量

答:将特定于主机的变量放入全局字典中,例如my_hostvars。(事实上,创建您自己的主机)。例如

代码语言:javascript
复制
- hosts: host-1,host-2
  vars:
    my_hostvars:
      host-1: # < - set vars for host-1 specifically
        a_var: yes
      host-2: # < - set vars for host-2 specifically
        a_var: no
  tasks:
    - debug:
        msg: "{{ my_hostvars[inventory_hostname]['a_var'] }}"

给出

代码语言:javascript
复制
ok: [host-1] => 
  msg: true
ok: [host-2] => 
  msg: false

这取决于你在哪里宣布字典,以及你如何在剧本中引用它。见变量优先级:我应该把变量放在哪里?

将变量放入您自己的事实中,以简化访问。例如

代码语言:javascript
复制
    - set_fact:
        my_facts: "{{ my_hostvars[inventory_hostname] }}"
    - debug:
        var: my_facts.a_var

代码语言:javascript
复制
ok: [host-1] => 
  my_facts.a_var: true
ok: [host-2] => 
  my_facts.a_var: false

如果需要,可以通过设置变量来进一步简化访问。(例如,为了避免重写已经使用变量的代码)。

代码语言:javascript
复制
    - set_fact:
        a_var: "{{ my_facts.a_var }}"
        b_var: "{{ my_facts.b_var }}"
        c_var: "{{ my_facts.c_var }}"

您可以使用它来设置或自定义(优先级19)。默认值(如果需要)。例如,

代码语言:javascript
复制
    - set_fact:
        a_var: "{{ my_facts.a_var|default('a') }}"
        b_var: "{{ my_facts.b_var }}"
        c_var: "{{ my_facts.c_var }}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66018973

复制
相关文章

相似问题

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