如何从 ansible_env 获取 sudoed 用户的主目录?
How to get the home directory of a sudoed user from ansible_env?
当我作为用户执行 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
,或者通过 SSHing 以 root 身份)。 Ansible 收集的事实是 root 用户的。
如果这是您正在做的,那么您的解决方法似乎是获取 postgres 用户的 $HOME 变量的最佳方式。
即使在ansible_env->HOME
任务中添加了sudo_user: postgres
,因为是在游戏开始时收集的,所以事实不会改变。
如果您使用 "become: no",“~”将扩展为非根用户。在下面的示例中,我将其与显式 "sudo" 结合起来,以在主目录中以 root 身份执行某些操作:
- name: Setup | install
command: sudo make install chdir=~/git/emacs
become: no
当我作为用户执行 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
,或者通过 SSHing 以 root 身份)。 Ansible 收集的事实是 root 用户的。
如果这是您正在做的,那么您的解决方法似乎是获取 postgres 用户的 $HOME 变量的最佳方式。
即使在ansible_env->HOME
任务中添加了sudo_user: postgres
,因为是在游戏开始时收集的,所以事实不会改变。
如果您使用 "become: no",“~”将扩展为非根用户。在下面的示例中,我将其与显式 "sudo" 结合起来,以在主目录中以 root 身份执行某些操作:
- name: Setup | install
command: sudo make install chdir=~/git/emacs
become: no