35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
import logging
|
|
|
|
from ostack_validator.common import Version
|
|
from ostack_validator.model import *
|
|
from ostack_validator.resource import ConfigSnapshotResourceLocator
|
|
from ostack_validator.config_formats import IniConfigParser
|
|
|
|
OPENSTACK_COMPONENTS = ['nova', 'keystone', 'glance']
|
|
|
|
class ModelParser(object):
|
|
logger = logging.getLogger('ostack_validator.ModelParser')
|
|
|
|
def parse(self, path):
|
|
resource_locator = ConfigSnapshotResourceLocator(path)
|
|
|
|
hosts = []
|
|
for host_name in resource_locator.find_hosts():
|
|
components = []
|
|
for component_name in resource_locator.find_host_components(host_name):
|
|
if not component_name in OPENSTACK_COMPONENTS:
|
|
self.logger.warn('Unknown component in config: %s', component_name)
|
|
continue
|
|
|
|
component_version = Version(1000000) # very latest version
|
|
version_resource = resource_locator.find_resource(host_name, component_name, 'version')
|
|
if version_resource:
|
|
component_version = Version(version_resource.get_contents())
|
|
|
|
components.append(OpenstackComponent(component_name, component_version))
|
|
|
|
hosts.append(Host(host_name, {}, components))
|
|
|
|
return Openstack(hosts, resource_locator, IniConfigParser())
|
|
|