/etc/ansible/roles/ceph-ansible/roles/ceph-handler/tasks/handler_osds.yml
---
- name: set _osd_handler_called before restart
  set_fact:
    _osd_handler_called: True

- name: unset noup flag
  command: "{{ hostvars[groups[mon_group_name][0]]['container_exec_cmd'] | default('') }} ceph --cluster {{ cluster }} osd unset noup"
  delegate_to: "{{ groups[mon_group_name][0] }}"
  run_once: true
  changed_when: False

# 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

- name: restart ceph osds daemon(s)
  command: /usr/bin/env bash /tmp/restart_osd_daemon.sh
  when:
    - hostvars[item]['handler_osd_status'] | default(False) | bool
    - handler_health_osd_check | bool
    - hostvars[item]['_osd_handler_called'] | default(False) | bool
  with_items: "{{ groups[osd_group_name] | intersect(ansible_play_batch) }}"
  delegate_to: "{{ item }}"
  run_once: True

- name: set _osd_handler_called after restart
  set_fact:
    _osd_handler_called: False