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

标签 ansible

当我以用户身份执行 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/

相关文章:

AnsibleError : template error while templating string: expected token 'end of print statement' , 得到 '{'

ansible - Group_by 未按预期匹配 ansible playbook 组 - 如何使用?

ansible - 如何忽略ansible中的警告

ansible - 如何使用 Ansible 添加没有密码的用户和组?

ansible - 用 ansible 替换配置文件中的一行

ansible - 使用 Ansible 在/etc/hosts 中添加一行“<主机的 IP 地址> <主机的 FQDN>

Ansible:从 git repo 克隆一个文件

docker - 不使用docker命令的ansible aws ecr登录

kubernetes - Ansible - 迭代项目并在值不存在时执行任务

python - 如何使其仅在满足我的强制条件时才显示