使用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_user
,ansible_user_id
,ansible_env
),它始终会打印FIRSTUSER
,即使第二次tasks.yml
正在运行它也会#39} ; s以SECONDUSER
运行。
如何打印当前正在运行的用户tasks.yml
?
如果在tasks.yml
我使用用户相对路径file: dest=~/tmp state=directory'
添加了任务~/tmp
,则会在第一次正确地将其置于/home/FIRSTUSER/tmp
/home/SECONDUSER/tmp
第二次。它正常工作,但我无法从tasks.yml
中的变量中获取用户,以便我可以有条件地执行某些操作。
答案 0 :(得分:4)
设置模块提供了ansible_ssh_user
,ansible_user_id
,ansible_env
等变种。默认情况下,设置模块作为剧本的第一个任务执行,这是您在游戏过程中应该看到的 GATHERING FACTS 任务。这应该可以解释为什么这些变量与您在include语句中指定的变量无关。
您应该可以通过再次运行安装模块在已包含的任务文件中再次获取这些变量。但请注意,这将永久更改这些值,而不仅仅是在您附带的文件中。
- setup:
更好的解决方案可能是简单地运行shell
模块并要求whoami
:
- shell: whoami
register: whoami
- debug: msg="{{ whoami.stdout }}"