如何从ansible_env获取sudoed用户的主目录?

如何从ansible_env获取sudoed用户的主目录?,ansible,Ansible,当我以用户身份sudo时,ansible_env没有正确的HOME变量集-“/root”。但是,如果我回显HOME env变量,它是正确的-“/var/lib/pgsql”。没有其他方法可以获取sudo'ed用户的主目录吗 另外,我已经在ansible.cfg中设置了“sudo_flags=-H”,我无法以postgres用户身份登录 - name: ansible_env->HOME sudo: yes sudo_user: postgres debug: msg="{{ a

当我以用户身份sudo时,ansible_env没有正确的HOME变量集-“/root”。但是,如果我回显HOME env变量,它是正确的-“/var/lib/pgsql”。没有其他方法可以获取sudo'ed用户的主目录吗

另外,我已经在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
本地运行,或者通过以root用户的身份进行SSHing)来复制上面的输出。Ansible收集的事实是根用户的事实

如果这就是您正在做的,那么您的变通方法似乎是获取postgres用户的$HOME变量的最佳方法

即使您将
sudo\u user:postgres
添加到
ansible\u env->HOME
任务中,事实也不会改变,因为它是在游戏开始时收集的。

如果您使用“变成:否”,则“~”将扩展为非root用户。在下面的示例中,我将其与一个显式的“sudo”结合起来,作为主目录中的根目录执行某些操作:

- name: Setup | install
  command: sudo make install chdir=~/git/emacs
  become: no

看完这些文档后,我的解决办法似乎是唯一的办法。尽管如此,我还是希望有更好的方法来实现这一点。