结合ansible中的when和run_once,它将意外跳过该任务

结合ansible中的when和run_once,它将意外跳过该任务,ansible,Ansible,我的库存主机如下所示: # inventory [kafka] 192.168.1.1 192.168.1.2 [mysql] 192.168.1.3 我的ansible剧本如下: # inventory [kafka] 192.168.1.1 192.168.1.2 [mysql] 192.168.1.3 site.yml: - name: test hosts: all roles: - kafka 卡夫卡的角色和任务: # main.yml - includ

我的库存主机如下所示:

# inventory
[kafka]
192.168.1.1 
192.168.1.2 

[mysql]
192.168.1.3
我的ansible剧本如下:

# inventory
[kafka]
192.168.1.1 
192.168.1.2 

[mysql]
192.168.1.3
site.yml:

- name: test
  hosts: all
  roles:
   - kafka
卡夫卡的角色和任务:

# main.yml
- include: test.yml
  when:  "'kafka' in group_names"




# test.yml
---
- name: get kafka groups length
  shell: echo "{{ groups['kafka']|length }}"
  run_once: true
  delegate_to: localhost

- name: Get the main control machine ip
  shell: ip addr show `ip route |awk '$2=="via" {print $5}' |head -1` | awk '$1=="inet" {print $2}'| head -1 | cut -d '/' -f 1
  run_once: true
  delegate_to: localhost
预期结果

获取卡夫卡组长度
获取主控机ip
可以分别执行和委托给本地执行

实际结果

TASK [Gathering Facts] **********************************************************************************************************
ok: [192.168.1.1]
ok: [192.168.1.2]
ok: [192.168.1.3]
META: ran handlers

TASK [kafka : get kafka groups length] ***************************************************************************************
skipping: [192.168.1.3] => changed=false 
  skip_reason: Conditional result was False

TASK [kafka : Get the main control machine ip] ************************************************************************************
skipping: [192.168.1.3] => changed=false 
  skip_reason: Conditional result was False
还没有结束。取笑别人的诀窍是,当我评论这组IP
mysql
时,我发现任务可以执行

 # inventory
 [kafka]
 192.168.1.1 
 192.168.1.2 

 #[mysql]
 #192.168.1.3
新运行结果(是我想要的结果):

为什么会这样?我们怎样才能避免这个不确定的问题

问:“为什么会这样?我们如何避免这个不确定的问题?”

A:使用。继承应按预期工作

    - include_tasks: test.yml
      when: "'kafka' in group_names"
(使用ansible 2.7.9进行测试)


详细信息

引用

组名称:当前主机所属组的列表

与库存

 [kafka]
 192.168.1.1
 192.168.1.2
 [kafka]
 192.168.1.1
 192.168.1.2

 [mysql]
 192.168.1.3
所有主机的变量都是
组名称:[“kafka”]
,该剧按预期运行

    - include_tasks: test.yml
      when: "'kafka' in group_names"
与库存

 [kafka]
 192.168.1.1
 192.168.1.2
 [kafka]
 192.168.1.1
 192.168.1.2

 [mysql]
 192.168.1.3
一个主机的变量是
组名称:[“mysql”]
。从您所了解到的情况来看,如果任何主机的条件出现故障,则似乎将跳过一次in run_

skipping: [192.168.1.3] => changed=false 
  skip_reason: Conditional result was False

现在没有使用包含任务,它将被跳过,请帮助我再次查看,因为这篇文章太长了,所以发布了另一篇文章。关于包含任务呢?这就解决了问题。对吗?