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

rah*_*hul 5 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="{{ 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 }}"
Run Code Online (Sandbox Code Playgroud)

结果:

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"
}
Run Code Online (Sandbox Code Playgroud)

jon*_*tan 3

我可以通过以 root 用户身份运行 playbook(在本地使用- hosts: localhost或以 root 用户身份通过​​ SSH)来复制上面的输出。Ansible 收集的事实是 root 用户的事实。

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

即使您添加sudo_user: postgresansible_env->HOME任务,事实也不会改变,因为它是在游戏开始时收集的。