如何在包含的文件中获取 ansible 'become' 用户?

How to get ansible 'become' user in included file?

使用 ansible 1.9。库存:

my.host ansible_ssh_user=FIRSTUSER

剧本:

- hosts: my.host
  roles:
    - myrole

角色任务文件:

- include: tasks.yml

- include: tasks.yml
  become: true
  become_user: SECONDUSER

tasks.yml 中,我正在尝试打印出当前正在 运行 创建该文件的用户。第一次应该打印 FIRSTUSER,第二次应该打印 SECONDUSER。但无论我尝试什么(ansible_ssh_useransible_user_idansible_env),它总是打印 FIRSTUSER,即使第二次 tasks.yml 是 运行 它是 运行 作为 SECONDUSER.

如何打印当前 运行ning tasks.yml 的用户?

如果我在 tasks.yml 中包含一个任务 file: dest=~/tmp state=directory',使用用户相对路径 ~/tmp,它第一次正确地将它放在 /home/FIRSTUSER/tmp 并且 /home/SECONDUSER/tmp第二次。所以它工作正常,但我无法从 tasks.yml 中的变量获取用户,因此我可以有条件地执行某些事情,例如。

ansible_ssh_useransible_user_idansible_env等变量由设置模块提供。默认情况下,设置模块作为剧本的第一个任务执行,这是您在游戏过程中应该看到的 GATHERING FACTS 任务。这应该可以解释为什么这些变量与您在 include 语句中指定的内容不相关。

您应该能够通过再次 运行 安装模块再次在包含的任务文件中获取这些变量。但请注意,这会永久更改这些值,而不仅仅是在您包含的文件中。

- setup:

更好的解决方案可能是简单地 运行 shell 模块并请求 whoami:

- shell: whoami
  register: whoami

- debug: msg="{{ whoami.stdout }}"