From 576cc34fb0182f1f36216e961a5c8d5ff1c653e6 Mon Sep 17 00:00:00 2001 From: Maxim Kulkin Date: Mon, 30 Sep 2013 16:16:03 +0400 Subject: [PATCH] Added basic version detection of openstack components --- discover_test.py | 2 +- ostack_validator/discovery.py | 35 +++++++++++++++++++++-------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/discover_test.py b/discover_test.py index c1685af..d6e3cbd 100644 --- a/discover_test.py +++ b/discover_test.py @@ -10,7 +10,7 @@ def print_components(openstack): for host in openstack.hosts: print('Host %s (addresses = %s):' % (host.name, ', '.join(host.network_addresses))) for service in host.components: - print('Service %s config %s' % (service.name, service.config_path)) + print('Service %s version %s config %s' % (service.name, service.version, service.config_path)) service.config # print_service_config(service) diff --git a/ostack_validator/discovery.py b/ostack_validator/discovery.py index 393a700..fe42176 100644 --- a/ostack_validator/discovery.py +++ b/ostack_validator/discovery.py @@ -38,9 +38,8 @@ class OpenstackComponent(Service): logger = logging.getLogger('ostack_validator.model.openstack_component') component = None - def __init__(self, version, config_path): + def __init__(self, config_path): super(OpenstackComponent, self).__init__() - self.version = version self.config_path = config_path self.config_dir = os.path.dirname(config_path) @@ -66,6 +65,23 @@ class OpenstackComponent(Service): self._config = self._parse_config_file(Mark('%s:%s' % (self.host.name, self.config_path)), config_contents, schema, self.openstack) return self._config + + + @property + def version(self): + if not hasattr(self, '_version'): + result = self.host.client.run(['python', '-c', 'import pkg_resources; version = pkg_resources.get_provider(pkg_resources.Requirement.parse("%s")).version; print(version)' % self.component]) + + s = result.output.strip() + parts = [] + for p in s.split('.'): + if not p[0].isdigit(): break + + parts.append(p) + + self._version = '.'.join(parts) + + return self._version def _parse_config_file(self, base_mark, config_contents, schema=None, issue_reporter=None): @@ -232,10 +248,7 @@ class OpenstackDiscovery(object): else: config_file = '/etc/keystone/keystone.conf' - # TODO: Implement me - version = '2013.1.3' - - host.add_component(KeystoneComponent(version, config_file)) + host.add_component(KeystoneComponent(config_file)) glance_api_process = self._find_python_process(processes, 'glance-api') if glance_api_process: @@ -245,10 +258,7 @@ class OpenstackDiscovery(object): else: config_file = '/etc/glance/glance-api.conf' - # TODO: Implement me - version = '2013.1.3' - - host.add_component(GlanceApiComponent(version, config_file)) + host.add_component(GlanceApiComponent(config_file)) nova_compute_process = self._find_python_process(processes, 'nova-compute') if nova_compute_process: @@ -258,10 +268,7 @@ class OpenstackDiscovery(object): else: config_file = '/etc/nova/nova.conf' - # TODO: Implement me - version = '2013.1.3' - - host.add_component(NovaComputeComponent(version, config_file)) + host.add_component(NovaComputeComponent(config_file)) return host