Ansible:在循环上包含_角色,循环运行次数意外
我正在尝试对项目使用include_角色Ansible:在循环上包含_角色,循环运行次数意外,ansible,ansible-2.x,ansible-role,Ansible,Ansible 2.x,Ansible Role,我正在尝试对项目使用include_角色 --- - hosts: cluster tasks: - block: - name: Execute test role include_role: name: testrole with_items: - 'one' ... 我的角色是 --- - name: Just debugging debug: ... 问题在于,似乎每个主机对每个项目运行该
---
- hosts: cluster
tasks:
- block:
- name: Execute test role
include_role:
name: testrole
with_items:
- 'one'
...
我的角色是
---
- name: Just debugging
debug:
...
问题在于,似乎每个主机对每个项目运行该角色X次,其中X是主机数
PLAY [cluster] *****************************************************************
TASK [setup] *******************************************************************
ok: [thisNode]
ok: [dww]
TASK [Execute test role] *******************************************************
TASK [testrole : Just debugging] ***********************************************
ok: [thisNode] => {
"msg": "Hello world!"
}
ok: [dww] => {
"msg": "Hello world!"
}
TASK [testrole : Just debugging] ***********************************************
ok: [thisNode] => {
"msg": "Hello world!"
}
ok: [dww] => {
"msg": "Hello world!"
}
PLAY RECAP *********************************************************************
dww : ok=3 changed=0 unreachable=0 failed=0
thisNode : ok=3 changed=0 unreachable=0 failed=0
为什么会发生这种情况?我如何修复它
Ansible主机:
[cluster]
thisNode ansible_host=localhost ansible_connection=local
dww
我无法委派任务,因为在实际角色中,任务必须在每个主机中执行 使用
allow_duplicates:no
仍然输出相同的结果
---
- hosts: cluster
tasks:
- name: Execute test role
include_role:
name: testrole
allow_duplicates: False
with_items:
- 'one'
...
作为一种解决方法,您可以添加
allow_duplicates:false
,以防止Ansible使用相同的参数运行相同的角色两次
显然,模块循环了两次:一次是主机,另一次是指定的项目。由于应该对所有主机运行该操作,外部循环将执行两次 这是一个处于预览状态的新模块,这种行为可能会成为一个问题
Ansible有一个内部参数
旁路\u主机\u循环
,以避免这种情况,此模块可能应该使用此机制。我也有同样的问题,并且允许重复:False
没有改变任何内容。
似乎在游戏中设置了
serial:1
,它以某种方式解决了这个问题。这是一个可能适用于少数主机的解决方案 谢谢你的建议。似乎这两种解决方法都不适合我。。。我将用两种解决方法的结果编辑原始帖子这很奇怪,因为我用你的剧本测试了allow_duplicates:false
,它确实有效。看来你没有把所有的东西都展示出来。也许我把它放错地方了。我应该把它加在哪里?这个街区是为了营救(真正的角色)。然而,我只是使用这个模拟角色来测试。顺便说一句,我的角色是/etc/ansible/roles/testrole/tasks/main.yml;您如何运行您的角色?是的,我正在运行该角色,并且允许重复:false
会改变行为。它对我不起作用。我已经在ansible的存储库中找到了一张罚单:
PLAY [cluster] *****************************************************************
TASK [setup] *******************************************************************
ok: [thisNode]
ok: [dww]
TASK [Execute test role] *******************************************************
TASK [testrole : Just debugging] ***********************************************
ok: [thisNode] => {
"msg": "Hello world!"
}
ok: [dww] => {
"msg": "Hello world!"
}
TASK [testrole : Just debugging] ***********************************************
ok: [thisNode] => {
"msg": "Hello world!"
}
ok: [dww] => {
"msg": "Hello world!"
}
PLAY RECAP *********************************************************************
dww : ok=3 changed=0 unreachable=0 failed=0
thisNode : ok=3 changed=0 unreachable=0 failed=0