尝试对其计数:
库存:
master ansible_connection=local
slave ansible_connection=local
[master]
master
[slave]
slave
[myhost:children]
master
slave
[master:vars]
setup_type=master
[slave:vars]
setup_type=slave
剧本:
---
- hosts: myhost
gather_facts: yes
vars:
master_count: 0
slave_count: 0
tasks:
- name: Count master fields
set_fact:
master_count: "{{master_count | int + 1}}"
with_items:
- "{{ groups.myhost }}"
when: "hostvars[item]['setup_type'] is defined and hostvars[item]['setup_type'] == 'master'"
- name: Count slave fields
set_fact:
slave_count: "{{slave_count | int + 1}}"
with_items:
- "{{ groups.myhost }}"
when: "hostvars[item]['setup_type'] is defined and hostvars[item]['setup_type'] == 'slave'"
- name: Fail if invalid master number
debug:
msg: "Master count: {{master_count}}"
failed_when: "master_count | int != 1"
- name: Fail if invalid slave number
debug:
msg: "Slave count: {{slave_count}}. Required: {{groups.myhost | length - master_count | int}}"
failed_when: "slave_count | int + master_count | int != groups.myhost | length"
如果有零个或多个主这将失败,如果没有足够的失败奴隶(这将检查您自动拥有多少主机,并期望所有非主控主机成为从机)
你需要的情况下,修改这些字符串,你需要这个粘贴到您的解决方案:
setup_type
:在问题
master
和slave
是我们正在检查
myhost
变量值的变量是我们正在进行搜索的组
请注意,这些出现在多个地方,因此您应该搜索并替换所有这些地方。另外我认为所有这些都可以变成动态的,这意味着你可以将其作为一个角色或单独发挥,以便于重复使用。
你能分享完整的YML吗? –
已更新初始职位 – Kevin