46 lines
2.1 KiB
Python
46 lines
2.1 KiB
Python
import logging
|
|
|
|
from ostack_validator.common import Error, Mark, Issue, Inspection
|
|
from ostack_validator.schema import ConfigSchemaRegistry, TypeValidatorRegistry
|
|
import ostack_validator.schemas
|
|
|
|
class MainConfigValidationInspection(Inspection):
|
|
logger = logging.getLogger('ostack_validator.inspections.main_config_validation')
|
|
|
|
def inspect(self, openstack):
|
|
results = []
|
|
for host in openstack.hosts:
|
|
for component in host.components:
|
|
main_config = component.get_config()
|
|
|
|
if not main_config:
|
|
schema.logger.debug('No main config for component "%s"' % (component.name))
|
|
results.append(Error('Missing main configuration file for component "%s" at host "%s"' % (component.name, host.name)))
|
|
continue
|
|
|
|
schema = ConfigSchemaRegistry.get_schema(component.name, component.version, main_config.name)
|
|
if not schema:
|
|
self.logger.debug('No schema for component "%s" main config version %s. Skipping it' % (component.name, component.version))
|
|
continue
|
|
|
|
for section in main_config.sections:
|
|
for parameter in section.parameters:
|
|
parameter_schema = schema.get_parameter(name=parameter.name.text, section=section.name.text)
|
|
# TBD: should we report unknown config parameters?
|
|
if not parameter_schema:
|
|
self.logger.debug('No schema for parameter "%s" in section "%s". Skipping it' % (parameter.name.text, section.name.text))
|
|
continue
|
|
|
|
type_validator = TypeValidatorRegistry.get_validator(parameter_schema.type)
|
|
type_validation_result = type_validator.validate(parameter.value.text)
|
|
if isinstance(type_validation_result, Issue):
|
|
self.logger.debug('Got issue for parameter "%s" with value "%s"' % (parameter.name.text, parameter.value.text))
|
|
type_validation_result.mark = main_config.mark.merge(parameter.value.start_mark.merge(type_validation_result.mark))
|
|
results.append(type_validation_result)
|
|
|
|
return results
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|
|
|