如何获得ansible';成为';包含文件中的用户?
使用ansible 1.9。库存:如何获得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
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 }}"