Merge "ceph: mgr-restful-plugin restarts on controller unlock"
This commit is contained in:
commit
7a8add1636
@ -25,10 +25,12 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
import os
|
import os
|
||||||
|
import shutil
|
||||||
import signal
|
import signal
|
||||||
import socket
|
import socket
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
import tempfile
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import daemon
|
import daemon
|
||||||
@ -73,6 +75,7 @@ class Config(object):
|
|||||||
self.ceph_mgr_service = '/usr/bin/ceph-mgr'
|
self.ceph_mgr_service = '/usr/bin/ceph-mgr'
|
||||||
self.ceph_mgr_cluster = 'ceph'
|
self.ceph_mgr_cluster = 'ceph'
|
||||||
self.ceph_mgr_rundir = '/var/run/ceph/mgr'
|
self.ceph_mgr_rundir = '/var/run/ceph/mgr'
|
||||||
|
self.ceph_mgr_confdir = '/var/lib/ceph/mgr'
|
||||||
self.ceph_mgr_identity = socket.gethostname()
|
self.ceph_mgr_identity = socket.gethostname()
|
||||||
|
|
||||||
self.service_name = 'mgr-restful-plugin'
|
self.service_name = 'mgr-restful-plugin'
|
||||||
@ -555,10 +558,10 @@ class ServiceMonitor(object):
|
|||||||
# steps to configure/start ceph-mgr and restful plugin
|
# steps to configure/start ceph-mgr and restful plugin
|
||||||
self.ceph_fsid_get()
|
self.ceph_fsid_get()
|
||||||
self.ceph_mgr_auth_create()
|
self.ceph_mgr_auth_create()
|
||||||
self.ceph_mgr_start()
|
|
||||||
self.restful_plugin_set_server_port()
|
self.restful_plugin_set_server_port()
|
||||||
self.restful_plugin_enable()
|
|
||||||
self.restful_plugin_create_certificate()
|
self.restful_plugin_create_certificate()
|
||||||
|
self.ceph_mgr_start()
|
||||||
|
self.restful_plugin_enable()
|
||||||
self.restful_plugin_create_admin_key()
|
self.restful_plugin_create_admin_key()
|
||||||
self.restful_plugin_get_url()
|
self.restful_plugin_get_url()
|
||||||
self.restful_plugin_get_certificate()
|
self.restful_plugin_get_certificate()
|
||||||
@ -651,7 +654,7 @@ class ServiceMonitor(object):
|
|||||||
|
|
||||||
def ceph_mgr_has_auth(self):
|
def ceph_mgr_has_auth(self):
|
||||||
path = '{}/ceph-{}'.format(
|
path = '{}/ceph-{}'.format(
|
||||||
CONFIG.ceph_mgr_rundir, CONFIG.ceph_mgr_identity)
|
CONFIG.ceph_mgr_confdir, CONFIG.ceph_mgr_identity)
|
||||||
try:
|
try:
|
||||||
os.makedirs(path)
|
os.makedirs(path)
|
||||||
except OSError as err:
|
except OSError as err:
|
||||||
@ -718,7 +721,7 @@ class ServiceMonitor(object):
|
|||||||
with open(os.devnull, 'wb') as null:
|
with open(os.devnull, 'wb') as null:
|
||||||
out = self.run_with_timeout(
|
out = self.run_with_timeout(
|
||||||
['/usr/bin/ceph', 'config-key', 'get',
|
['/usr/bin/ceph', 'config-key', 'get',
|
||||||
'config/mgr/mgr/restful/server_port'],
|
'mgr/restful/server_port'],
|
||||||
CONFIG.ceph_cli_timeout_sec, stderr=null)
|
CONFIG.ceph_cli_timeout_sec, stderr=null)
|
||||||
if out == str(CONFIG.restful_plugin_port):
|
if out == str(CONFIG.restful_plugin_port):
|
||||||
return True
|
return True
|
||||||
@ -735,7 +738,7 @@ class ServiceMonitor(object):
|
|||||||
return
|
return
|
||||||
LOG.info('Set restful plugin port=%d', CONFIG.restful_plugin_port)
|
LOG.info('Set restful plugin port=%d', CONFIG.restful_plugin_port)
|
||||||
self.run_with_timeout(
|
self.run_with_timeout(
|
||||||
['/usr/bin/ceph', 'config', 'set', 'mgr',
|
['/usr/bin/ceph', 'config-key', 'set',
|
||||||
'mgr/restful/server_port', str(CONFIG.restful_plugin_port)],
|
'mgr/restful/server_port', str(CONFIG.restful_plugin_port)],
|
||||||
CONFIG.ceph_cli_timeout_sec)
|
CONFIG.ceph_cli_timeout_sec)
|
||||||
|
|
||||||
@ -761,10 +764,22 @@ class ServiceMonitor(object):
|
|||||||
|
|
||||||
def restful_plugin_has_certificate(self):
|
def restful_plugin_has_certificate(self):
|
||||||
try:
|
try:
|
||||||
|
self.run_with_timeout(
|
||||||
|
['/usr/bin/ceph', 'config-key', 'get',
|
||||||
|
'config/mgr/restful/{}/crt'.format(CONFIG.ceph_mgr_identity)],
|
||||||
|
CONFIG.ceph_cli_timeout_sec)
|
||||||
self.run_with_timeout(
|
self.run_with_timeout(
|
||||||
['/usr/bin/ceph', 'config-key', 'get',
|
['/usr/bin/ceph', 'config-key', 'get',
|
||||||
'mgr/restful/{}/crt'.format(CONFIG.ceph_mgr_identity)],
|
'mgr/restful/{}/crt'.format(CONFIG.ceph_mgr_identity)],
|
||||||
CONFIG.ceph_cli_timeout_sec)
|
CONFIG.ceph_cli_timeout_sec)
|
||||||
|
self.run_with_timeout(
|
||||||
|
['/usr/bin/ceph', 'config-key', 'get',
|
||||||
|
'config/mgr/restful/{}/key'.format(CONFIG.ceph_mgr_identity)],
|
||||||
|
CONFIG.ceph_cli_timeout_sec)
|
||||||
|
self.run_with_timeout(
|
||||||
|
['/usr/bin/ceph', 'config-key', 'get',
|
||||||
|
'/mgr/restful/{}/key'.format(CONFIG.ceph_mgr_identity)],
|
||||||
|
CONFIG.ceph_cli_timeout_sec)
|
||||||
return True
|
return True
|
||||||
except CommandFailed:
|
except CommandFailed:
|
||||||
pass
|
pass
|
||||||
@ -774,10 +789,42 @@ class ServiceMonitor(object):
|
|||||||
if self.restful_plugin_has_certificate():
|
if self.restful_plugin_has_certificate():
|
||||||
return
|
return
|
||||||
LOG.info('Create restful plugin self signed certificate')
|
LOG.info('Create restful plugin self signed certificate')
|
||||||
self.run_with_timeout(
|
path = tempfile.mkdtemp()
|
||||||
['/usr/bin/ceph', 'restful',
|
try:
|
||||||
'create-self-signed-cert'],
|
try:
|
||||||
CONFIG.ceph_cli_timeout_sec)
|
subprocess.check_call([
|
||||||
|
'/usr/bin/openssl', 'req', '-new', '-nodes', '-x509',
|
||||||
|
'-subj', '/O=IT/CN=ceph-restful', '-days', '3650',
|
||||||
|
'-out', os.path.join(path, 'crt'),
|
||||||
|
'-keyout', os.path.join(path, 'key'),
|
||||||
|
'-extensions', 'v3_ca'])
|
||||||
|
except subprocess.CalledProcessError as err:
|
||||||
|
raise CommandFailed(
|
||||||
|
command=' '.join(err.cmd),
|
||||||
|
reason='failed to generate self-signed certificate: {}'.format(str(err)),
|
||||||
|
out=err.output)
|
||||||
|
self.run_with_timeout(
|
||||||
|
['/usr/bin/ceph', 'config-key', 'set',
|
||||||
|
'config/mgr/restful/{}/crt'.format(CONFIG.ceph_mgr_identity),
|
||||||
|
'-i', os.path.join(path, 'crt')],
|
||||||
|
CONFIG.ceph_cli_timeout_sec)
|
||||||
|
self.run_with_timeout(
|
||||||
|
['/usr/bin/ceph', 'config-key', 'set',
|
||||||
|
'mgr/restful/{}/crt'.format(CONFIG.ceph_mgr_identity),
|
||||||
|
'-i', os.path.join(path, 'crt')],
|
||||||
|
CONFIG.ceph_cli_timeout_sec)
|
||||||
|
self.run_with_timeout(
|
||||||
|
['/usr/bin/ceph', 'config-key', 'set',
|
||||||
|
'config/mgr/restful/{}/key'.format(CONFIG.ceph_mgr_identity),
|
||||||
|
'-i', os.path.join(path, 'key')],
|
||||||
|
CONFIG.ceph_cli_timeout_sec)
|
||||||
|
self.run_with_timeout(
|
||||||
|
['/usr/bin/ceph', 'config-key', 'set',
|
||||||
|
'mgr/restful/{}/key'.format(CONFIG.ceph_mgr_identity),
|
||||||
|
'-i', os.path.join(path, 'key')],
|
||||||
|
CONFIG.ceph_cli_timeout_sec)
|
||||||
|
finally:
|
||||||
|
shutil.rmtree(path)
|
||||||
|
|
||||||
def restful_plugin_is_enabled(self):
|
def restful_plugin_is_enabled(self):
|
||||||
command = ['/usr/bin/ceph', 'mgr', 'module', 'ls',
|
command = ['/usr/bin/ceph', 'mgr', 'module', 'ls',
|
||||||
@ -825,7 +872,7 @@ class ServiceMonitor(object):
|
|||||||
|
|
||||||
def restful_plugin_get_certificate(self):
|
def restful_plugin_get_certificate(self):
|
||||||
command = ['/usr/bin/ceph', 'config-key', 'get',
|
command = ['/usr/bin/ceph', 'config-key', 'get',
|
||||||
'mgr/restful/controller-0/crt']
|
'config/mgr/restful/{}/crt'.format(CONFIG.ceph_mgr_identity)]
|
||||||
with open(os.devnull, 'wb') as null:
|
with open(os.devnull, 'wb') as null:
|
||||||
certificate = self.run_with_timeout(
|
certificate = self.run_with_timeout(
|
||||||
command, CONFIG.ceph_cli_timeout_sec, stderr=null)
|
command, CONFIG.ceph_cli_timeout_sec, stderr=null)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user