首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible hostvars未定义

Ansible hostvars未定义
EN

Stack Overflow用户
提问于 2016-05-28 07:51:36
回答 3查看 9.4K关注 0票数 2

我有一个非常简单的脚本,它保存var并在hostvars中查找它们。

代码语言:javascript
复制
- name: Set hostvars
  hosts: localhost
  vars:
    var_one: "I am a"
    var_two: "test"
  tasks:
    - debug: var=hostvars['localhost']['var_one']
    - debug: var=hostvars['localhost']['var_two']

然而,当我运行这个脚本时,变量并没有定义:

代码语言:javascript
复制
PLAY [Set hostvars] ************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "hostvars['localhost']['var_one']": "VARIABLE IS NOT DEFINED!"
}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "hostvars['localhost']['var_two']": "VARIABLE IS NOT DEFINED!"
}

如何在hostvars中保存这些var?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-28 16:16:50

您可以使用set_fact模块设置主机事实运行时:

代码语言:javascript
复制
---
- name: Set hostvars
  hosts: localhost
  tasks:
    - set_fact: var_one="I am a"
    - set_fact: var_two="test"
    - debug: var=hostvars['localhost']['var_one']
    - debug: var=hostvars['localhost']['var_two']

引用the documentation

在Ansible运行期间,这些变量将在播放之间存活下来,但即使您使用事实缓存,也不会在执行时保存这些变量。

票数 4
EN

Stack Overflow用户

发布于 2018-01-21 08:00:20

这就是事实(绑定到Ansible目标主机的变量)和常规变量之间的区别。

变量在内部存储在vars结构中,因此您可以通过以下方式访问它们:

代码语言:javascript
复制
tasks:
  - debug: var=vars['var_one']
  - debug: var=vars['var_two']

另一方面,事实存储在hostvars中。

在这两种情况下,除非您引用的是具有动态名称的变量名称,或者是绑定到执行任务的主机以外的其他主机的事实,否则您可以通过使用其名称来简单地使用变量/事实名称:

代码语言:javascript
复制
tasks:
  - debug: var=var_one
  - debug: var=var_two
票数 1
EN

Stack Overflow用户

发布于 2017-07-17 21:21:10

尝试使用

msg=

而不是var=。根据调试模块的帮助

代码语言:javascript
复制
var - A variable name to debug. Mutually exclusive with the 'msg' option.

代码语言:javascript
复制
- name: Set hostvars
  hosts: localhost
  vars:
    var_one: I am a
    var_two: est
  tasks:
    - debug: msg=hostvars['localhost']['var_one']
    - debug: msg=hostvars['localhost']['var_two']
...



PLAY [Set hostvars] ************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "hostvars['localhost']['var_one']"
}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "hostvars['localhost']['var_two']"
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37493824

复制
相关文章

相似问题

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