def test_parameter_for_autopublish_version_bad(self): """Test Parameter is created for autopublish version run""" filename = 'test/fixtures/templates/bad/transform/auto_publish_alias.yaml' region = 'us-east-1' template = cfn_yaml.load(filename) transformed_template = Transform(filename, template, region) transformed_template.transform_template() self.assertDictEqual(transformed_template._parameters, {})
def test_test_function_using_image_good(self): """Test Parameter is created for autopublish version run""" filename = 'test/fixtures/templates/good/transform/function_using_image.yaml' region = 'us-east-1' template = cfn_yaml.load(filename) transformed_template = Transform(filename, template, region) transformed_template.transform_template() self.assertDictEqual(transformed_template._parameters, {})
def test_conversion_of_step_function_definition_uri(self): """ Tests that the a serverless step function can convert a local path to a s3 path """ filename = 'test/fixtures/templates/good/transform/step_function_local_definition.yaml' region = 'us-east-1' template = cfn_yaml.load(filename) transformed_template = Transform(filename, template, region) transformed_template.transform_template() self.assertDictEqual( transformed_template._template.get('Resources').get( 'StateMachine').get('Properties').get('DefinitionS3Location'), { 'Bucket': 'bucket', 'Key': 'value' })
def test_parameter_for_autopublish_version(self): """Test Parameter is created for autopublish version run""" filename = 'test/fixtures/templates/good/transform/auto_publish_alias.yaml' region = 'us-east-1' template = cfn_yaml.load(filename) transformed_template = Transform(filename, template, region) transformed_template.transform_template() self.assertDictEqual(transformed_template._parameters, { 'Stage1': 'Alias', 'Stage2': 'Alias'}) self.assertDictEqual( transformed_template._template.get('Resources').get( 'SkillFunctionAliasAlias').get('Properties'), { 'Name': 'Alias', 'FunctionName': {'Ref': 'SkillFunction'}, 'FunctionVersion': {'Fn::GetAtt': ['SkillFunctionVersion55ff35af87', 'Version']} })
def is_cfn(filename): """Check if a file is a cloudformation template :param filename: name of the file to check :return : True if it is, False otherwise """ try: cfn = cfn_yaml.load(filename) if 'Resources' in cfn: return True else: with open(filename) as f: cfn = json.load(f) if 'Resources' in cfn: return True else: return False except: return False
elif eval(stmnt, {}, {}) is True: matched_instances[instance_type] = instance # elif instance_type not in matched_instances: # print(f'{instance_type} does not match `{rendered_value} {condition} {actual}`') return matched_instances if __name__ == '__main__': if not len(argv) == 2: print("Usage: update_instance_types.py <TEMPLATE_PATH>") exit(1) template_path = Path(argv[1]).expanduser().resolve() if not template_path.is_file(): print(f"Cannot find template at {template_path}") exit(1) template = cfn_yaml.load(str(template_path)) config = template.get('Metadata', {}).get('AutoInstance') if not config: print(f"Config not present in template at Metadata->AutoInstance") exit(1) for parameter, param_config in config.items(): print(f"processing {parameter}") param = template.get('Parameters', {}).get(parameter) if not param: print( f"Cannot find parameter {parameter} in template at {template}") exit(1) auth_map = get_region_map() filters = template['Metadata']['AutoInstance'][parameter].get( 'InstanceFilters', []) ordered_instances, region_support_map = get_instances(
def decode(filename, ignore_bad_template): """ Decode filename into an object """ template = None matches = [] try: template = cfn_yaml.load(filename) except IOError as e: if e.errno == 2: LOGGER.error('Template file not found: %s', filename) matches.append( create_match_file_error( filename, 'Template file not found: %s' % filename)) elif e.errno == 21: LOGGER.error('Template references a directory, not a file: %s', filename) matches.append( create_match_file_error( filename, 'Template references a directory, not a file: %s' % filename)) elif e.errno == 13: LOGGER.error('Permission denied when accessing template file: %s', filename) matches.append( create_match_file_error( filename, 'Permission denied when accessing template file: %s' % filename)) if matches: return (None, matches) except UnicodeDecodeError as err: LOGGER.error('Cannot read file contents: %s', filename) matches.append( create_match_file_error(filename, 'Cannot read file contents: %s' % filename)) except cfn_yaml.CfnParseError as err: err.match.Filename = filename matches = [err.match] except ParserError as err: matches = [create_match_yaml_parser_error(err, filename)] except ScannerError as err: if err.problem in [ 'found character \'\\t\' that cannot start any token', 'found unknown escape character' ]: try: template = cfn_json.load(filename) except cfn_json.JSONDecodeError as json_err: json_err.match.filename = filename matches = [json_err.match] except JSONDecodeError as json_err: matches = [create_match_json_parser_error(json_err, filename)] except Exception as json_err: # pylint: disable=W0703 if ignore_bad_template: LOGGER.info('Template %s is malformed: %s', filename, err.problem) LOGGER.info('Tried to parse %s as JSON but got error: %s', filename, str(json_err)) else: LOGGER.error('Template %s is malformed: %s', filename, err.problem) LOGGER.error('Tried to parse %s as JSON but got error: %s', filename, str(json_err)) return (None, [ create_match_file_error( filename, 'Tried to parse %s as JSON but got error: %s' % (filename, str(json_err))) ]) else: matches = [create_match_yaml_parser_error(err, filename)] except YAMLError as err: matches = [create_match_file_error(filename, err)] if not isinstance(template, dict) and not matches: # Template isn't a dict which means nearly nothing will work matches = [ Match(1, 1, 1, 1, filename, ParseError(), message='Template needs to be an object.') ] return (template, matches)