Bootstrap ceph-mgr daemon

As of the Luminous release, Ceph requires ceph-mgr daemons be run
to have a fully functional cluster. [0]

[0] http://docs.ceph.com/docs/master/mgr/administrator/

Change-Id: Ie8c13f3e7ada000e074d2c4f7d996872cd3ceeef
Closes-bug: #1709061
This commit is contained in:
Corey Bryant 2017-08-08 20:42:01 +00:00
parent fd9efeaac2
commit 3304c79b74
2 changed files with 41 additions and 3 deletions

View File

@ -16,6 +16,7 @@
import os
import subprocess
import socket
import sys
import uuid
@ -225,6 +226,9 @@ def config_changed():
status_set('maintenance', 'Bootstrapping single Ceph MON')
ceph.bootstrap_monitor_cluster(leader_get('monitor-secret'))
ceph.wait_for_bootstrap()
if cmp_pkgrevno('ceph', '12.0.0') >= 0:
status_set('maintenance', 'Bootstrapping single Ceph MGR')
ceph.bootstrap_manager()
def get_mon_hosts():
@ -280,6 +284,9 @@ def mon_relation():
ceph.bootstrap_monitor_cluster(leader_get('monitor-secret'))
ceph.wait_for_bootstrap()
ceph.wait_for_quorum()
if cmp_pkgrevno('ceph', '12.0.0') >= 0:
status_set('maintenance', 'Bootstrapping Ceph MGR')
ceph.bootstrap_manager()
# If we can and want to
if is_leader() and config('customize-failure-domain'):
# But only if the environment supports it
@ -547,6 +554,8 @@ def start():
service_restart('ceph-mon')
else:
service_restart('ceph-mon-all')
if cmp_pkgrevno('ceph', '12.0.0') >= 0:
service_restart('ceph-mgr@{}'.format(socket.gethostname()))
@hooks.hook('nrpe-external-master-relation-joined')

View File

@ -1314,6 +1314,27 @@ def bootstrap_monitor_cluster(secret):
os.unlink(keyring)
def bootstrap_manager():
hostname = socket.gethostname()
path = '/var/lib/ceph/mgr/ceph-{}'.format(hostname)
keyring = os.path.join(path, 'keyring')
if os.path.exists(keyring):
log('bootstrap_manager: mgr already initialized.')
else:
mkdir(path, owner=ceph_user(), group=ceph_user())
subprocess.check_call(['ceph', 'auth', 'get-or-create',
'mgr.{}'.format(hostname), 'mon',
'allow profile mgr', 'osd', 'allow *',
'mds', 'allow *', '--out-file',
keyring])
chownr(path, ceph_user(), ceph_user())
unit = 'ceph-mgr@{}'.format(hostname)
subprocess.check_call(['systemctl', 'enable', unit])
service_restart(unit)
def update_monfs():
hostname = socket.gethostname()
monfs = '/var/lib/ceph/mon/ceph-{}'.format(hostname)
@ -1355,16 +1376,17 @@ def find_least_used_journal(journal_devices):
def osdize(dev, osd_format, osd_journal, reformat_osd=False,
ignore_errors=False, encrypt=False):
ignore_errors=False, encrypt=False, bluestore=False):
if dev.startswith('/dev'):
osdize_dev(dev, osd_format, osd_journal,
reformat_osd, ignore_errors, encrypt)
reformat_osd, ignore_errors, encrypt,
bluestore)
else:
osdize_dir(dev, encrypt)
def osdize_dev(dev, osd_format, osd_journal, reformat_osd=False,
ignore_errors=False, encrypt=False):
ignore_errors=False, encrypt=False, bluestore=False):
if not os.path.exists(dev):
log('Path {} does not exist - bailing'.format(dev))
return
@ -1392,9 +1414,16 @@ def osdize_dev(dev, osd_format, osd_journal, reformat_osd=False,
if osd_format:
cmd.append('--fs-type')
cmd.append(osd_format)
if reformat_osd:
cmd.append('--zap-disk')
# NOTE(jamespage): enable experimental bluestore support
if cmp_pkgrevno('ceph', '10.2.0') >= 0 and bluestore:
cmd.append('--bluestore')
cmd.append(dev)
if osd_journal:
least_used = find_least_used_journal(osd_journal)
cmd.append(least_used)