76 lines
3.0 KiB
Python
Executable File
76 lines
3.0 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import amulet
|
|
import re
|
|
import unittest
|
|
from charmhelpers.contrib.amulet.utils import (
|
|
AmuletUtils,
|
|
)
|
|
autils = AmuletUtils()
|
|
|
|
|
|
class TestBasicNRPEExternalMasterDeployment(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.deployment = amulet.Deployment(series='trusty')
|
|
cls.deployment.add('mysql')
|
|
cls.deployment.add('nrpe')
|
|
cls.deployment.configure('nrpe', {'nagios_hostname_type': 'unit',
|
|
'nagios_host_context': 'mygroup'})
|
|
cls.deployment.configure('mysql', {'dataset-size': '10%'})
|
|
cls.deployment.relate('nrpe:nrpe-external-master',
|
|
'mysql:nrpe-external-master')
|
|
try:
|
|
cls.deployment.setup(timeout=900)
|
|
cls.deployment.sentry.wait()
|
|
except amulet.helpers.TimeoutError:
|
|
msg = "Environment wasn't stood up in time"
|
|
amulet.raise_status(amulet.SKIP, msg=msg)
|
|
except:
|
|
raise
|
|
|
|
def test_nrpe_external_master_relation(self):
|
|
"""
|
|
Check nagios_hostname and nagions_host_context are passed to principals
|
|
"""
|
|
nrpe_sentry = self.deployment.sentry['nrpe'][0]
|
|
mysql = self.deployment.sentry['mysql'][0]
|
|
relation = [
|
|
'nrpe-external-master',
|
|
'mysql:nrpe-external-master']
|
|
nagios_hostname = "mygroup-{}".format(
|
|
mysql.info["unit_name"].replace('/', '-'))
|
|
expected = {
|
|
'ingress-address': autils.valid_ip,
|
|
'private-address': autils.valid_ip,
|
|
'nagios_hostname': nagios_hostname,
|
|
'nagios_host_context': 'mygroup'}
|
|
ret = autils.validate_relation_data(nrpe_sentry, relation, expected)
|
|
if ret:
|
|
message = autils.relation_error("nrpe to mysql principal", ret)
|
|
amulet.raise_status(amulet.FAIL, msg=message)
|
|
|
|
def test_exported_nagiosconfig_nrpe_external_master_principal(self):
|
|
"""
|
|
The hostname defined in exported nagios service files matches
|
|
nagios_hostname from the nrpe-external-master relation.
|
|
"""
|
|
mysql = self.deployment.sentry['mysql'][0]
|
|
nagios_hostname = "mygroup-{}".format(
|
|
mysql.info["unit_name"].replace('/', '-'))
|
|
mysql_service_file = "service__mygroup-{}_check_mysql.cfg".format(
|
|
mysql.info["unit_name"].replace('/', '-'))
|
|
content = mysql.file_contents("/var/lib/nagios/export/{}".format(
|
|
mysql_service_file))
|
|
for line in content.split('\n'):
|
|
host_match = re.match('.*host_name\s+([-\w]+)',line)
|
|
if host_match:
|
|
service_hostname = host_match.groups()[0]
|
|
if service_hostname != nagios_hostname:
|
|
message = 'Invalid host_name {} in {}. Expected {}'.format(
|
|
service_hostname, mysql_service_file, nagios_hostname)
|
|
amulet.raise_status(amulet.FAIL, msg=message)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|