Charmed-Kubernetes/nrpe/tests/14-basic-nrpe-external-master

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()