可以使用delegate_facts代替delegate_to来解决这个问题。在角色任务中使用delegate_facts将任务委托给主机,并将结果保存到代理主机的事实中。然后,可以使用set_fact从代理主机的事实中获取所需的结果。如下所示:
- name: Delegate task to individual host
command: echo "Hello World"
delegate_facts: true
run_once: true
delegate_to:
- name: Set fact from delegated facts
set_fact:
output: "{{ hostvars[''][''] }}"
在第一个任务中,使用delegate_facts将任务委托给目标主机,并将结果保存到代理主机的事实中。在第二个任务中,使用set_fact从代理主机的事实中获取所需的结果,并将结果保存到output事实中。此时,output事实将包含来自代理主机的任务输出。
请注意,在delegate_facts代理到的主机上,必须启用fact_caching,以便缓存来自代理主机的事实。可以在ansible.cfg文件中设置fact_caching选项来启用事实缓存。
上一篇:Ansible角色设计
下一篇:Ansible角色YAML错误