]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
handlers: do not trigger handlers on rolling_update
authorGuillaume Abrioux <gabrioux@redhat.com>
Wed, 20 Mar 2019 06:46:23 +0000 (07:46 +0100)
committerDimitri Savineau <savineau.dimitri@gmail.com>
Mon, 25 Mar 2019 20:02:56 +0000 (16:02 -0400)
rolling_update playbook already takes care of stopping/starting services
during the sequence. There's no need to trigger potential unwanted
services restart.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
roles/ceph-handler/handlers/main.yml

index 038d2d8efadc75c60ec01f2d4ef6306dd22b6170..14d01612da53119ad5f7c9e75878ca5c72767abe 100644 (file)
 ---
-- name: update apt cache
-  apt:
-    update-cache: yes
-  when:
-    - ansible_os_family == 'Debian'
-  register: result
-  until: result is succeeded
-
-# We only want to restart on hosts that have called the handler.
-# This var is set when he handler is called, and unset after the
-# restart to ensure only the correct hosts are restarted.
-- name: set _mon_handler_called before restart
-  set_fact:
-     _mon_handler_called: True
-  listen: "restart ceph mons"
-
-- name: copy mon restart script
-  template:
-    src: restart_mon_daemon.sh.j2
-    dest: /tmp/restart_mon_daemon.sh
-    owner: root
-    group: root
-    mode: 0750
-  listen: "restart ceph mons"
-  when:
-    - mon_group_name in group_names
-
-- name: restart ceph mon daemon(s) - non container
-  command: /usr/bin/env bash /tmp/restart_mon_daemon.sh
-  listen: "restart ceph mons"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - mon_group_name in group_names
-    - not containerized_deployment
-    - hostvars[item]['_mon_handler_called'] | default(False)
-    - mon_socket_stat.rc == 0
-  with_items: "{{ groups[mon_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: restart ceph mon daemon(s) - container
-  command: /usr/bin/env bash /tmp/restart_mon_daemon.sh
-  listen: "restart ceph mons"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - mon_group_name in group_names
-    - containerized_deployment
-    - ceph_mon_container_stat.get('rc') == 0
-    - hostvars[item]['_mon_handler_called'] | default(False)
-    - ceph_mon_container_stat.get('stdout_lines', [])|length != 0
-  with_items: "{{ groups[mon_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: set _mon_handler_called after restart
-  set_fact:
-     _mon_handler_called: False
-  listen: "restart ceph mons"
-
-- name: set _osd_handler_called before restart
-  set_fact:
-     _osd_handler_called: True
-  listen: "restart ceph osds"
-
-# This does not just restart OSDs but everything else too. Unfortunately
-# at this time the ansible role does not have an OSD id list to use
-# for restarting them specifically.
-# This does not need to run during a rolling update as the playbook will
-# restart all OSDs using the tasks "start ceph osd" or
-# "restart containerized ceph osd"
-- name: copy osd restart script
-  template:
-    src: restart_osd_daemon.sh.j2
-    dest: /tmp/restart_osd_daemon.sh
-    owner: root
-    group: root
-    mode: 0750
-  listen: "restart ceph osds"
-  when:
-    - osd_group_name in group_names
-    - not rolling_update
-
-- name: restart ceph osds daemon(s) - non container
-  command: /usr/bin/env bash /tmp/restart_osd_daemon.sh
-  listen: "restart ceph osds"
-  when:
-    - osd_group_name in group_names
-    - not containerized_deployment
-    - not rolling_update
-    # We do not want to run these checks on initial deployment (`socket_osd_container.results[n].rc == 0`)
-    # except when a crush location is specified. ceph-disk will start the osds before the osd crush location is specified
-    - osd_socket_stat.rc == 0
-    - ceph_current_status.fsid is defined
-    - handler_health_osd_check
-    - hostvars[item]['_osd_handler_called'] | default(False)
-  with_items: "{{ groups[osd_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: restart ceph osds daemon(s) - container
-  command: /usr/bin/env bash /tmp/restart_osd_daemon.sh
-  listen: "restart ceph osds"
-  when:
-    # We do not want to run these checks on initial deployment (`socket_osd_container_stat.results[n].rc == 0`)
-    # except when a crush location is specified. ceph-disk will start the osds before the osd crush location is specified
-    - osd_group_name in group_names
-    - containerized_deployment
-    - not rolling_update
-    - inventory_hostname == groups.get(osd_group_name) | last
-    - ceph_osd_container_stat.get('rc') == 0
-    - ceph_osd_container_stat.get('stdout_lines', [])|length != 0
-    - handler_health_osd_check
-    - hostvars[item]['_osd_handler_called'] | default(False)
-  with_items: "{{ groups[osd_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: set _osd_handler_called after restart
-  set_fact:
-     _osd_handler_called: False
-  listen: "restart ceph osds"
-
-- name: set _mds_handler_called before restart
-  set_fact:
-     _mds_handler_called: True
-  listen: "restart ceph mdss"
-
-- name: copy mds restart script
-  template:
-    src: restart_mds_daemon.sh.j2
-    dest: /tmp/restart_mds_daemon.sh
-    owner: root
-    group: root
-    mode: 0750
-  listen: "restart ceph mdss"
-  when:
-    - mds_group_name in group_names
-
-- name: restart ceph mds daemon(s) - non container
-  command: /usr/bin/env bash /tmp/restart_mds_daemon.sh
-  listen: "restart ceph mdss"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - mds_group_name in group_names
-    - not containerized_deployment
-    - hostvars[item]['_mds_handler_called'] | default(False)
-    - mds_socket_stat.rc == 0
-  with_items: "{{ groups[mds_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: restart ceph mds daemon(s) - container
-  command: /usr/bin/env bash /tmp/restart_mds_daemon.sh
-  listen: "restart ceph mdss"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - mds_group_name in group_names
-    - containerized_deployment
-    - ceph_mds_container_stat.get('rc') == 0
-    - hostvars[item]['_mds_handler_called'] | default(False)
-    - ceph_mds_container_stat.get('stdout_lines', [])|length != 0
-  with_items: "{{ groups[mds_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: set _mds_handler_called after restart
-  set_fact:
-     _mds_handler_called: False
-  listen: "restart ceph mdss"
-
-- name: set _rgw_handler_called before restart
-  set_fact:
-     _rgw_handler_called: True
-  listen: "restart ceph rgws"
-
-- name: copy rgw restart script
-  template:
-    src: restart_rgw_daemon.sh.j2
-    dest: /tmp/restart_rgw_daemon.sh
-    owner: root
-    group: root
-    mode: 0750
-  listen: "restart ceph rgws"
-  when:
-    - rgw_group_name in group_names
-
-- name: restart ceph rgw daemon(s) - non container
-  command: /usr/bin/env bash /tmp/restart_rgw_daemon.sh
-  listen: "restart ceph rgws"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - rgw_group_name in group_names
-    - not containerized_deployment
-    - hostvars[item]['_rgw_handler_called'] | default(False)
-    - rgw_socket_stat.rc == 0
-  with_items: "{{ groups[rgw_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: restart ceph rgw daemon(s) - container
-  command: /usr/bin/env bash /tmp/restart_rgw_daemon.sh
-  listen: "restart ceph rgws"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - rgw_group_name in group_names
-    - containerized_deployment
-    - ceph_rgw_container_stat.get('rc') == 0
-    - hostvars[item]['_rgw_handler_called'] | default(False)
-    - ceph_rgw_container_stat.get('stdout_lines', [])|length != 0
-  with_items: "{{ groups[rgw_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: set _rgw_handler_called after restart
-  set_fact:
-     _rgw_handler_called: False
-  listen: "restart ceph rgws"
-
-- name: set _nfs_handler_called before restart
-  set_fact:
-     _nfs_handler_called: True
-  listen: "restart ceph nfss"
-
-- name: copy nfs restart script
-  template:
-    src: restart_nfs_daemon.sh.j2
-    dest: /tmp/restart_nfs_daemon.sh
-    owner: root
-    group: root
-    mode: 0750
-  listen: "restart ceph nfss"
-  when:
-    - nfs_group_name in group_names
-
-- name: restart ceph nfs daemon(s) - non container
-  command: /usr/bin/env bash /tmp/restart_nfs_daemon.sh
-  listen: "restart ceph nfss"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - nfs_group_name in group_names
-    - not containerized_deployment
-    - hostvars[item]['_nfs_handler_called'] | default(False)
-    - nfs_socket_stat.rc == 0
-  with_items: "{{ groups[nfs_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: restart ceph nfs daemon(s) - container
-  command: /usr/bin/env bash /tmp/restart_nfs_daemon.sh
-  listen: "restart ceph nfss"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - nfs_group_name in group_names
-    - containerized_deployment
-    - ceph_nfs_container_stat.get('rc') == 0
-    - hostvars[item]['_nfs_handler_called'] | default(False)
-    - ceph_nfs_container_stat.get('stdout_lines', [])|length != 0
-  with_items: "{{ groups[nfs_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: set _nfs_handler_called after restart
-  set_fact:
-     _nfs_handler_called: False
-  listen: "restart ceph nfss"
-
-- name: set _rbdmirror_handler_called before restart
-  set_fact:
-     _rbdmirror_handler_called: True
-  listen: "restart ceph rbdmirrors"
-
-- name: copy rbd mirror restart script
-  template:
-    src: restart_rbd_mirror_daemon.sh.j2
-    dest: /tmp/restart_rbd_mirror_daemon.sh
-    owner: root
-    group: root
-    mode: 0750
-  listen: "restart ceph rbdmirrors"
-  when:
-    - rbdmirror_group_name in group_names
-
-- name: restart ceph rbd mirror daemon(s) - non container
-  command: /usr/bin/env bash /tmp/restart_rbd_mirror_daemon.sh
-  listen: "restart ceph rbdmirrors"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - rbdmirror_group_name in group_names
-    - not containerized_deployment
-    - hostvars[item]['_rbdmirror_handler_called'] | default(False)
-    - rbd_mirror_socket_stat.rc == 0
-  with_items: "{{ groups[rbdmirror_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: restart ceph rbd mirror daemon(s) - container
-  command: /usr/bin/env bash /tmp/restart_rbd_mirror_daemon.sh
-  listen: "restart ceph rbdmirrors"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - rbdmirror_group_name in group_names
-    - containerized_deployment
-    - ceph_rbd_mirror_container_stat.get('rc') == 0
-    - hostvars[item]['_rbdmirror_handler_called'] | default(False)
-    - ceph_rbd_mirror_container_stat.get('stdout_lines', [])|length != 0
-  with_items: "{{ groups[rbdmirror_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: set _rbdmirror_handler_called after restart
-  set_fact:
-     _rbdmirror_handler_called: False
-  listen: "restart ceph rbdmirrors"
-
-- name: set _mgr_handler_called before restart
-  set_fact:
-     _mgr_handler_called: True
-  listen: "restart ceph mgrs"
-
-- name: copy mgr restart script
-  template:
-    src: restart_mgr_daemon.sh.j2
-    dest: /tmp/restart_mgr_daemon.sh
-    owner: root
-    group: root
-    mode: 0750
-  listen: "restart ceph mgrs"
-  when:
-    - mgr_group_name in group_names
-
-- name: restart ceph mgr daemon(s) - non container
-  command: /usr/bin/env bash /tmp/restart_mgr_daemon.sh
-  listen: "restart ceph mgrs"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - mgr_group_name in group_names
-    - not containerized_deployment
-    - hostvars[item]['_mgr_handler_called'] | default(False)
-    - mgr_socket_stat.rc == 0
-  with_items: "{{ groups[mgr_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: restart ceph mgr daemon(s) - container
-  command: /usr/bin/env bash /tmp/restart_mgr_daemon.sh
-  listen: "restart ceph mgrs"
-  when:
-    # We do not want to run these checks on initial deployment (`socket.rc == 0`)
-    - mgr_group_name in group_names
-    - containerized_deployment
-    - ceph_mgr_container_stat.get('rc') == 0
-    - hostvars[item]['_mgr_handler_called'] | default(False)
-    - ceph_mgr_container_stat.get('stdout_lines', [])|length != 0
-  with_items: "{{ groups[mgr_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: set _mgr_handler_called after restart
-  set_fact:
-     _mgr_handler_called: False
-  listen: "restart ceph mgrs"
-
-- name: set _tcmu_runner_handler_called before restart
-  set_fact:
-     _tcmu_runner_handler_called: True
-  listen: "restart ceph tcmu-runner"
-
-- name: copy tcmu-runner restart script
-  template:
-    src: restart_tcmu_runner.sh.j2
-    dest: /tmp/restart_tcmu_runner.sh
-    owner: root
-    group: root
-    mode: 0750
-  listen: "restart ceph tcmu-runner"
-  when:
-    - iscsi_gw_group_name in group_names
-
-- name: restart tcmu-runner
-  command: /usr/bin/env bash /tmp/restart_tcmu_runner.sh
-  listen: "restart ceph tcmu-runner"
-  when:
-    - iscsi_gw_group_name in group_names
-    - ceph_tcmu_runner_stat.get('rc') == 0
-    - hostvars[item]['_tcmu_runner_handler_called'] | default(False)
-    - ceph_tcmu_runner_stat.get('stdout_lines', [])|length != 0
-  with_items: "{{ groups[iscsi_gw_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: set _tcmu_runner_handler_called after restart
-  set_fact:
-     _tcmu_runner_handler_called: False
-  listen: "restart ceph tcmu-runner"
-
-- name: set _rbd_target_gw_handler_called before restart
-  set_fact:
-     _rbd_target_gw_handler_called: True
-  listen: "restart ceph rbd-target-gw"
-
-- name: copy rbd-target-gw restart script
-  template:
-    src: restart_rbd_target_gw.sh.j2
-    dest: /tmp/restart_rbd_target_gw.sh
-    owner: root
-    group: root
-    mode: 0750
-  listen: "restart ceph rbd-target-gw"
-  when:
-    - iscsi_gw_group_name in group_names
-
-- name: restart rbd-target-gw
-  command: /usr/bin/env bash /tmp/restart_rbd_target_gw.sh
-  listen: "restart ceph rbd-target-gw"
-  when:
-    - iscsi_gw_group_name in group_names
-    - ceph_rbd_target_gw_stat.get('rc') == 0
-    - hostvars[item]['_rbd_target_gw_handler_called'] | default(False)
-    - ceph_rbd_target_gw_stat.get('stdout_lines', [])|length != 0
-  with_items: "{{ groups[iscsi_gw_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: set _rbd_target_gw_handler_called after restart
-  set_fact:
-     _rbd_target_gw_handler_called: False
-  listen: "restart ceph rbd-target-gw"
-
-- name: set _rbd_target_api_handler_called before restart
-  set_fact:
-     _rbd_target_api_handler_called: True
-  listen: "restart ceph rbd-target-api"
-
-- name: copy rbd-target-api restart script
-  template:
-    src: restart_rbd_target_api.sh.j2
-    dest: /tmp/restart_rbd_target_api.sh
-    owner: root
-    group: root
-    mode: 0750
-  listen: "restart ceph rbd-target-api"
-  when:
-    - iscsi_gw_group_name in group_names
-
-- name: restart rbd-target-api
-  command: /usr/bin/env bash /tmp/restart_rbd_target_api.sh
-  listen: "restart ceph rbd-target-api"
-  when:
-    - iscsi_gw_group_name in group_names
-    - ceph_rbd_target_api_stat.get('rc') == 0
-    - hostvars[item]['_rbd_target_api_handler_called'] | default(False)
-    - ceph_rbd_target_api_stat.get('stdout_lines', [])|length != 0
-  with_items: "{{ groups[iscsi_gw_group_name] }}"
-  delegate_to: "{{ item }}"
-  run_once: True
-
-- name: set _rbd_target_api_handler_called after restart
-  set_fact:
-     _rbd_target_api_handler_called: False
-  listen: "restart ceph rbd-target-api"
+- name: handlers
+  when: not rolling_update
+  block:
+    - name: update apt cache
+      apt:
+        update-cache: yes
+      when:
+        - ansible_os_family == 'Debian'
+      register: result
+      until: result is succeeded
+
+    # We only want to restart on hosts that have called the handler.
+    # This var is set when he handler is called, and unset after the
+    # restart to ensure only the correct hosts are restarted.
+    - name: set _mon_handler_called before restart
+      set_fact:
+         _mon_handler_called: True
+      listen: "restart ceph mons"
+
+    - name: copy mon restart script
+      template:
+        src: restart_mon_daemon.sh.j2
+        dest: /tmp/restart_mon_daemon.sh
+        owner: root
+        group: root
+        mode: 0750
+      listen: "restart ceph mons"
+      when:
+        - mon_group_name in group_names
+        - not rolling_update
+
+    - name: restart ceph mon daemon(s) - non container
+      command: /usr/bin/env bash /tmp/restart_mon_daemon.sh
+      listen: "restart ceph mons"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - mon_group_name in group_names
+        - not containerized_deployment
+        - hostvars[item]['_mon_handler_called'] | default(False)
+        - mon_socket_stat.rc == 0
+        - not rolling_update
+      with_items: "{{ groups[mon_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: restart ceph mon daemon(s) - container
+      command: /usr/bin/env bash /tmp/restart_mon_daemon.sh
+      listen: "restart ceph mons"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - mon_group_name in group_names
+        - containerized_deployment
+        - ceph_mon_container_stat.get('rc') == 0
+        - hostvars[item]['_mon_handler_called'] | default(False)
+        - ceph_mon_container_stat.get('stdout_lines', [])|length != 0
+        - not rolling_update
+      with_items: "{{ groups[mon_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: set _mon_handler_called after restart
+      set_fact:
+         _mon_handler_called: False
+      listen: "restart ceph mons"
+
+    - name: set _osd_handler_called before restart
+      set_fact:
+         _osd_handler_called: True
+      listen: "restart ceph osds"
+
+    # This does not just restart OSDs but everything else too. Unfortunately
+    # at this time the ansible role does not have an OSD id list to use
+    # for restarting them specifically.
+    # This does not need to run during a rolling update as the playbook will
+    # restart all OSDs using the tasks "start ceph osd" or
+    # "restart containerized ceph osd"
+    - name: copy osd restart script
+      template:
+        src: restart_osd_daemon.sh.j2
+        dest: /tmp/restart_osd_daemon.sh
+        owner: root
+        group: root
+        mode: 0750
+      listen: "restart ceph osds"
+      when:
+        - osd_group_name in group_names
+        - not rolling_update
+
+    - name: restart ceph osds daemon(s) - non container
+      command: /usr/bin/env bash /tmp/restart_osd_daemon.sh
+      listen: "restart ceph osds"
+      when:
+        - osd_group_name in group_names
+        - not containerized_deployment
+        - not rolling_update
+        # We do not want to run these checks on initial deployment (`socket_osd_container.results[n].rc == 0`)
+        # except when a crush location is specified. ceph-disk will start the osds before the osd crush location is specified
+        - osd_socket_stat.rc == 0
+        - ceph_current_status.fsid is defined
+        - handler_health_osd_check
+        - hostvars[item]['_osd_handler_called'] | default(False)
+      with_items: "{{ groups[osd_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: restart ceph osds daemon(s) - container
+      command: /usr/bin/env bash /tmp/restart_osd_daemon.sh
+      listen: "restart ceph osds"
+      when:
+        # We do not want to run these checks on initial deployment (`socket_osd_container_stat.results[n].rc == 0`)
+        # except when a crush location is specified. ceph-disk will start the osds before the osd crush location is specified
+        - osd_group_name in group_names
+        - containerized_deployment
+        - not rolling_update
+        - inventory_hostname == groups.get(osd_group_name) | last
+        - ceph_osd_container_stat.get('rc') == 0
+        - ceph_osd_container_stat.get('stdout_lines', [])|length != 0
+        - handler_health_osd_check
+        - hostvars[item]['_osd_handler_called'] | default(False)
+      with_items: "{{ groups[osd_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: set _osd_handler_called after restart
+      set_fact:
+         _osd_handler_called: False
+      listen: "restart ceph osds"
+
+    - name: set _mds_handler_called before restart
+      set_fact:
+         _mds_handler_called: True
+      listen: "restart ceph mdss"
+
+    - name: copy mds restart script
+      template:
+        src: restart_mds_daemon.sh.j2
+        dest: /tmp/restart_mds_daemon.sh
+        owner: root
+        group: root
+        mode: 0750
+      listen: "restart ceph mdss"
+      when:
+        - mds_group_name in group_names
+
+    - name: restart ceph mds daemon(s) - non container
+      command: /usr/bin/env bash /tmp/restart_mds_daemon.sh
+      listen: "restart ceph mdss"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - mds_group_name in group_names
+        - not containerized_deployment
+        - hostvars[item]['_mds_handler_called'] | default(False)
+        - mds_socket_stat.rc == 0
+      with_items: "{{ groups[mds_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: restart ceph mds daemon(s) - container
+      command: /usr/bin/env bash /tmp/restart_mds_daemon.sh
+      listen: "restart ceph mdss"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - mds_group_name in group_names
+        - containerized_deployment
+        - ceph_mds_container_stat.get('rc') == 0
+        - hostvars[item]['_mds_handler_called'] | default(False)
+        - ceph_mds_container_stat.get('stdout_lines', [])|length != 0
+      with_items: "{{ groups[mds_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: set _mds_handler_called after restart
+      set_fact:
+         _mds_handler_called: False
+      listen: "restart ceph mdss"
+
+    - name: set _rgw_handler_called before restart
+      set_fact:
+         _rgw_handler_called: True
+      listen: "restart ceph rgws"
+
+    - name: copy rgw restart script
+      template:
+        src: restart_rgw_daemon.sh.j2
+        dest: /tmp/restart_rgw_daemon.sh
+        owner: root
+        group: root
+        mode: 0750
+      listen: "restart ceph rgws"
+      when:
+        - rgw_group_name in group_names
+
+    - name: restart ceph rgw daemon(s) - non container
+      command: /usr/bin/env bash /tmp/restart_rgw_daemon.sh
+      listen: "restart ceph rgws"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - rgw_group_name in group_names
+        - not containerized_deployment
+        - hostvars[item]['_rgw_handler_called'] | default(False)
+        - rgw_socket_stat.rc == 0
+      with_items: "{{ groups[rgw_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: restart ceph rgw daemon(s) - container
+      command: /usr/bin/env bash /tmp/restart_rgw_daemon.sh
+      listen: "restart ceph rgws"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - rgw_group_name in group_names
+        - containerized_deployment
+        - ceph_rgw_container_stat.get('rc') == 0
+        - hostvars[item]['_rgw_handler_called'] | default(False)
+        - ceph_rgw_container_stat.get('stdout_lines', [])|length != 0
+      with_items: "{{ groups[rgw_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: set _rgw_handler_called after restart
+      set_fact:
+         _rgw_handler_called: False
+      listen: "restart ceph rgws"
+
+    - name: set _nfs_handler_called before restart
+      set_fact:
+         _nfs_handler_called: True
+      listen: "restart ceph nfss"
+
+    - name: copy nfs restart script
+      template:
+        src: restart_nfs_daemon.sh.j2
+        dest: /tmp/restart_nfs_daemon.sh
+        owner: root
+        group: root
+        mode: 0750
+      listen: "restart ceph nfss"
+      when:
+        - nfs_group_name in group_names
+
+    - name: restart ceph nfs daemon(s) - non container
+      command: /usr/bin/env bash /tmp/restart_nfs_daemon.sh
+      listen: "restart ceph nfss"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - nfs_group_name in group_names
+        - not containerized_deployment
+        - hostvars[item]['_nfs_handler_called'] | default(False)
+        - nfs_socket_stat.rc == 0
+      with_items: "{{ groups[nfs_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: restart ceph nfs daemon(s) - container
+      command: /usr/bin/env bash /tmp/restart_nfs_daemon.sh
+      listen: "restart ceph nfss"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - nfs_group_name in group_names
+        - containerized_deployment
+        - ceph_nfs_container_stat.get('rc') == 0
+        - hostvars[item]['_nfs_handler_called'] | default(False)
+        - ceph_nfs_container_stat.get('stdout_lines', [])|length != 0
+      with_items: "{{ groups[nfs_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: set _nfs_handler_called after restart
+      set_fact:
+         _nfs_handler_called: False
+      listen: "restart ceph nfss"
+
+    - name: set _rbdmirror_handler_called before restart
+      set_fact:
+         _rbdmirror_handler_called: True
+      listen: "restart ceph rbdmirrors"
+
+    - name: copy rbd mirror restart script
+      template:
+        src: restart_rbd_mirror_daemon.sh.j2
+        dest: /tmp/restart_rbd_mirror_daemon.sh
+        owner: root
+        group: root
+        mode: 0750
+      listen: "restart ceph rbdmirrors"
+      when:
+        - rbdmirror_group_name in group_names
+
+    - name: restart ceph rbd mirror daemon(s) - non container
+      command: /usr/bin/env bash /tmp/restart_rbd_mirror_daemon.sh
+      listen: "restart ceph rbdmirrors"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - rbdmirror_group_name in group_names
+        - not containerized_deployment
+        - hostvars[item]['_rbdmirror_handler_called'] | default(False)
+        - rbd_mirror_socket_stat.rc == 0
+      with_items: "{{ groups[rbdmirror_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: restart ceph rbd mirror daemon(s) - container
+      command: /usr/bin/env bash /tmp/restart_rbd_mirror_daemon.sh
+      listen: "restart ceph rbdmirrors"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - rbdmirror_group_name in group_names
+        - containerized_deployment
+        - ceph_rbd_mirror_container_stat.get('rc') == 0
+        - hostvars[item]['_rbdmirror_handler_called'] | default(False)
+        - ceph_rbd_mirror_container_stat.get('stdout_lines', [])|length != 0
+      with_items: "{{ groups[rbdmirror_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: set _rbdmirror_handler_called after restart
+      set_fact:
+         _rbdmirror_handler_called: False
+      listen: "restart ceph rbdmirrors"
+
+    - name: set _mgr_handler_called before restart
+      set_fact:
+         _mgr_handler_called: True
+      listen: "restart ceph mgrs"
+
+    - name: copy mgr restart script
+      template:
+        src: restart_mgr_daemon.sh.j2
+        dest: /tmp/restart_mgr_daemon.sh
+        owner: root
+        group: root
+        mode: 0750
+      listen: "restart ceph mgrs"
+      when:
+        - mgr_group_name in group_names
+
+    - name: restart ceph mgr daemon(s) - non container
+      command: /usr/bin/env bash /tmp/restart_mgr_daemon.sh
+      listen: "restart ceph mgrs"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - mgr_group_name in group_names
+        - not containerized_deployment
+        - hostvars[item]['_mgr_handler_called'] | default(False)
+        - mgr_socket_stat.rc == 0
+        - not rolling_update
+      with_items: "{{ groups[mgr_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: restart ceph mgr daemon(s) - container
+      command: /usr/bin/env bash /tmp/restart_mgr_daemon.sh
+      listen: "restart ceph mgrs"
+      when:
+        # We do not want to run these checks on initial deployment (`socket.rc == 0`)
+        - mgr_group_name in group_names
+        - containerized_deployment
+        - ceph_mgr_container_stat.get('rc') == 0
+        - hostvars[item]['_mgr_handler_called'] | default(False)
+        - ceph_mgr_container_stat.get('stdout_lines', [])|length != 0
+        - not rolling_update
+      with_items: "{{ groups[mgr_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: set _mgr_handler_called after restart
+      set_fact:
+         _mgr_handler_called: False
+      listen: "restart ceph mgrs"
+
+    - name: set _tcmu_runner_handler_called before restart
+      set_fact:
+         _tcmu_runner_handler_called: True
+      listen: "restart ceph tcmu-runner"
+
+    - name: copy tcmu-runner restart script
+      template:
+        src: restart_tcmu_runner.sh.j2
+        dest: /tmp/restart_tcmu_runner.sh
+        owner: root
+        group: root
+        mode: 0750
+      listen: "restart ceph tcmu-runner"
+      when:
+        - iscsi_gw_group_name in group_names
+
+    - name: restart tcmu-runner
+      command: /usr/bin/env bash /tmp/restart_tcmu_runner.sh
+      listen: "restart ceph tcmu-runner"
+      when:
+        - iscsi_gw_group_name in group_names
+        - ceph_tcmu_runner_stat.get('rc') == 0
+        - hostvars[item]['_tcmu_runner_handler_called'] | default(False)
+        - ceph_tcmu_runner_stat.get('stdout_lines', [])|length != 0
+      with_items: "{{ groups[iscsi_gw_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: set _tcmu_runner_handler_called after restart
+      set_fact:
+         _tcmu_runner_handler_called: False
+      listen: "restart ceph tcmu-runner"
+
+    - name: set _rbd_target_gw_handler_called before restart
+      set_fact:
+         _rbd_target_gw_handler_called: True
+      listen: "restart ceph rbd-target-gw"
+
+    - name: copy rbd-target-gw restart script
+      template:
+        src: restart_rbd_target_gw.sh.j2
+        dest: /tmp/restart_rbd_target_gw.sh
+        owner: root
+        group: root
+        mode: 0750
+      listen: "restart ceph rbd-target-gw"
+      when:
+        - iscsi_gw_group_name in group_names
+
+    - name: restart rbd-target-gw
+      command: /usr/bin/env bash /tmp/restart_rbd_target_gw.sh
+      listen: "restart ceph rbd-target-gw"
+      when:
+        - iscsi_gw_group_name in group_names
+        - ceph_rbd_target_gw_stat.get('rc') == 0
+        - hostvars[item]['_rbd_target_gw_handler_called'] | default(False)
+        - ceph_rbd_target_gw_stat.get('stdout_lines', [])|length != 0
+      with_items: "{{ groups[iscsi_gw_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: set _rbd_target_gw_handler_called after restart
+      set_fact:
+         _rbd_target_gw_handler_called: False
+      listen: "restart ceph rbd-target-gw"
+
+    - name: set _rbd_target_api_handler_called before restart
+      set_fact:
+         _rbd_target_api_handler_called: True
+      listen: "restart ceph rbd-target-api"
+
+    - name: copy rbd-target-api restart script
+      template:
+        src: restart_rbd_target_api.sh.j2
+        dest: /tmp/restart_rbd_target_api.sh
+        owner: root
+        group: root
+        mode: 0750
+      listen: "restart ceph rbd-target-api"
+      when:
+        - iscsi_gw_group_name in group_names
+
+    - name: restart rbd-target-api
+      command: /usr/bin/env bash /tmp/restart_rbd_target_api.sh
+      listen: "restart ceph rbd-target-api"
+      when:
+        - iscsi_gw_group_name in group_names
+        - ceph_rbd_target_api_stat.get('rc') == 0
+        - hostvars[item]['_rbd_target_api_handler_called'] | default(False)
+        - ceph_rbd_target_api_stat.get('stdout_lines', [])|length != 0
+      with_items: "{{ groups[iscsi_gw_group_name] }}"
+      delegate_to: "{{ item }}"
+      run_once: True
+
+    - name: set _rbd_target_api_handler_called after restart
+      set_fact:
+         _rbd_target_api_handler_called: False
+      listen: "restart ceph rbd-target-api"