如何解决Ansible 如何仅在剧本中提到的组上运行任务并跳过其他组,即使其他组的主机部分相同
我有一个角色对于 mongo 副本和仲裁器和主机组分别为每个副本和仲裁器通用,因为该角色应该支持同一主机和不同主机上的仲裁器。
主机:
[replicas]
127.0.0.1
127.0.0.2
[arbiter]
127.0.0.2
角色里面的任务:
- name: Run only on replicas
debug msg=" Only on replica"
when: '"replicas" in group_names'
- name: Run only on the arbiter
debug: msg="Only on the arbiter"
when: '"arbiter" in group_names'
剧本:
- hosts: replicas
roles:
- role: "common"
- role: "replica"
- hosts: arbiter
roles:
- role: "common"
- role: "arbiter'
在副本上运行时的预期输出:
TASK [debug] *********************************************************************************************************************************************
ok: [127.0.0.1] => {
"msg": " Only on replica"
}
ok: [127.0.0.2] => {
"msg": " Only on replica"
}
TASK [debug(arbiter)] *********************************************************************************************************************************************
skipping: [127.0.0.1]
skipping: [127.0.0.2]
但没有按预期跳过仲裁任务因为同一主机是副本组的一部分。以下是实际输出。 实际输出:
TASK [debug] *********************************************************************************************************************************************
ok: [127.0.0.1] => {
"msg": " Only on replica"
}
ok: [127.0.0.2] => {
"msg": " Only on replica"
}
TASK [debug(arbiter)] *********************************************************************************************************************************************
skipping: [127.0.0.1]
ok: [127.0.0.2] => {
"msg": " Only on replica"
}
如何在剧本委派的特定组上运行?
解决方法
你好,你可以使用这个方法: 剧本:
- hosts: replicas
roles:
- { role: common,vars: { group: "replicas" } }
- { role: replica,vars: { group: "replicas" } }
- hosts: arbiter
roles:
- { role: common,vars: { group: "arbiter" } }
- { role: arbiter,vars: { group: "arbiter" } }
在你的角色中:
- name: Run only on replicas
debug msg=" Only on replica"
when: group == "replicas"
- name: Run only on the arbiter
debug: msg="Only on the arbiter"
when: group == "arbiter"
希望能帮助您解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。