首页 文章

Ansible:如何为solaris全局设置PATH

提问于
浏览
3

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

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

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

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

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

But. 但是有两个问题:

  • 首先,必须一遍又一遍地指定环境是非常烦人的 . 我知道你可以在一些playbook基本文件变量和引用中定义环境,但你仍然必须在每个 shell 任务上设置 environment: ... .

  • 其次,上面的例子不允许我动态地指定路径,例如as PATH: $PATH:/data/bin - 因为Ansible以不解析 $PATH 的方式执行此操作,因此命令会灾难性地失败 . 所以基本上这将覆盖对 PATH 的任何其他更改 .

我正在寻找一个解决方案

  • 只应添加 PATH 条目 once

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

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

1 回答

  • 1

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

    • 运行ansible的shell在PATH中有/ data / bin . 或者,ansible允许您修改当前/本地PATH变量 .

    • 远程机器已正确设置AcceptEnv .

相关问题