结合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
还没有结束。取笑别人的诀窍是,当我评论这组IPmysql
时,我发现任务可以执行
# 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
现在没有使用包含任务,它将被跳过,请帮助我再次查看,因为这篇文章太长了,所以发布了另一篇文章。关于包含任务呢?这就解决了问题。对吗?