【问题标题】:how to put the result of an echo command into an ansible variable如何将 echo 命令的结果放入 ansible 变量中
【发布时间】:2014-12-17 18:17:19
【问题描述】:

我在远程主机上将 $MY_VAR 设置为某个值,我想从剧本中查询它 (将它的值放在 ansible 变量中),这就是我所看到的:

- 名称:将 shell var 放入 ansible var 命令:回声 $MY_VAR 注册:my_var - 调试:var=my_var 好的:[192.168.78.10] => { “我的变量”:{ “改变”:是的, “命令”:[ “回声”, “$my_var” ], “三角洲”:“0:00:00.002284”, “结束”:“2014-12-17 18:10:01.097217”, “调用”:{ "module_args": "echo $my_var", “模块名称”:“命令” }, “rc”:0, "开始": "2014-12-17 18:10:01.094933", “标准错误”:“”, "stdout": "$my_var", “标准输出线”:[ “$my_var” ] } }

注意:

如果我将命令更改为:

 command: pwd

然后我得到了预期的结果:

"my_var": {
  "stdout": "/home/vagrant", 
  "stdout_lines": [
      "/home/vagrant"  
  ]
}

似乎从 ansible 调用时 echo 没有扩展

【问题讨论】:

  • 您确定,只要您通过 ssh 连接到远程主机,就可以访问此环境变量吗?如果你 ssh 到机器,做“echo $MY_VAR”会打印什么吗?我的意思是可以为每个终端实例设置 env 变量,那么您的 env 变量是否可能设置在一个终端上,但是如果您启动一个新选项卡,它可能不可见?
  • echo $MY_VAR 在远程主机上打印期望值,在用户的 ~/.profile 中设置

标签: ansible ansible-playbook


【解决方案1】:

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

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

所以,请使用shell 而不是command

【讨论】:

  • 查找不在本地运行吗? “这些插件在 Ansible 控制机器上进行评估”
  • 另外值得注意的是,环境变量可能根本不会被加载——Ansible 不与交互式会话连接,因此当 Ansible 连接到服务器时,例如 .bash_profile 将不会被解析,并且任何那里保存的远程服务器上的配置将被忽略...
  • @keba 我同意,整个事情是一个大红旗。这似乎是对 Ansible 和配置管理的公然滥用。
猜你喜欢
  • 2015-06-22
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 2013-10-17
相关资源
最近更新 更多