Ash*_*har 4 linux shell ansible
我们面临的问题是围绕环境变量。将JAVA_HOME被设置为1.5为用户A和根它被设置为1.7。当我手动登录并检查 A 和 root 中的版本时,它反映了相同的情况。
当我以用户 A 的 sudo 设置为 true ( sudo_user=root)通过 ansible SSH 时,我预计 java 版本为 1.7,但它返回为 1.5,这是用户 A 的版本。
任何想法为什么手动登录和 ansible 登录之间的行为不同?
根据您系统的配置,当 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"
Run Code Online (Sandbox Code Playgroud)
您可以在他们的文档的设置环境部分中阅读有关为 Ansible 设置环境的更多信息。
在不知道您的任何其他需求的情况下,我强烈建议您在 Ansible 代码中设置变量并单独保留 sudoers 文件,除非您确实需要将这些值保存在 Ansible 上下文之外的 env 中。这有助于避免用户的 sudo 环境不一致。