我有一个非常简单的脚本,它保存var并在hostvars中查找它们。
- 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']然而,当我运行这个脚本时,变量并没有定义:
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?
发布于 2016-05-28 16:16:50
您可以使用set_fact模块设置主机事实运行时:
---
- 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运行期间,这些变量将在播放之间存活下来,但即使您使用事实缓存,也不会在执行时保存这些变量。
发布于 2018-01-21 08:00:20
这就是事实(绑定到Ansible目标主机的变量)和常规变量之间的区别。
变量在内部存储在vars结构中,因此您可以通过以下方式访问它们:
tasks:
- debug: var=vars['var_one']
- debug: var=vars['var_two']另一方面,事实存储在hostvars中。
在这两种情况下,除非您引用的是具有动态名称的变量名称,或者是绑定到执行任务的主机以外的其他主机的事实,否则您可以通过使用其名称来简单地使用变量/事实名称:
tasks:
- debug: var=var_one
- debug: var=var_two发布于 2017-07-17 21:21:10
尝试使用
msg=
而不是var=。根据调试模块的帮助
var - A variable name to debug. Mutually exclusive with the 'msg' option.- 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=0https://stackoverflow.com/questions/37493824
复制相似问题