我的清单主机如下:
# inventory
[kafka]
192.168.1.1
192.168.1.2
[mysql]
192.168.1.3
我的ansible剧本如下:
site.yml:
- name: test
hosts: all
roles:
- kafka
kafka角色任务:
# main.yml
- name: get kafka groups length
shell: echo "{{ groups['kafka']|length }}"
run_once: true
delegate_to: localhost
when: "'kafka' in group_names"
预期结果
get kafka groups length
只能分别执行一次并委派给本地执行
实际结果
TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [192.168.1.1]
ok: [192.168.1.2]
ok: [192.168.1.3]
TASK [kafka : get mongodb groups length] ************************************************************************************************************************************
skipping: [192.168.1.3]
非常奇怪的设计,我认为不应跳过,但他确实跳过了,我该怎么办?我希望得到同样的结果
答案 0 :(得分:1)
来自Ansible文档:
Input : 'ThisIsATest' Output : 'This Is A Test' Input : 'This IsATest' Output : 'This Is A Test' (Note: Still only one space between 'This' and 'Is') Input : 'ThisIsATest' (with separator '_') Output : 'This_Is_A_Test'
是当前主机所在的所有组的列表(数组)
您只运行一次任务,因此它仅在第一台主机上运行,并且该主机仅属于group_names
组。这意味着您的kafka
变量仅包含group_names
。
尝试以下方法:
kafka