2015-06-23 60 views
2

僅供參考,我在「pull-mode」而非push模式下運行我的Ansible遊戲手冊。因此,我的節點將通過Hipchat發佈他們的任務結果。Ansible有條件的處理程序的任務?

就這樣說,我有一個安裝RPM的任務。安裝成功後,節點通過Hipchat通知該任務已成功運行。現在,如果任務失敗,我強迫它通知hipchat /「 - force-handlers」參數。我的問題是,有沒有辦法根據任務的結果調用特定的處理程序?

任務

- name: Install Perl modules 
    command: sudo rpm -Uvh {{ rpm_repository }}/{{ item.key }}-{{ item.value.svn_tag }}.rpm --force 
    with_dict: deploy_modules_perl 
    notify: announce_hipchat 

處理器

- name: announce_hipchat 
    local_action: hipchat 
     from="deployment" 
     token={{ hipchat_auth_token }} 
     room={{ hipchat_room }} 
     msg="[{{ ansible_hostname }}] Successfully installed RPMs!" 
     validate_certs="no" 
+0

您可以在處理程序中使用'when','with_items'等。條件會給你你想要的嗎?從您的解釋和示例代碼中,我不太確定您要做什麼...... –

+0

本部分的文檔可能會有所幫助:https://docs.ansible.com/playbooks_error_handling.html#ignoring-failed-commands您可以忽略失敗,然後根據失敗或成功完成不同的事情。 – David

回答

0

在這種情況下,我使用了多個處理程序。見下面的例子:

文件site.yml

- hosts: all 
    gather_facts: false 
    force_handlers: true 
    vars: 
    - cmds: 
     echo: hello 
     eccho: hello 
    tasks: 
    - name: echo 
    command: "{{ item.key }} {{ item.value }}" 
    register: command_result 
    with_dict: "{{ cmds }}" 
    changed_when: true 
    failed_when: false 
    notify: 
    - "hipchat" 
    handlers: 
    - name: "hipchat" 
    command: "/bin/true" 
    notify: 
    - "hipchat_succeeded" 
    - "hipchat_failed" 
    - name: "hipchat_succeeded" 
    debug: 
     var: "{{ item }}" 
    with_items: "{{ command_result.results | selectattr('rc', 'equalto', 0) | list }}" 
    - name: "hipchat_failed" 
    debug: 
     var: "{{ item }}" 
    with_items: "{{ command_result.results | rejectattr('rc', 'equalto', 0) | list }}" 

使用命令

ansible-playbook -c local -i "localhost," site.yml 

小心:在加入的Jinja2使用測試過濾器'equalsto'2.8

相關問題