2014-03-04 02:08:51 +08:00
---
# 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.
#
2014-07-08 21:39:42 +08:00
# 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,
2014-03-04 02:08:51 +08:00
# will be applied as part of the rolling update process.
#
# /!\ DO NOT FORGET TO CHANGE THE RELEASE VERSION FIRST! /!\
2015-04-15 03:50:39 +08:00
- hosts : all
tasks :
- debug : msg="gather facts on all hosts for following reference"
2014-03-04 02:08:51 +08:00
- hosts : mons
serial : 1
sudo : True
2015-03-27 01:51:11 +08:00
pre_tasks :
- name : Compress the store as much as possible
command : ceph tell mon.{{ ansible_hostname }} compact
2014-03-04 02:08:51 +08:00
roles :
2015-03-27 01:51:11 +08:00
- ceph-common
- ceph-mon
2014-03-04 02:08:51 +08:00
post_tasks :
2015-03-27 01:51:11 +08:00
- 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
2015-04-17 10:04:52 +08:00
- name : select a running monitor
set_fact : mon_host={{ item }}
with_items : groups.mons
when : item != inventory_hostname
2015-03-27 01:51:11 +08:00
- name : Waiting for the monitor to join the quorum...
shell : >
2015-03-31 04:13:29 +08:00
ceph -s | grep monmap | sed 's/.*quorum//' | egrep -sq {{ ansible_hostname }}
2015-03-27 01:51:11 +08:00
register : result
until : result.rc == 0
retries : 5
delay : 10
2015-04-17 10:04:52 +08:00
delegate_to : "{{ mon_host }}"
2015-03-27 01:51:11 +08:00
2014-03-04 02:08:51 +08:00
- hosts : osds
serial : 1
sudo : True
2015-03-27 01:51:11 +08:00
pre_tasks :
- name : Set the noout flag
2015-04-16 05:23:50 +08:00
command : ceph osd set {{ item }}
with_items :
- noout
- noscrub
- nodeep-scrub
2015-04-14 21:49:53 +08:00
delegate_to : "{{ groups.mons[0] }}"
2015-03-27 01:51:11 +08:00
2014-03-04 02:08:51 +08:00
roles :
2015-03-27 01:51:11 +08:00
- ceph-common
- ceph-osd
2014-03-04 02:08:51 +08:00
post_tasks :
2015-03-27 01:51:11 +08:00
- 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
2015-04-15 03:47:37 +08:00
args=osd
2015-04-14 21:49:24 +08:00
when : osdsysvinit.rc == 0
2015-03-27 01:51:11 +08:00
- name : Waiting for clean PGs...
shell : >
2015-03-31 04:13:29 +08:00
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"
2015-03-27 01:51:11 +08:00
register : result
until : result.rc == 0
retries : 10
delay : 10
2015-04-14 21:49:53 +08:00
delegate_to : "{{ groups.mons[0] }}"
2015-03-27 01:51:11 +08:00
- name : Unset the noout flag
2015-04-16 05:23:50 +08:00
command : ceph osd unset {{ item }}
with_items :
- noout
- noscrub
- nodeep-scrub
2015-04-14 21:49:53 +08:00
delegate_to : "{{ groups.mons[0] }}"
2015-03-27 01:51:11 +08:00
2014-03-04 02:08:51 +08:00
- hosts : mdss
serial : 1
sudo : True
2015-03-27 01:51:11 +08:00
2014-03-04 02:08:51 +08:00
roles :
2015-03-27 01:51:11 +08:00
- ceph-common
- ceph-mds
2014-03-04 02:08:51 +08:00
post_tasks :
2015-03-27 01:51:11 +08:00
- 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'