Enable Ocata Amulet Tests
- Add Zesty as a supported series to metadata.yaml. - Sync charm helpers to get Juju 2.x amulet compatibility. - Keeping Zesty-Ocata Amulet test definitions turned off until the metadata.yaml changes propagate to the charm store. - Resync tox.ini to resolve amulet test failures. Change-Id: I8f8ccdaf283ba1fa3d3a0efc0014ce49199ddb2a
This commit is contained in:
parent
fd6097fcb2
commit
81f1142b6a
|
@ -227,6 +227,7 @@ class NRPE(object):
|
|||
nagios_logdir = '/var/log/nagios'
|
||||
nagios_exportdir = '/var/lib/nagios/export'
|
||||
nrpe_confdir = '/etc/nagios/nrpe.d'
|
||||
homedir = '/var/lib/nagios' # home dir provided by nagios-nrpe-server
|
||||
|
||||
def __init__(self, hostname=None, primary=True):
|
||||
super(NRPE, self).__init__()
|
||||
|
@ -369,7 +370,7 @@ def add_init_service_checks(nrpe, services, unit_name, immediate_check=True):
|
|||
)
|
||||
elif os.path.exists(sysv_init):
|
||||
cronpath = '/etc/cron.d/nagios-service-check-%s' % svc
|
||||
checkpath = '/var/lib/nagios/service-check-%s.txt' % svc
|
||||
checkpath = '%s/service-check-%s.txt' % (nrpe.homedir, svc)
|
||||
croncmd = (
|
||||
'/usr/local/lib/nagios/plugins/check_exit_status.pl '
|
||||
'-s /etc/init.d/%s status' % svc
|
||||
|
@ -383,7 +384,9 @@ def add_init_service_checks(nrpe, services, unit_name, immediate_check=True):
|
|||
description='service check {%s}' % unit_name,
|
||||
check_cmd='check_status_file.py -f %s' % checkpath,
|
||||
)
|
||||
if immediate_check:
|
||||
# if /var/lib/nagios doesn't exist open(checkpath, 'w') will fail
|
||||
# (LP: #1670223).
|
||||
if immediate_check and os.path.isdir(nrpe.homedir):
|
||||
f = open(checkpath, 'w')
|
||||
subprocess.call(
|
||||
croncmd.split(),
|
||||
|
|
|
@ -35,16 +35,15 @@ from charmhelpers.core.hookenv import (
|
|||
DEBUG,
|
||||
INFO,
|
||||
WARNING,
|
||||
leader_get,
|
||||
leader_set,
|
||||
is_leader,
|
||||
)
|
||||
from charmhelpers.fetch import (
|
||||
apt_install,
|
||||
apt_update,
|
||||
filter_installed_packages,
|
||||
)
|
||||
from charmhelpers.contrib.peerstorage import (
|
||||
peer_store,
|
||||
peer_retrieve,
|
||||
)
|
||||
from charmhelpers.contrib.network.ip import get_host_ip
|
||||
|
||||
try:
|
||||
|
@ -61,14 +60,14 @@ except ImportError:
|
|||
class MySQLHelper(object):
|
||||
|
||||
def __init__(self, rpasswdf_template, upasswdf_template, host='localhost',
|
||||
migrate_passwd_to_peer_relation=True,
|
||||
migrate_passwd_to_leader_storage=True,
|
||||
delete_ondisk_passwd_file=True):
|
||||
self.host = host
|
||||
# Password file path templates
|
||||
self.root_passwd_file_template = rpasswdf_template
|
||||
self.user_passwd_file_template = upasswdf_template
|
||||
|
||||
self.migrate_passwd_to_peer_relation = migrate_passwd_to_peer_relation
|
||||
self.migrate_passwd_to_leader_storage = migrate_passwd_to_leader_storage
|
||||
# If we migrate we have the option to delete local copy of root passwd
|
||||
self.delete_ondisk_passwd_file = delete_ondisk_passwd_file
|
||||
|
||||
|
@ -157,13 +156,18 @@ class MySQLHelper(object):
|
|||
finally:
|
||||
cursor.close()
|
||||
|
||||
def migrate_passwords_to_peer_relation(self, excludes=None):
|
||||
"""Migrate any passwords storage on disk to cluster peer relation."""
|
||||
def migrate_passwords_to_leader_storage(self, excludes=None):
|
||||
"""Migrate any passwords storage on disk to leader storage."""
|
||||
if not is_leader():
|
||||
log("Skipping password migration as not the lead unit",
|
||||
level=DEBUG)
|
||||
return
|
||||
dirname = os.path.dirname(self.root_passwd_file_template)
|
||||
path = os.path.join(dirname, '*.passwd')
|
||||
for f in glob.glob(path):
|
||||
if excludes and f in excludes:
|
||||
log("Excluding %s from peer migration" % (f), level=DEBUG)
|
||||
log("Excluding %s from leader storage migration" % (f),
|
||||
level=DEBUG)
|
||||
continue
|
||||
|
||||
key = os.path.basename(f)
|
||||
|
@ -171,7 +175,7 @@ class MySQLHelper(object):
|
|||
_value = passwd.read().strip()
|
||||
|
||||
try:
|
||||
peer_store(key, _value)
|
||||
leader_set(settings={key: _value})
|
||||
|
||||
if self.delete_ondisk_passwd_file:
|
||||
os.unlink(f)
|
||||
|
@ -238,7 +242,7 @@ class MySQLHelper(object):
|
|||
# First check peer relation.
|
||||
try:
|
||||
for key in self.passwd_keys(username):
|
||||
_password = peer_retrieve(key)
|
||||
_password = leader_get(key)
|
||||
if _password:
|
||||
break
|
||||
|
||||
|
@ -255,8 +259,8 @@ class MySQLHelper(object):
|
|||
_password = self.get_mysql_password_on_disk(username, password)
|
||||
|
||||
# Put on wire if required
|
||||
if self.migrate_passwd_to_peer_relation:
|
||||
self.migrate_passwords_to_peer_relation(excludes=excludes)
|
||||
if self.migrate_passwd_to_leader_storage:
|
||||
self.migrate_passwords_to_leader_storage(excludes=excludes)
|
||||
|
||||
return _password
|
||||
|
||||
|
|
|
@ -20,13 +20,19 @@ import socket
|
|||
|
||||
from functools import partial
|
||||
|
||||
from charmhelpers.core.hookenv import unit_get
|
||||
from charmhelpers.fetch import apt_install, apt_update
|
||||
from charmhelpers.core.hookenv import (
|
||||
config,
|
||||
log,
|
||||
network_get_primary_address,
|
||||
unit_get,
|
||||
WARNING,
|
||||
)
|
||||
|
||||
from charmhelpers.core.host import (
|
||||
lsb_release,
|
||||
)
|
||||
|
||||
try:
|
||||
import netifaces
|
||||
except ImportError:
|
||||
|
@ -511,3 +517,40 @@ def port_has_listener(address, port):
|
|||
cmd = ['nc', '-z', address, str(port)]
|
||||
result = subprocess.call(cmd)
|
||||
return not(bool(result))
|
||||
|
||||
|
||||
def assert_charm_supports_ipv6():
|
||||
"""Check whether we are able to support charms ipv6."""
|
||||
if lsb_release()['DISTRIB_CODENAME'].lower() < "trusty":
|
||||
raise Exception("IPv6 is not supported in the charms for Ubuntu "
|
||||
"versions less than Trusty 14.04")
|
||||
|
||||
|
||||
def get_relation_ip(interface, config_override=None):
|
||||
"""Return this unit's IP for the given relation.
|
||||
|
||||
Allow for an arbitrary interface to use with network-get to select an IP.
|
||||
Handle all address selection options including configuration parameter
|
||||
override and IPv6.
|
||||
|
||||
Usage: get_relation_ip('amqp', config_override='access-network')
|
||||
|
||||
@param interface: string name of the relation.
|
||||
@param config_override: string name of the config option for network
|
||||
override. Supports legacy network override configuration parameters.
|
||||
@raises Exception if prefer-ipv6 is configured but IPv6 unsupported.
|
||||
@returns IPv6 or IPv4 address
|
||||
"""
|
||||
|
||||
fallback = get_host_ip(unit_get('private-address'))
|
||||
if config('prefer-ipv6'):
|
||||
assert_charm_supports_ipv6()
|
||||
return get_ipv6_addr()[0]
|
||||
elif config_override and config(config_override):
|
||||
return get_address_in_network(config(config_override),
|
||||
fallback)
|
||||
else:
|
||||
try:
|
||||
return network_get_primary_address(interface)
|
||||
except NotImplementedError:
|
||||
return fallback
|
||||
|
|
|
@ -306,6 +306,8 @@ SYSTEMD_SYSTEM = '/run/systemd/system'
|
|||
|
||||
def init_is_systemd():
|
||||
"""Return True if the host system uses systemd, False otherwise."""
|
||||
if lsb_release()['DISTRIB_CODENAME'] == 'trusty':
|
||||
return False
|
||||
return os.path.isdir(SYSTEMD_SYSTEM)
|
||||
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ tags:
|
|||
- databases
|
||||
series:
|
||||
- xenial
|
||||
- zesty
|
||||
- trusty
|
||||
- yakkety
|
||||
extra-bindings:
|
||||
|
|
7
tox.ini
7
tox.ini
|
@ -14,13 +14,18 @@ install_command =
|
|||
pip install --allow-unverified python-apt {opts} {packages}
|
||||
commands = ostestr {posargs}
|
||||
whitelist_externals = juju
|
||||
passenv = HOME TERM AMULET_*
|
||||
passenv = HOME TERM AMULET_* CS_API_URL
|
||||
|
||||
[testenv:py27]
|
||||
basepython = python2.7
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
|
||||
[testenv:py35]
|
||||
basepython = python3.5
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
|
||||
[testenv:pep8]
|
||||
basepython = python2.7
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
|
|
Loading…
Reference in New Issue