--- # This playbook does a rolling update for all the Ceph services # Change the value of serial: to adjust the number of server to be updated. # # The four roles that apply to the ceph hosts will be applied: ceph-common, # ceph-mon, ceph-osd and ceph-mds. So any changes to configuration, package updates, etc, # will be applied as part of the rolling update process. # # /!\ DO NOT FORGET TO CHANGE THE RELEASE VERSION FIRST! /!\ - hosts: all tasks: - debug: msg="gather facts on all hosts for following reference" - hosts: mons serial: 1 sudo: True pre_tasks: - name: Compress the store as much as possible command: ceph tell mon.{{ ansible_hostname }} compact roles: - ceph-common - ceph-mon post_tasks: - name: Check if sysvinit stat: > path=/var/lib/ceph/mon/ceph-{{ ansible_hostname }}/sysvinit register: monsysvinit - name: Check if upstart stat: > path=/var/lib/ceph/mon/ceph-{{ ansible_hostname }}/upstart register: monupstart - name: Restart the monitor after compaction (Upstart) service: > name=ceph-mon state=restarted args=id={{ ansible_hostname }} when: monupstart.stat.exists == True - name: Restart the monitor after compaction (Sysvinit) service: > name=ceph state=restarted args=mon when: monsysvinit.stat.exists == True - name: restart monitor(s) service: > name=ceph state=restarted args=mon - name: select a running monitor set_fact: mon_host={{ item }} with_items: groups.mons when: item != inventory_hostname - name: Waiting for the monitor to join the quorum... shell: > ceph -s | grep monmap | sed 's/.*quorum//' | egrep -sq {{ ansible_hostname }} register: result until: result.rc == 0 retries: 5 delay: 10 delegate_to: "{{ mon_host }}" - hosts: osds serial: 1 sudo: True pre_tasks: - name: Set the noout flag command: ceph osd set {{ item }} with_items: - noout - noscrub - nodeep-scrub delegate_to: "{{ groups.mons[0] }}" roles: - ceph-common - ceph-osd post_tasks: - name: Check if sysvinit shell: stat /var/lib/ceph/osd/ceph-*/sysvinit register: osdsysvinit ignore_errors: True - name: Check if upstart shell: stat /var/lib/ceph/osd/ceph-*/upstart register: osdupstart ignore_errors: True - name: Gracefully stop the OSDs (Upstart) service: > name=ceph-osd-all state=restarted when: osdupstart.rc == 0 - name: Gracefully stop the OSDs (Sysvinit) service: > name=ceph state=restarted args=osd when: osdsysvinit.rc == 0 - name: Waiting for clean PGs... shell: > test "$(ceph pg stat | sed 's/^.*pgs://;s/active+clean.*//;s/ //')" -eq "$(ceph pg stat | sed 's/pgs.*//;s/^.*://;s/ //')" && ceph health | egrep -sq "HEALTH_OK|HEALTH_WARN" register: result until: result.rc == 0 retries: 10 delay: 10 delegate_to: "{{ groups.mons[0] }}" - name: Unset the noout flag command: ceph osd unset {{ item }} with_items: - noout - noscrub - nodeep-scrub delegate_to: "{{ groups.mons[0] }}" - hosts: mdss serial: 1 sudo: True roles: - ceph-common - ceph-mds post_tasks: - name: Check if sysvinit stat: > path=/var/lib/ceph/mon/ceph-{{ ansible_hostname }}/sysvinit register: mdssysvinit - name: Check if upstart stat: > path=/var/lib/ceph/mon/ceph-{{ ansible_hostname }}/upstart register: mdsupstart - name: Restart the metadata server (Upstart) service: > name=ceph-mds state=restarted args=id={{ ansible_hostname }} when: mdsupstart.stat.exists == True - name: Restart the metadata server (Sysvinit) service: > name=ceph state=restarted args=mds when: mdssysvinit.stat.exists == True - hosts: rgws serial: 1 sudo: True roles: - ceph-common - ceph-radosgw post_tasks: - name: restart rados gateway server(s) service: > name={{ item }} state=restarted with_items: - radosgw when: radosgw_frontend == 'civetweb' - name: restart rados gateway server(s) service: > name={{ item }} state=restarted with_items: - apache2 - radosgw when: radosgw_frontend == 'apache'