2017-02-15 65 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變量值的變量是我們正在進行搜索的組

請注意,這些出現在多個地方,因此您應該搜索並替換所有這些地方。另外我認爲所有這些都可以變成動態的,這意味着你可以將其作爲一個角色或單獨發揮,以便於重複使用。