Ansible环境变量对sudo用户不同。

5
我们遇到的问题与环境变量有关。对于用户A,JAVA_HOME设置为1.5,对于root用户,它设置为1.7。当我手动登录并检查A和root中的版本时,它显示相同。
当我通过带有sudo设置为true(sudo_user=root)的ansible作为用户A进行SSH时,我预期java版本为1.7,但返回的是1.5,这是用户A的版本。
有任何想法为什么手动登录和ansible登录之间的行为不同吗?

你是如何检查环境变量的? - ydaetskcoR
我使用env命令。同时,检查java -version会给我一个不同的版本,而我在用户的.bashrc中明确设置的版本不同。我尝试在.bash_profile中进行设置。 - Ashwin Sridhar
也许与sudo环境变量有关。请参见此处 - user2599522
2个回答

7
根据您系统的配置,当Ansible通过sudo升级其特权时,环境将被“净化”,从而给您提供了一组最小的环境变量。 您的/etc/sudoers文件可能已经设置了env_reset
您有几个选择。
在sudoers文件中,您可以删除env_reset或者为您希望保留的每个变量添加env_keep MY_VAR条目。
在Ansible中,您可以明确设置所需的环境变量。 在特定任务上执行此操作如下:
- hosts: all
  tasks:
    - cmd: echo $MY_ENV
      become: true
      environment:
        MY_ENV: "foo"

你可以在Ansible文档的设置环境部分了解有关设置Ansible环境的更多信息。
如果不了解您的其他需求,我强烈建议在您的Ansible代码中设置变量,并保留sudoers文件,除非您真正需要在Ansible上下文之外保留这些值。这有助于避免用户使用不一致的sudo环境。

0

这里有两件事情很重要:

  • 你是如何检查root的环境变量的?sudo env不能给你正确的root环境变量。
  • 你是如何设置root的环境变量的?

我最好的猜测是你没有正确地设置环境变量。请参考this答案,了解环境变量的读取和正确设置位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接