Ansible-检查var是否已设置两次
我有两个节点和一个变量: 节点1:Ansible-检查var是否已设置两次,ansible,Ansible,我有两个节点和一个变量: 节点1: setup: master 节点2: setup: slave 对于任务,请在主机中设置变量。\u vars: --- - hosts: myhost tasks: - name: Copy file to master or slave copy: src: somesource dest: /tmp/"{{ setup }}" owner: root group:
setup: master
节点2:
setup: slave
对于任务,请在主机中设置变量。\u vars:
---
- hosts: myhost
tasks:
- name: Copy file to master or slave
copy:
src: somesource
dest: /tmp/"{{ setup }}"
owner: root
group: root
mode: 0775
# failed_when: setup is undefined or both_nodes_have_"master"
如果出现以下情况,我如何能使任务失败:
- 如果两个节点都设置了
master
- 如果没有节点设置了
或主节点
从节点
- 一个节点设置了
,另一个节点设置了主节点
从节点
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\u type
和master
是我们正在检查的变量值slave
是我们进行搜索的组myhost
请注意,这些文件显示在多个位置,因此您应该对所有文件进行搜索和替换。此外,我认为所有这些都可以动态化,这意味着你可以将其提取为一个角色或单独的角色,以便于重用你可以共享完整的YML(虚拟)吗?更新的初始帖子