如何将echo命令的结果放入ansible变量中

时间:2014-12-17 18:17:20

标签: ansible ansible-playbook

我将$ 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不会扩展

1 个答案:

答案 0 :(得分:4)

问题是您使用的是command模块。 Here's what the documentation says

  

将在所有选定节点上执行给定命令。它不会   通过shell处理,所以变量如$HOME和操作   喜欢"<",">"," |"和"&"不起作用(如果你使用shell模块   需要这些功能)。

因此,请使用shell代替command