[英]Ansible env variable differs for sudo user
我们面临的问题是环境变量。 对于用户A, JAVA_HOME
设置为1.5,对于root,它设置为1.7。 当我手动登录并检查A和root中的版本时,它反映了相同的情况。
当我通过ansible作为用户A以sudo设置为true( sudo_user=root
)进行SSH时,我预计java版本为1.7但是它返回为1.5,这是用户A的版本。
任何想法为什么手动登录和安全登录之间的行为有所不同?
根据系统的配置,当Ansible通过sudo升级其权限时,环境将被“清理”,为您提供最小的env变量集。 您的/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代码中设置变量并单独保留sudoers文件,除非您真正需要将这些值保存在Ansible上下文之外的env中。 这有助于避免用户出现不一致的sudo环境。
这里有两件重要的事情:
sudo env
没有为root提供正确的环境变量。 我最好的猜测是你没有正确设置环境变量。 有关如何读取环境变量并将其设置在正确的位置,请参阅此答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.