Ansible的when条件结合run_once会意外跳过某些不应跳过的任务

时间:2019-08-13 03:47:50

标签: ansible

我的清单主机如下:

# 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]

非常奇怪的设计,我认为不应跳过,但他确实跳过了,我该怎么办?我希望得到同样的结果

1 个答案:

答案 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