2017-10-16 24 views
-1

有條件運行角色是否有標準或最佳實踐?有條件地運行角色的最佳實踐

如果我有以下的基本劇本:

--- 
- hosts: prod 
    gather_facts: false 
    become: true 
    become_method: sudo 
    vars_files: 
    - variables/vars.yml 
    pre_tasks: 
    - name: check app existence 
     command: ls /data/myapp 
     # Store the resuts here 
     register: app_exists 
     ignore_errors: yes 
    roles: 
    - os_base_setup 
    - selinux_setup 
    - libsemanage_install 
    ... 
    # Conditionally run this role 
    - - { role: app_clean_install, when: app_exists|failed } 
    - post_install_config 
    - cleanup 
... 

缺點,我可以看到這種方法:

這始終報告「前置任務」爲已經做了「變化」。

它還會將每個單獨的任務與「跳過」角色報告爲跳過,而不是僅跳過整個角色。

+2

在某處鍵入問號並不一定會成爲問題。 – techraf

+0

感謝您的反饋......這個問題沒有明確說明,所以我做了一個編輯。 – comfytoday

回答

1

這總是報告'前任務'已經做了'改變'。

使用

changed_when: false 

當你執行一個shell命令,你知道,這只是收集資料,但並不能改變什麼。

它還報告每個單個任務的「跳過」角色爲跳過,而不是跳過整個角色。

設置您ansible.cfg

stdout_callback = skippy 

忽略跳過任務。

有沒有辦法阻止這個pre_task在測試失敗時記錄錯誤?

不可能阻止記錄錯誤。但是,有可能忽略的錯誤有以下選項:

failed_when: false 

在這種情況下,記錄的錯誤,但劇本不停止執行。這對於處理劇本中的錯誤是必要的。以here爲例。

+0

有沒有辦法阻止這個pre_task在測試失敗時記錄錯誤? atm第一個任務記錄了一堆紅色的錯誤文本。 – comfytoday