如何获得ansible';成为';包含文件中的用户?

如何获得ansible';成为';包含文件中的用户?,ansible,sudo,ansible-playbook,Ansible,Sudo,Ansible Playbook,使用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,第二次应该打印SECO

使用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\u ssh\u user
ansible\u user\u id
ansible\u env
),它总是打印
FIRSTUSER
,即使第二次
任务.yml
是以
SECONDUSER
的身份运行的

如何打印当前正在运行
tasks.yml的用户


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

诸如
ansible\u ssh\u user
ansible\u user\u id
ansible\u env
等变量由设置模块提供。默认情况下,设置模块作为playbook的第一个任务执行,这是您应该在播放期间看到的收集事实任务。这应该可以解释为什么这些变量与您在include语句中指定的内容不相关

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

- setup:
更好的解决方案可能是运行
shell
模块并询问
whoami

- shell: whoami
  register: whoami

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

设置模块提供了变量,如
ansible\u ssh\u user
ansible\u user\u id
ansible\u env
等。默认情况下,设置模块作为playbook的第一个任务执行,这是您应该在播放期间看到的收集事实任务。这应该可以解释为什么这些变量与您在include语句中指定的内容不相关

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

- setup:
更好的解决方案可能是运行
shell
模块并询问
whoami

- shell: whoami
  register: whoami

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