4

I am trying the below task in my playbook. but the pause is not executed. i want the play should be paused for 30 sec once after the each host is deleted.

name: delete host from the NagiosXI
shell: curl -k -XDELETE "https://10.000.00.00/nagiosxi/api/v1/config/host?apikey=qdjcwc&pretty=1&host_name={{ item }}&applyconfig=1"

  - pause:
    seconds: 120

  ignore_error: yes
  with_items:
    - "{{ groups['grp1'] }}"

can someone suggest if this is the right way if doing or propose me the right way. i also used serial=1 module but its still not working.

Jan Groth
  • 14,039
  • 5
  • 40
  • 55

2 Answers2

6

You can use pause under your loop:

- name: Pause
  hosts: all
  gather_facts: False

  tasks:
  - name: delete host from the NagiosXI
    shell: curl -k -XDELETE "https://10.000.00.00/nagiosxi/api/v1/config/host?apikey=qdjcwc&pretty=1&host_name={{ item }}&applyconfig=1"
    ignore_errors: True
    with_items: 
       - "{{ groups['grp1'] }}"
    loop_control:
        pause: 120
imjoseangel
  • 3,543
  • 3
  • 22
  • 30
1

Unfortunately, applying multiple tasks to with_items is not possible in Ansible at the moment, but is still doable with the include directive. As example,

The main play file would be

---

- hosts: localhost
  connection: local
  gather_facts: no
  remote_user: me

  tasks:
    - include: sub_play.yml nagios_host={{ item }}
      with_items:
        - host1
        - host2
        - host3

The sub_play yml which is included in the main play would be,

---
- shell: echo "{{ nagios_host }}"

- pause:
    prompt: "Waiting for {{ nagios_host }}"
    seconds: 5

In this case, the include statement is executed over a loop which executes all the tasks in the sub_task yml.

tux
  • 1,730
  • 1
  • 15
  • 19