2017-02-15 66 views
2

我有2个节点:Ansible - 检查变种已与一个变量设置两次

节点1:

setup: master 

节点2:

setup: slave 

与任务,请设置您的host_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设置
  • 如果没有节点要么masterslave设置

如何只能让任务继续,如果:

  • 一个节点有master集,另一个节点slave
+0

你能分享完整的YML吗? –

+0

已更新初始职位 – Kevin

回答

4

尝试对其计数:

库存:

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:在问题
  • masterslave是我们正在检查
  • myhost变量值的变量是我们正在进行搜索的组

请注意,这些出现在多个地方,因此您应该搜索并替换所有这些地方。另外我认为所有这些都可以变成动态的,这意味着你可以将其作为一个角色或单独发挥,以便于重复使用。