iact3/cli_modules/validate.py (57 lines of code) (raw):

import json import logging import asyncio from iact3.cli import CliCore from iact3.cli_modules.delete import Delete from iact3.cli_modules.list import List from iact3.testing.ros_stack import StackTest from iact3.config import BaseConfig, PROJECT, REGIONS, TEMPLATE_CONFIG, TESTS, TestConfig, IAC_NAME, \ DEFAULT_PROJECT_ROOT, OssConfig, Auth, TEMPLATE_LOCATION, DEFAULT_CONFIG_FILE, DEFAULT_OUTPUT_DIRECTORY from iact3.exceptions import Iact3Exception from iact3.config import TemplateConfig from iact3.plugin.ros import StackPlugin from iact3.termial_print import TerminalPrinter LOG = logging.getLogger(__name__) class Validate: ''' Validate the templates. ''' def __init__(self, template: str = None, config_file: str = DEFAULT_CONFIG_FILE, regions: str = None): ''' :param template: path to a template :param config_file: path to a config file :param regions: comma separated list of regions ''' self.template = template self.config_file = config_file self.regions = regions @classmethod async def create(cls, template: str = None, config_file: str = None, regions: str = None): args = {} if regions: args[REGIONS] = regions.split(',') project_path = DEFAULT_PROJECT_ROOT if template: template_config = TemplateConfig(template_location=template) template_args = template_config.generate_template_args() plugin = StackPlugin(region_id=None, credential=None) else: base_config = BaseConfig.create( project_config_file=config_file or DEFAULT_CONFIG_FILE, args={PROJECT: args}, project_path=project_path ) test_config = base_config.tests.pop(next(iter(base_config.tests))) credential = test_config.auth.credential template_config = test_config.template_config template_args = template_config.generate_template_args() plugin = StackPlugin(region_id=None, credential=credential) LOG.info(f'start validating template.') template_validation = await plugin.validate_template( **template_args ) TerminalPrinter._display_validation(template_validation=template_validation)