嘗試對其計數:
庫存:
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