当我以用户身份执行 sudo 时,ansible_env 没有正确的 HOME 变量集 - "/root"。但是,如果我回显 HOME 环境变量,它是正确的 - “/var/lib/pgsql”。是否没有其他方法可以获取 sudo 用户的主目录?
此外,我已经在 ansible.cfg 中设置了 "sudo_flags = -H",但无法以 postgres 用户身份登录。
- name: ansible_env->HOME
sudo: yes
sudo_user: postgres
debug: msg="{{ ansible_env.HOME }}"
- name: echo $HOME
sudo: yes
sudo_user: postgres
shell: "echo $HOME"
register: postgres_homedir
- name: postgres_homedir.stdout
sudo: yes
sudo_user: postgres
debug: msg="{{ postgres_homedir.stdout }}"
结果:
TASK: [PostgreSQL | ansible_env->HOME] ****************************************
ok: [postgres] => {
"msg": "/root"
}
TASK: [PostgreSQL | echo $HOME] ***********************************************
changed: [postgres]
TASK: [PostgreSQL | postgres_homedir.stdout] **********************************
ok: [postgres] => {
"msg": "/var/lib/pgsql"
}
最佳答案
我可以通过以 root 用户身份运行 playbook(在本地使用 -hosts: localhost
或通过 SSH 作为 root 用户)来复制上面的输出。 Ansible 收集的事实是 root 用户的事实。
如果这就是您正在做的事情,那么您的解决方法似乎是获取 postgres 用户的 $HOME 变量的最佳方法。
即使您将 sudo_user: postgres
添加到 ansible_env->HOME
任务中,事实也不会改变,因为它是在游戏开始时收集的。
关于ansible - 如何从 ansible_env 获取 sudoed 用户的主目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29740646/