简体   繁体   中英

Ansible conditional handlers for a task?

FYI, I'm running my Ansible playbook in "pull-mode" not push mode. Therefore, my nodes will publish the results of their task via Hipchat.

With that said, I have a task that installs RPMs. When the installs are successful, the nodes notify via Hipchat that the task was successfully run. Now, in the event that a task fails, i force it to notify hipchat w/ the "--force-handlers" paramter. My question, is there a way to call a particular handler depending on the outcome of the task?

Task

- 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

Handler

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

In this case, I use multiple handlers. See following example :

file 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 }}"

Use command

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

CAUTION: use test filter 'equalsto' added in jinja2 2.8

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM