Changed model to allow any component to have multiple config files
This commit is contained in:
parent
cc79d5896c
commit
038310ddbf
@ -202,7 +202,8 @@ class OpenstackDiscovery(object):
|
|||||||
|
|
||||||
keystone = KeystoneComponent()
|
keystone = KeystoneComponent()
|
||||||
keystone.version = self._find_python_package_version(client, 'keystone')
|
keystone.version = self._find_python_package_version(client, 'keystone')
|
||||||
keystone.config_file = self._collect_file(client, config_path)
|
keystone.config_files = []
|
||||||
|
keystone.config_files.append(self._collect_file(client, config_path))
|
||||||
|
|
||||||
token = keystone.config['admin_token']
|
token = keystone.config['admin_token']
|
||||||
host = keystone.config['bind_host']
|
host = keystone.config['bind_host']
|
||||||
@ -236,7 +237,8 @@ class OpenstackDiscovery(object):
|
|||||||
|
|
||||||
nova_api = NovaApiComponent()
|
nova_api = NovaApiComponent()
|
||||||
nova_api.version = self._find_python_package_version(client, 'nova')
|
nova_api.version = self._find_python_package_version(client, 'nova')
|
||||||
nova_api.config_file = self._collect_file(client, config_path)
|
nova_api.config_files = []
|
||||||
|
nova_api.config_files.append(self._collect_file(client, config_path))
|
||||||
|
|
||||||
paste_config_path = path_relative_to(nova_api.config['api_paste_config'], os.path.dirname(config_path))
|
paste_config_path = path_relative_to(nova_api.config['api_paste_config'], os.path.dirname(config_path))
|
||||||
nova_api.paste_config_file = self._collect_file(client, paste_config_path)
|
nova_api.paste_config_file = self._collect_file(client, paste_config_path)
|
||||||
@ -256,7 +258,8 @@ class OpenstackDiscovery(object):
|
|||||||
|
|
||||||
nova_compute = NovaComputeComponent()
|
nova_compute = NovaComputeComponent()
|
||||||
nova_compute.version = self._find_python_package_version(client, 'nova')
|
nova_compute.version = self._find_python_package_version(client, 'nova')
|
||||||
nova_compute.config_file = self._collect_file(client, config_path)
|
nova_compute.config_files = []
|
||||||
|
nova_compute.config_files.append(self._collect_file(client, config_path))
|
||||||
|
|
||||||
return nova_compute
|
return nova_compute
|
||||||
|
|
||||||
@ -273,7 +276,8 @@ class OpenstackDiscovery(object):
|
|||||||
|
|
||||||
nova_scheduler = NovaSchedulerComponent()
|
nova_scheduler = NovaSchedulerComponent()
|
||||||
nova_scheduler.version = self._find_python_package_version(client, 'nova')
|
nova_scheduler.version = self._find_python_package_version(client, 'nova')
|
||||||
nova_scheduler.config_file = self._collect_file(client, config_path)
|
nova_scheduler.config_files = []
|
||||||
|
nova_scheduler.config_files.append(self._collect_file(client, config_path))
|
||||||
|
|
||||||
return nova_scheduler
|
return nova_scheduler
|
||||||
|
|
||||||
@ -290,7 +294,8 @@ class OpenstackDiscovery(object):
|
|||||||
|
|
||||||
glance_api = GlanceApiComponent()
|
glance_api = GlanceApiComponent()
|
||||||
glance_api.version = self._find_python_package_version(client, 'glance')
|
glance_api.version = self._find_python_package_version(client, 'glance')
|
||||||
glance_api.config_file = self._collect_file(client, config_path)
|
glance_api.config_files = []
|
||||||
|
glance_api.config_files.append(self._collect_file(client, config_path))
|
||||||
|
|
||||||
return glance_api
|
return glance_api
|
||||||
|
|
||||||
@ -307,7 +312,8 @@ class OpenstackDiscovery(object):
|
|||||||
|
|
||||||
glance_registry = GlanceRegistryComponent()
|
glance_registry = GlanceRegistryComponent()
|
||||||
glance_registry.version = self._find_python_package_version(client, 'glance')
|
glance_registry.version = self._find_python_package_version(client, 'glance')
|
||||||
glance_registry.config_file = self._collect_file(client, config_path)
|
glance_registry.config_files = []
|
||||||
|
glance_registry.config_files.append(self._collect_file(client, config_path))
|
||||||
|
|
||||||
return glance_registry
|
return glance_registry
|
||||||
|
|
||||||
@ -324,7 +330,8 @@ class OpenstackDiscovery(object):
|
|||||||
|
|
||||||
cinder_api = CinderApiComponent()
|
cinder_api = CinderApiComponent()
|
||||||
cinder_api.version = self._find_python_package_version(client, 'cinder')
|
cinder_api.version = self._find_python_package_version(client, 'cinder')
|
||||||
cinder_api.config_file = self._collect_file(client, config_path)
|
cinder_api.config_files = []
|
||||||
|
cinder_api.config_files.append(self._collect_file(client, config_path))
|
||||||
|
|
||||||
paste_config_path = path_relative_to(cinder_api.config['api_paste_config'], os.path.dirname(config_path))
|
paste_config_path = path_relative_to(cinder_api.config['api_paste_config'], os.path.dirname(config_path))
|
||||||
cinder_api.paste_config_file = self._collect_file(client, paste_config_path)
|
cinder_api.paste_config_file = self._collect_file(client, paste_config_path)
|
||||||
@ -344,7 +351,8 @@ class OpenstackDiscovery(object):
|
|||||||
|
|
||||||
cinder_volume = CinderVolumeComponent()
|
cinder_volume = CinderVolumeComponent()
|
||||||
cinder_volume.version = self._find_python_package_version(client, 'cinder')
|
cinder_volume.version = self._find_python_package_version(client, 'cinder')
|
||||||
cinder_volume.config_file = self._collect_file(client, config_path)
|
cinder_volume.config_files = []
|
||||||
|
cinder_volume.config_files.append(self._collect_file(client, config_path))
|
||||||
|
|
||||||
rootwrap_config_path = path_relative_to(cinder_volume.config['rootwrap_config'], os.path.dirname(config_path))
|
rootwrap_config_path = path_relative_to(cinder_volume.config['rootwrap_config'], os.path.dirname(config_path))
|
||||||
cinder_volume.rootwrap_config = self._collect_file(client, rootwrap_config_path)
|
cinder_volume.rootwrap_config = self._collect_file(client, rootwrap_config_path)
|
||||||
@ -364,7 +372,8 @@ class OpenstackDiscovery(object):
|
|||||||
|
|
||||||
cinder_scheduler = CinderSchedulerComponent()
|
cinder_scheduler = CinderSchedulerComponent()
|
||||||
cinder_scheduler.version = self._find_python_package_version(client, 'cinder')
|
cinder_scheduler.version = self._find_python_package_version(client, 'cinder')
|
||||||
cinder_scheduler.config_file = self._collect_file(client, config_path)
|
cinder_scheduler.config_files = []
|
||||||
|
cinder_scheduler.config_files.append(self._collect_file(client, config_path))
|
||||||
|
|
||||||
return cinder_scheduler
|
return cinder_scheduler
|
||||||
|
|
||||||
|
@ -101,8 +101,8 @@ class Service(IssueReporter):
|
|||||||
def all_issues(self):
|
def all_issues(self):
|
||||||
result = super(Service, self).all_issues
|
result = super(Service, self).all_issues
|
||||||
|
|
||||||
if hasattr(self, 'config_file') and self.config_file:
|
if hasattr(self, 'config_files') and self.config_files:
|
||||||
result.extend(self.config_file.all_issues)
|
[result.extend(config_file.all_issues) for config_file in self.config_files]
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@ -122,30 +122,32 @@ class OpenstackComponent(Service):
|
|||||||
self.logger.debug('No schema for component "%s" main config version %s. Skipping it' % (self.component, self.version))
|
self.logger.debug('No schema for component "%s" main config version %s. Skipping it' % (self.component, self.version))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return self._parse_config_resource(self.config_file, schema)
|
return self._parse_config_resources(self.config_files, schema)
|
||||||
|
|
||||||
def _parse_config_resource(self, resource, schema=None):
|
def _parse_config_resources(self, resources, schema=None):
|
||||||
return self._parse_config_file(Mark(resource.path), resource.contents, schema, issue_reporter=resource)
|
config = Configuration()
|
||||||
|
|
||||||
def _parse_config_file(self, base_mark, config_contents, schema=None, issue_reporter=None):
|
# Apply defaults
|
||||||
|
if schema:
|
||||||
|
for parameter in filter(lambda p: p.default, schema.parameters):
|
||||||
|
if parameter.section == 'DEFAULT':
|
||||||
|
config.set_default(parameter.name, parameter.default)
|
||||||
|
else:
|
||||||
|
config.set_default('%s.%s' % (parameter.section, parameter.name), parameter.default)
|
||||||
|
|
||||||
|
for resource in reversed(resources):
|
||||||
|
self._parse_config_file(Mark(resource.path), resource.contents, config, schema, issue_reporter=resource)
|
||||||
|
|
||||||
|
return config
|
||||||
|
|
||||||
|
def _parse_config_file(self, base_mark, config_contents, config=Configuration(), schema=None, issue_reporter=None):
|
||||||
if issue_reporter:
|
if issue_reporter:
|
||||||
def report_issue(issue):
|
def report_issue(issue):
|
||||||
issue_reporter.report_issue(issue)
|
issue_reporter.report_issue(issue)
|
||||||
else:
|
else:
|
||||||
def report_issue(issue): pass
|
def report_issue(issue): pass
|
||||||
|
|
||||||
_config = Configuration()
|
|
||||||
|
|
||||||
# Apply defaults
|
|
||||||
if schema:
|
|
||||||
for parameter in filter(lambda p: p.default, schema.parameters):
|
|
||||||
if parameter.section == 'DEFAULT':
|
|
||||||
_config.set_default(parameter.name, parameter.default)
|
|
||||||
else:
|
|
||||||
_config.set_default('%s.%s' % (parameter.section, parameter.name), parameter.default)
|
|
||||||
|
|
||||||
# Parse config file
|
# Parse config file
|
||||||
|
|
||||||
config_parser = IniConfigParser()
|
config_parser = IniConfigParser()
|
||||||
parsed_config = config_parser.parse('', base_mark, config_contents)
|
parsed_config = config_parser.parse('', base_mark, config_contents)
|
||||||
for error in parsed_config.errors:
|
for error in parsed_config.errors:
|
||||||
@ -197,19 +199,20 @@ class OpenstackComponent(Service):
|
|||||||
type_validation_result.message = 'Property "%s" in section "%s": %s' % (parameter.name.text, section_name, type_validation_result.message)
|
type_validation_result.message = 'Property "%s" in section "%s": %s' % (parameter.name.text, section_name, type_validation_result.message)
|
||||||
report_issue(type_validation_result)
|
report_issue(type_validation_result)
|
||||||
|
|
||||||
|
config.set(parameter_fullname, parameter.value.text)
|
||||||
else:
|
else:
|
||||||
value = type_validation_result
|
value = type_validation_result
|
||||||
|
|
||||||
_config.set(parameter_fullname, value)
|
config.set(parameter_fullname, value)
|
||||||
|
|
||||||
# if value == parameter_schema.default:
|
# if value == parameter_schema.default:
|
||||||
# report_issue(MarkedIssue(Issue.INFO, 'Explicit value equals default: section "%s" parameter "%s"' % (section_name, parameter.name.text), parameter.start_mark))
|
# report_issue(MarkedIssue(Issue.INFO, 'Explicit value equals default: section "%s" parameter "%s"' % (section_name, parameter.name.text), parameter.start_mark))
|
||||||
if parameter_schema.deprecation_message:
|
if parameter_schema.deprecation_message:
|
||||||
report_issue(MarkedIssue(Issue.WARNING, 'Deprecated parameter: section "%s" name "%s". %s' % (section_name, parameter.name.text, parameter_schema.deprecation_message), parameter.start_mark))
|
report_issue(MarkedIssue(Issue.WARNING, 'Deprecated parameter: section "%s" name "%s". %s' % (section_name, parameter.name.text, parameter_schema.deprecation_message), parameter.start_mark))
|
||||||
else:
|
else:
|
||||||
_config.set(parameter_fullname, parameter.value.text)
|
config.set(parameter_fullname, parameter.value.text)
|
||||||
|
|
||||||
return _config
|
return config
|
||||||
|
|
||||||
|
|
||||||
class KeystoneComponent(OpenstackComponent):
|
class KeystoneComponent(OpenstackComponent):
|
||||||
@ -231,7 +234,7 @@ class NovaApiComponent(OpenstackComponent):
|
|||||||
@property
|
@property
|
||||||
@memoized
|
@memoized
|
||||||
def paste_config(self):
|
def paste_config(self):
|
||||||
return self._parse_config_resource(self.paste_config_file)
|
return self._parse_config_resources([self.paste_config_file])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def all_issues(self):
|
def all_issues(self):
|
||||||
@ -266,12 +269,6 @@ class MysqlComponent(Service):
|
|||||||
component = 'mysql'
|
component = 'mysql'
|
||||||
name = 'mysql'
|
name = 'mysql'
|
||||||
|
|
||||||
@property
|
|
||||||
def config_file(self):
|
|
||||||
if len(self.config_files) == 0:
|
|
||||||
return None
|
|
||||||
return self.config_files[0]
|
|
||||||
|
|
||||||
class RabbitMqComponent(Service):
|
class RabbitMqComponent(Service):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user