我将$ MY_VAR设置为远程主机上的某个值,我想从一个剧本中查询它 (把它的价值放在一个安全的变量中),这就是我所看到的:
- name: put shell var into ansible var command: echo $MY_VAR register: my_var - debug: var=my_var
ok: [192.168.78.10] => { "my_var": { "changed": true, "cmd": [ "echo", "$my_var" ], "delta": "0:00:00.002284", "end": "2014-12-17 18:10:01.097217", "invocation": { "module_args": "echo $my_var", "module_name": "command" }, "rc": 0, "start": "2014-12-17 18:10:01.094933", "stderr": "", "stdout": "$my_var", "stdout_lines": [ "$my_var" ] } }
如果我将命令更改为:
command: pwd
然后我得到了预期的结果:
"my_var": {
"stdout": "/home/vagrant",
"stdout_lines": [
"/home/vagrant"
]
}
从ansible调用时似乎echo不会扩展
答案 0 :(得分:4)
问题是您使用的是command
模块。 Here's what the documentation says:
将在所有选定节点上执行给定命令。它不会 通过shell处理,所以变量如
$HOME
和操作 喜欢"<",">"," |"和"&"不起作用(如果你使用shell
模块 需要这些功能)。
因此,请使用shell
代替command
。