Sync charm-helpers
Change-Id: Iaa29be49b44c76c4c89cef17b3212502b09d65ac
This commit is contained in:
parent
acd93c4395
commit
609631e658
|
@ -305,7 +305,7 @@ class NRPE(object):
|
|||
|
||||
# update-status hooks are configured to firing every 5 minutes by
|
||||
# default. When nagios-nrpe-server is restarted, the nagios server
|
||||
# reports checks failing causing unneccessary alerts. Let's not restart
|
||||
# reports checks failing causing unnecessary alerts. Let's not restart
|
||||
# on update-status hooks.
|
||||
if not hook_name() == 'update-status':
|
||||
service('restart', 'nagios-nrpe-server')
|
||||
|
@ -416,15 +416,20 @@ def copy_nrpe_checks(nrpe_files_dir=None):
|
|||
|
||||
"""
|
||||
NAGIOS_PLUGINS = '/usr/local/lib/nagios/plugins'
|
||||
default_nrpe_files_dir = os.path.join(
|
||||
os.getenv('CHARM_DIR'),
|
||||
'hooks',
|
||||
'charmhelpers',
|
||||
'contrib',
|
||||
'openstack',
|
||||
'files')
|
||||
if not nrpe_files_dir:
|
||||
nrpe_files_dir = default_nrpe_files_dir
|
||||
if nrpe_files_dir is None:
|
||||
# determine if "charmhelpers" is in CHARMDIR or CHARMDIR/hooks
|
||||
for segment in ['.', 'hooks']:
|
||||
nrpe_files_dir = os.path.abspath(os.path.join(
|
||||
os.getenv('CHARM_DIR'),
|
||||
segment,
|
||||
'charmhelpers',
|
||||
'contrib',
|
||||
'openstack',
|
||||
'files'))
|
||||
if os.path.isdir(nrpe_files_dir):
|
||||
break
|
||||
else:
|
||||
raise RuntimeError("Couldn't find charmhelpers directory")
|
||||
if not os.path.exists(NAGIOS_PLUGINS):
|
||||
os.makedirs(NAGIOS_PLUGINS)
|
||||
for fname in glob.glob(os.path.join(nrpe_files_dir, "check_*")):
|
||||
|
|
|
@ -73,6 +73,8 @@ from charmhelpers.core.host import (
|
|||
service_running,
|
||||
service_pause,
|
||||
service_resume,
|
||||
service_stop,
|
||||
service_start,
|
||||
restart_on_change_helper,
|
||||
)
|
||||
from charmhelpers.fetch import (
|
||||
|
@ -116,6 +118,7 @@ OPENSTACK_RELEASES = (
|
|||
'pike',
|
||||
'queens',
|
||||
'rocky',
|
||||
'stein',
|
||||
)
|
||||
|
||||
UBUNTU_OPENSTACK_RELEASE = OrderedDict([
|
||||
|
@ -134,6 +137,7 @@ UBUNTU_OPENSTACK_RELEASE = OrderedDict([
|
|||
('artful', 'pike'),
|
||||
('bionic', 'queens'),
|
||||
('cosmic', 'rocky'),
|
||||
('disco', 'stein'),
|
||||
])
|
||||
|
||||
|
||||
|
@ -153,6 +157,7 @@ OPENSTACK_CODENAMES = OrderedDict([
|
|||
('2017.2', 'pike'),
|
||||
('2018.1', 'queens'),
|
||||
('2018.2', 'rocky'),
|
||||
('2019.1', 'stein'),
|
||||
])
|
||||
|
||||
# The ugly duckling - must list releases oldest to newest
|
||||
|
@ -187,6 +192,8 @@ SWIFT_CODENAMES = OrderedDict([
|
|||
['2.16.0', '2.17.0']),
|
||||
('rocky',
|
||||
['2.18.0', '2.19.0']),
|
||||
('stein',
|
||||
['2.19.0']),
|
||||
])
|
||||
|
||||
# >= Liberty version->codename mapping
|
||||
|
@ -199,6 +206,7 @@ PACKAGE_CODENAMES = {
|
|||
('16', 'pike'),
|
||||
('17', 'queens'),
|
||||
('18', 'rocky'),
|
||||
('19', 'stein'),
|
||||
]),
|
||||
'neutron-common': OrderedDict([
|
||||
('7', 'liberty'),
|
||||
|
@ -208,6 +216,7 @@ PACKAGE_CODENAMES = {
|
|||
('11', 'pike'),
|
||||
('12', 'queens'),
|
||||
('13', 'rocky'),
|
||||
('14', 'stein'),
|
||||
]),
|
||||
'cinder-common': OrderedDict([
|
||||
('7', 'liberty'),
|
||||
|
@ -217,6 +226,7 @@ PACKAGE_CODENAMES = {
|
|||
('11', 'pike'),
|
||||
('12', 'queens'),
|
||||
('13', 'rocky'),
|
||||
('14', 'stein'),
|
||||
]),
|
||||
'keystone': OrderedDict([
|
||||
('8', 'liberty'),
|
||||
|
@ -226,6 +236,7 @@ PACKAGE_CODENAMES = {
|
|||
('12', 'pike'),
|
||||
('13', 'queens'),
|
||||
('14', 'rocky'),
|
||||
('15', 'stein'),
|
||||
]),
|
||||
'horizon-common': OrderedDict([
|
||||
('8', 'liberty'),
|
||||
|
@ -235,6 +246,7 @@ PACKAGE_CODENAMES = {
|
|||
('12', 'pike'),
|
||||
('13', 'queens'),
|
||||
('14', 'rocky'),
|
||||
('15', 'stein'),
|
||||
]),
|
||||
'ceilometer-common': OrderedDict([
|
||||
('5', 'liberty'),
|
||||
|
@ -244,6 +256,7 @@ PACKAGE_CODENAMES = {
|
|||
('9', 'pike'),
|
||||
('10', 'queens'),
|
||||
('11', 'rocky'),
|
||||
('12', 'stein'),
|
||||
]),
|
||||
'heat-common': OrderedDict([
|
||||
('5', 'liberty'),
|
||||
|
@ -253,6 +266,7 @@ PACKAGE_CODENAMES = {
|
|||
('9', 'pike'),
|
||||
('10', 'queens'),
|
||||
('11', 'rocky'),
|
||||
('12', 'stein'),
|
||||
]),
|
||||
'glance-common': OrderedDict([
|
||||
('11', 'liberty'),
|
||||
|
@ -262,6 +276,7 @@ PACKAGE_CODENAMES = {
|
|||
('15', 'pike'),
|
||||
('16', 'queens'),
|
||||
('17', 'rocky'),
|
||||
('18', 'stein'),
|
||||
]),
|
||||
'openstack-dashboard': OrderedDict([
|
||||
('8', 'liberty'),
|
||||
|
@ -271,6 +286,7 @@ PACKAGE_CODENAMES = {
|
|||
('12', 'pike'),
|
||||
('13', 'queens'),
|
||||
('14', 'rocky'),
|
||||
('15', 'stein'),
|
||||
]),
|
||||
}
|
||||
|
||||
|
@ -299,7 +315,7 @@ def get_os_codename_install_source(src):
|
|||
rel = ''
|
||||
if src is None:
|
||||
return rel
|
||||
if src in ['distro', 'distro-proposed']:
|
||||
if src in ['distro', 'distro-proposed', 'proposed']:
|
||||
try:
|
||||
rel = UBUNTU_OPENSTACK_RELEASE[ubuntu_rel]
|
||||
except KeyError:
|
||||
|
@ -1303,6 +1319,65 @@ def is_unit_paused_set():
|
|||
return False
|
||||
|
||||
|
||||
def manage_payload_services(action, services=None, charm_func=None):
|
||||
"""Run an action against all services.
|
||||
|
||||
An optional charm_func() can be called. It should raise an Exception to
|
||||
indicate that the function failed. If it was succesfull it should return
|
||||
None or an optional message.
|
||||
|
||||
The signature for charm_func is:
|
||||
charm_func() -> message: str
|
||||
|
||||
charm_func() is executed after any services are stopped, if supplied.
|
||||
|
||||
The services object can either be:
|
||||
- None : no services were passed (an empty dict is returned)
|
||||
- a list of strings
|
||||
- A dictionary (optionally OrderedDict) {service_name: {'service': ..}}
|
||||
- An array of [{'service': service_name, ...}, ...]
|
||||
|
||||
:param action: Action to run: pause, resume, start or stop.
|
||||
:type action: str
|
||||
:param services: See above
|
||||
:type services: See above
|
||||
:param charm_func: function to run for custom charm pausing.
|
||||
:type charm_func: f()
|
||||
:returns: Status boolean and list of messages
|
||||
:rtype: (bool, [])
|
||||
:raises: RuntimeError
|
||||
"""
|
||||
actions = {
|
||||
'pause': service_pause,
|
||||
'resume': service_resume,
|
||||
'start': service_start,
|
||||
'stop': service_stop}
|
||||
action = action.lower()
|
||||
if action not in actions.keys():
|
||||
raise RuntimeError(
|
||||
"action: {} must be one of: {}".format(action,
|
||||
', '.join(actions.keys())))
|
||||
services = _extract_services_list_helper(services)
|
||||
messages = []
|
||||
success = True
|
||||
if services:
|
||||
for service in services.keys():
|
||||
rc = actions[action](service)
|
||||
if not rc:
|
||||
success = False
|
||||
messages.append("{} didn't {} cleanly.".format(service,
|
||||
action))
|
||||
if charm_func:
|
||||
try:
|
||||
message = charm_func()
|
||||
if message:
|
||||
messages.append(message)
|
||||
except Exception as e:
|
||||
success = False
|
||||
messages.append(str(e))
|
||||
return success, messages
|
||||
|
||||
|
||||
def pause_unit(assess_status_func, services=None, ports=None,
|
||||
charm_func=None):
|
||||
"""Pause a unit by stopping the services and setting 'unit-paused'
|
||||
|
@ -1333,20 +1408,10 @@ def pause_unit(assess_status_func, services=None, ports=None,
|
|||
@returns None
|
||||
@raises Exception(message) on an error for action_fail().
|
||||
"""
|
||||
services = _extract_services_list_helper(services)
|
||||
messages = []
|
||||
if services:
|
||||
for service in services.keys():
|
||||
stopped = service_pause(service)
|
||||
if not stopped:
|
||||
messages.append("{} didn't stop cleanly.".format(service))
|
||||
if charm_func:
|
||||
try:
|
||||
message = charm_func()
|
||||
if message:
|
||||
messages.append(message)
|
||||
except Exception as e:
|
||||
message.append(str(e))
|
||||
_, messages = manage_payload_services(
|
||||
'pause',
|
||||
services=services,
|
||||
charm_func=charm_func)
|
||||
set_unit_paused()
|
||||
if assess_status_func:
|
||||
message = assess_status_func()
|
||||
|
@ -1385,20 +1450,10 @@ def resume_unit(assess_status_func, services=None, ports=None,
|
|||
@returns None
|
||||
@raises Exception(message) on an error for action_fail().
|
||||
"""
|
||||
services = _extract_services_list_helper(services)
|
||||
messages = []
|
||||
if services:
|
||||
for service in services.keys():
|
||||
started = service_resume(service)
|
||||
if not started:
|
||||
messages.append("{} didn't start cleanly.".format(service))
|
||||
if charm_func:
|
||||
try:
|
||||
message = charm_func()
|
||||
if message:
|
||||
messages.append(message)
|
||||
except Exception as e:
|
||||
message.append(str(e))
|
||||
_, messages = manage_payload_services(
|
||||
'resume',
|
||||
services=services,
|
||||
charm_func=charm_func)
|
||||
clear_unit_paused()
|
||||
if assess_status_func:
|
||||
message = assess_status_func()
|
||||
|
|
|
@ -36,8 +36,10 @@ def loopback_devices():
|
|||
'''
|
||||
loopbacks = {}
|
||||
cmd = ['losetup', '-a']
|
||||
devs = [d.strip().split(' ') for d in
|
||||
check_output(cmd).splitlines() if d != '']
|
||||
output = check_output(cmd)
|
||||
if six.PY3:
|
||||
output = output.decode('utf-8')
|
||||
devs = [d.strip().split(' ') for d in output.splitlines() if d != '']
|
||||
for dev, _, f in devs:
|
||||
loopbacks[dev.replace(':', '')] = re.search(r'\((\S+)\)', f).groups()[0]
|
||||
return loopbacks
|
||||
|
|
|
@ -166,6 +166,14 @@ CLOUD_ARCHIVE_POCKETS = {
|
|||
'rocky/proposed': 'bionic-proposed/rocky',
|
||||
'bionic-rocky/proposed': 'bionic-proposed/rocky',
|
||||
'bionic-proposed/rocky': 'bionic-proposed/rocky',
|
||||
# Stein
|
||||
'stein': 'bionic-updates/stein',
|
||||
'bionic-stein': 'bionic-updates/stein',
|
||||
'bionic-stein/updates': 'bionic-updates/stein',
|
||||
'bionic-updates/stein': 'bionic-updates/stein',
|
||||
'stein/proposed': 'bionic-proposed/stein',
|
||||
'bionic-stein/proposed': 'bionic-proposed/stein',
|
||||
'bionic-proposed/stein': 'bionic-proposed/stein',
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue