Ansible:如何为solaris全局设置PATH

时间:2015-01-07 10:27:00

标签: path solaris environment ansible

我正在编写Ansible手册来在Solaris服务器上设置和安装我们的应用程序。

问题是我需要执行的(bash)脚本都假定某个目录位于PATH上,即/data/bin - 这通常不会成为问题,因为它不是Ansible忽略所有.profile.bashrc配置。

现在,我知道您可以通过shell标志为environment任务指定环境,例如:

- shell: printenv
  environment:
    PATH: /usr/bin:/usr/sbin:/data/bin

这将正确路径/data/bin文件夹,printenv命令将正确显示(或我的bash脚本将正确运行)。

但是。然而有两个问题:

  • 首先,必须一遍又一遍地指定环境是非常烦人的。我知道您可以在某个playbook基本文件变量和引用中定义环境,但仍然必须在每个environment: ...任务上设置shell
  • 其次,上面的例子不允许我动态地指定路径,例如as PATH: $PATH:/data/bin - 因为Ansible以不解析$PATH的方式执行此操作,因此命令会灾难性地失败。所以基本上这将覆盖对PATH
  • 的任何其他更改

我正在寻找一个解决方案

  • 只应添加一次
  • 添加PATH条目
  • 附加PATH条目不应覆盖其他任务添加的条目

P.S。我在how to do this on Linux上找到了这个很好的解释,但它使用了Solaris上不存在的/etc/environment。 (并且/etc/profile再次被Ansible忽略。)

1 个答案:

答案 0 :(得分:1)

尝试在ansible.cfg中将-o SendEnv=PATH添加到ssh_args。需要

  • 运行ansible的shell在PATH中有/ data / bin。或者,ansible允许您修改当前/本地PATH变量。
  • 远程计算机已正确设置AcceptEnv