diff --git a/monasca_setup/detection/plugins/ironic.py b/monasca_setup/detection/plugins/ironic.py index 207430ef..0a0f7c54 100644 --- a/monasca_setup/detection/plugins/ironic.py +++ b/monasca_setup/detection/plugins/ironic.py @@ -9,18 +9,6 @@ class Ironic(monasca_setup.detection.ServicePlugin): """Detect Ironic daemons and setup configuration to monitor them.""" def __init__(self, template_dir, overwrite=True, args=None): - service_api_url = "http://localhost:6385" - if isinstance(args, str): - try: - # Turn 'service_api_url=url' into - # dict {'service_api_url':'url'} - args_dict = dict([item.split('=') for item - in args.split()]) - - if "service_api_url" in args_dict: - service_api_url = args_dict['service_api_url'] - except Exception: - log.exception('Error parsing detection arguments') service_params = { 'args': args, @@ -28,7 +16,7 @@ class Ironic(monasca_setup.detection.ServicePlugin): 'overwrite': overwrite, 'service_name': 'Baremetal', 'process_names': ['ironic-api', 'ironic-conductor'], - 'service_api_url': service_api_url, + 'service_api_url': "http://localhost:6385", 'search_pattern': '.*200 OK.*', } diff --git a/monasca_setup/detection/plugins/trove.py b/monasca_setup/detection/plugins/trove.py index 94dc8e39..efd950ce 100644 --- a/monasca_setup/detection/plugins/trove.py +++ b/monasca_setup/detection/plugins/trove.py @@ -10,26 +10,13 @@ class Trove(monasca_setup.detection.ServicePlugin): def __init__(self, template_dir, overwrite=True, args=None): - service_api_url = "http://localhost:8779" - if isinstance(args, str): - try: - # Turn 'service_api_url=url' into - # dict {'service_api_url':'url'} - args_dict = dict([item.split('=') for item - in args.split()]) - - if "service_api_url" in args_dict: - service_api_url = args_dict['service_api_url'] - except Exception: - log.exception('Error parsing detection arguments') - service_params = { 'args': args, 'template_dir': template_dir, 'overwrite': overwrite, 'service_name': 'database', 'process_names': ['trove-api', 'trove-taskmanager', 'trove-conductor'], - 'service_api_url': service_api_url, + 'service_api_url': "http://localhost:8779", 'search_pattern': '.*v1.*' } diff --git a/monasca_setup/detection/service_plugin.py b/monasca_setup/detection/service_plugin.py index c5414387..a6a04410 100644 --- a/monasca_setup/detection/service_plugin.py +++ b/monasca_setup/detection/service_plugin.py @@ -26,8 +26,32 @@ class ServicePlugin(Plugin): self.process_names = kwargs['process_names'] self.service_api_url = kwargs.get('service_api_url') self.search_pattern = kwargs['search_pattern'] + overwrite = kwargs['overwrite'] + template_dir = kwargs['template_dir'], + if 'args' in kwargs: + args = kwargs['args'] + if isinstance(args, str): + try: + # Turn 'service_api_url=url' into + # dict {'service_api_url':'url'} + args_dict = dict([item.split('=') for item + in args.split()]) - super(ServicePlugin, self).__init__(kwargs['template_dir'], kwargs['overwrite'], kwargs.get('args')) + # Allow args to override all of these parameters + if 'process_names' in args_dict: + self.process_names = args_dict['process_names'].split(',') + if 'service_api_url' in args_dict: + self.service_api_url = args_dict['service_api_url'] + if 'search_pattern' in args_dict: + self.search_pattern = args_dict['search_pattern'] + if 'overwrite' in args_dict: + overwrite = args_dict['overwrite'] + if 'template_dir' in args_dict: + template_dir = args_dict['template_dir'] + except Exception: + log.exception('Error parsing detection arguments') + + super(ServicePlugin, self).__init__(template_dir, overwrite, kwargs.get('args')) def _detect(self): """Run detection. diff --git a/tests/test_service_plugin.py b/tests/test_service_plugin.py new file mode 100644 index 00000000..bf5b4471 --- /dev/null +++ b/tests/test_service_plugin.py @@ -0,0 +1,77 @@ +import monasca_setup.detection +import socket +import unittest + + +from monasca_agent.common.keystone import Keystone + +port_used = 0 +class TestKeystone(unittest.TestCase): + def setUp(self): + global port_used + # Create a server socket so the htto check config gets created + self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + self.s.bind(('', 0)) + self.s.listen(1) + except socket.error as msg: + raise Exception('Bind failed. Message ' + msg[1]) + (host, port_used) = self.s.getsockname() + + def tearDown(self): + self.s.close() + + def test_no_override_(self): + """ Test setting values with no overrides works as expected + """ + args = None + test_plugin = TestPlugin('.', args=args) + test_plugin._detect() + config = test_plugin.build_config() + http_instance = config['http_check']['instances'][0] + url = 'http://localhost:{0}/healthcheck'.format(port_used) + self.assertEquals(http_instance['url'], url) + self.assertEquals(http_instance['match_pattern'], '.*OK.*') + + processes = config['process']['instances'] + self.assertEquals(processes[0]['search_string'], ['nose']) + + def test_override_values(self): + """ Test overriding values using args works + """ + url = 'http://localhost:{0}/othercheck'.format(port_used) + pattern = 'CHECK.*' + args = 'process_names=tox,nose service_api_url=' + args += ' service_api_url=' + url + args += ' search_pattern=' + pattern + test_plugin = TestPlugin('.', args=args) + test_plugin._detect() + config = test_plugin.build_config() + + http_instance = config['http_check']['instances'][0] + self.assertEquals(http_instance['url'], url) + self.assertEquals(http_instance['match_pattern'], pattern) + + processes = config['process']['instances'] + self.assertEquals(processes[0]['search_string'], ['tox']) + self.assertEquals(processes[1]['search_string'], ['nose']) + +class TestPlugin(monasca_setup.detection.ServicePlugin): + + """Test Plugin + + """ + + def __init__(self, template_dir, overwrite=True, args=None): + url = 'http://localhost:{0}/healthcheck'.format(port_used) + service_params = { + 'args': args, + 'template_dir': template_dir, + 'overwrite': overwrite, + 'service_name': 'object-storage', + 'process_names': ['nose'], + 'service_api_url': url, + 'search_pattern': '.*OK.*' + } + + super(TestPlugin, self).__init__(service_params)