def test_yaml_with_tags(self): output = yaml_parse(self.yaml_with_tags) self.assertEquals(self.parsed_yaml_dict, output) # Make sure formatter and parser work well with each other formatted_str = yaml_dump(output) output_again = yaml_parse(formatted_str) self.assertEquals(output, output_again)
def combine_template(template_path): """jsonを読み込みくっつける.""" with open(template_path, 'r+') as file: data = yaml_parse(file.read()) # dict_data = data for i in data['Resources']: rootpath = template_path.split('/')[0] path = f'{rootpath}/_template-{i}.yaml' if os.path.exists(path): with open(path) as subfile: data2 = yaml_parse(subfile.read()) data['Resources'][i].update(data2) print(str(data)) return str(data)
def _run_main(self, parsed_args, parsed_globals): cloudformation_client = \ self._session.create_client( 'cloudformation', region_name=parsed_globals.region, endpoint_url=parsed_globals.endpoint_url, verify=parsed_globals.verify_ssl) template_path = parsed_args.template_file if not os.path.isfile(template_path): raise exceptions.InvalidTemplatePathError( template_path=template_path) # Parse parameters with open(template_path, "r") as handle: template_str = handle.read() stack_name = parsed_args.stack_name parameter_overrides = self.parse_parameter_arg( parsed_args.parameter_overrides) template_dict = yaml_parse(template_str) parameters = self.merge_parameters(template_dict, parameter_overrides) deployer = Deployer(cloudformation_client) return self.deploy(deployer, stack_name, template_str, parameters, parsed_args.capabilities, parsed_args.execute_changeset, parsed_args.role_arn, parsed_args.notification_arns)
def __init__(self, template_path, parent_dir, uploader, resources_to_export=RESOURCES_EXPORT_LIST, metadata_to_export=METADATA_EXPORT_LIST): """ Reads the template and makes it ready for export """ if not (is_local_folder(parent_dir) and os.path.isabs(parent_dir)): raise ValueError( "parent_dir parameter must be " "an absolute path to a folder {0}".format(parent_dir)) abs_template_path = make_abs_path(parent_dir, template_path) template_dir = os.path.dirname(abs_template_path) with open(abs_template_path, "r") as handle: template_str = handle.read() self.template_dict = yaml_parse(template_str) self.template_dir = template_dir self.resources_to_export = resources_to_export self.metadata_to_export = metadata_to_export self.uploader = uploader
def _run_main(self, parsed_args, parsed_globals): cloudformation_client = \ self._session.create_client( 'cloudformation', region_name=parsed_globals.region, endpoint_url=parsed_globals.endpoint_url, verify=parsed_globals.verify_ssl) template_path = parsed_args.template_file if not os.path.isfile(template_path): raise exceptions.InvalidTemplatePathError( template_path=template_path) # Parse parameters with open(template_path, "r") as handle: template_str = handle.read() stack_name = parsed_args.stack_name parameter_overrides = self.parse_parameter_arg( parsed_args.parameter_overrides) template_dict = yaml_parse(template_str) parameters = self.merge_parameters(template_dict, parameter_overrides) deployer = Deployer(cloudformation_client) return self.deploy(deployer, stack_name, template_str, parameters, parsed_args.capabilities, parsed_args.execute_changeset, parsed_args.role_arn, parsed_args.notification_arns, parsed_args.fail_on_empty_changeset)
def test_parse_yaml_preserve_elements_order(self): input_template = ('B_Resource:\n' ' Key2:\n' ' Name: name2\n' ' Key1:\n' ' Name: name1\n' 'A_Resource:\n' ' Key2:\n' ' Name: name2\n' ' Key1:\n' ' Name: name1\n') output_dict = yaml_parse(input_template) expected_dict = OrderedDict([('B_Resource', OrderedDict([('Key2', { 'Name': 'name2' }), ('Key1', { 'Name': 'name1' })])), ('A_Resource', OrderedDict([('Key2', { 'Name': 'name2' }), ('Key1', { 'Name': 'name1' })]))]) self.assertEqual(expected_dict, output_dict) output_template = yaml_dump(output_dict) self.assertEqual(input_template, output_template)
def test_parse_json_preserve_elements_order(self): input_template = """ { "B_Resource": { "Key2": { "Name": "name2" }, "Key1": { "Name": "name1" } }, "A_Resource": { "Key2": { "Name": "name2" }, "Key1": { "Name": "name1" } } } """ expected_dict = OrderedDict([ ('B_Resource', OrderedDict([('Key2', {'Name': 'name2'}), ('Key1', {'Name': 'name1'})])), ('A_Resource', OrderedDict([('Key2', {'Name': 'name2'}), ('Key1', {'Name': 'name1'})])) ]) output_dict = yaml_parse(input_template) self.assertEqual(expected_dict, output_dict)
def combine_template(template_path): """templateを読み込みくっつける. ルール - 子テンプレートは親テンプレートと同じディレクトリにある - 子テンプレートのファイル名は_template-{リソース名}.yaml """ with open(template_path, 'r+') as file: data = yaml_parse(file.read()) for i in data['Resources']: rootpath = template_path.split('/')[0] path = f'{rootpath}/_template-{i}.yaml' if os.path.exists(path): with open(path) as subfile: subdata = yaml_parse(subfile.read()) data['Resources'][i].update(subdata) # check_template(str(data)) return str(data)
def _run_main(self, parsed_args, parsed_globals): cloudformation_client = \ self._session.create_client( 'cloudformation', region_name=parsed_globals.region, endpoint_url=parsed_globals.endpoint_url, verify=parsed_globals.verify_ssl) template_path = parsed_args.template_file if not os.path.isfile(template_path): raise exceptions.InvalidTemplatePathError( template_path=template_path) # Parse parameters with open(template_path, "r") as handle: template_str = handle.read() stack_name = parsed_args.stack_name parameter_overrides = self.parse_key_value_arg( parsed_args.parameter_overrides, self.PARAMETER_OVERRIDE_CMD) tags_dict = self.parse_key_value_arg(parsed_args.tags, self.TAGS_CMD) tags = [{"Key": key, "Value": value} for key, value in tags_dict.items()] template_dict = yaml_parse(template_str) parameters = self.merge_parameters(template_dict, parameter_overrides) template_size = os.path.getsize(parsed_args.template_file) if template_size > 51200 and not parsed_args.s3_bucket: raise exceptions.DeployBucketRequiredError() bucket = parsed_args.s3_bucket if bucket: s3_client = self._session.create_client( "s3", config=Config(signature_version='s3v4'), region_name=parsed_globals.region, verify=parsed_globals.verify_ssl) s3_uploader = S3Uploader(s3_client, bucket, parsed_globals.region, parsed_args.s3_prefix, parsed_args.kms_key_id, parsed_args.force_upload) else: s3_uploader = None deployer = Deployer(cloudformation_client) return self.deploy(deployer, stack_name, template_str, parameters, parsed_args.capabilities, parsed_args.execute_changeset, parsed_args.role_arn, parsed_args.notification_arns, s3_uploader, tags, parsed_args.fail_on_empty_changeset)
def _run_main(self, parsed_args, parsed_globals): cloudformation_client = \ self._session.create_client( 'cloudformation', region_name=parsed_globals.region, endpoint_url=parsed_globals.endpoint_url, verify=parsed_globals.verify_ssl) template_path = parsed_args.template_file if not os.path.isfile(template_path): raise exceptions.InvalidTemplatePathError( template_path=template_path) # Parse parameters with open(template_path, "r") as handle: template_str = handle.read() stack_name = parsed_args.stack_name parameter_overrides = self.parse_key_value_arg( parsed_args.parameter_overrides, self.PARAMETER_OVERRIDE_CMD) tags_dict = self.parse_key_value_arg(parsed_args.tags, self.TAGS_CMD) tags = [{"Key": key, "Value": value} for key, value in tags_dict.items()] template_dict = yaml_parse(template_str) parameters = self.merge_parameters(template_dict, parameter_overrides) template_size = os.path.getsize(parsed_args.template_file) if template_size > 51200 and not parsed_args.s3_bucket: raise exceptions.DeployBucketRequiredError() bucket = parsed_args.s3_bucket if bucket: s3_client = self._session.create_client( "s3", config=Config(signature_version='s3v4'), region_name=parsed_globals.region, verify=parsed_globals.verify_ssl) s3_uploader = S3Uploader(s3_client, bucket, parsed_args.s3_prefix, parsed_args.kms_key_id, parsed_args.force_upload) else: s3_uploader = None deployer = Deployer(cloudformation_client) return self.deploy(deployer, stack_name, template_str, parameters, parsed_args.capabilities, parsed_args.execute_changeset, parsed_args.role_arn, parsed_args.notification_arns, s3_uploader, tags, parsed_args.fail_on_empty_changeset)
def test_yaml_merge_tag(self): test_yaml = """ base: &base property: value test: <<: *base """ output = yaml_parse(test_yaml) self.assertTrue(isinstance(output, OrderedDict)) self.assertEqual(output.get('test').get('property'), 'value')
def test_yaml_getatt(self): # This is an invalid syntax for !GetAtt. But make sure the code does not crash when we encouter this syntax # Let CloudFormation interpret this value at runtime input = """ Resource: Key: !GetAtt ["a", "b"] """ output = {"Resource": {"Key": {"Fn::GetAtt": ["a", "b"]}}} actual_output = yaml_parse(input) self.assertEquals(actual_output, output)
def test_yaml_getatt(self): # This is an invalid syntax for !GetAtt. But make sure the code does not crash when we encouter this syntax # Let CloudFormation interpret this value at runtime input = """ Resource: Key: !GetAtt ["a", "b"] """ output = { "Resource": { "Key": { "Fn::GetAtt": ["a", "b"] } } } actual_output = yaml_parse(input) self.assertEquals(actual_output, output)
def __init__(self, template_path, parent_dir, uploader, resources_to_export=EXPORT_DICT): """ Reads the template and makes it ready for export """ if not (is_local_folder(parent_dir) and os.path.isabs(parent_dir)): raise ValueError("parent_dir parameter must be " "an absolute path to a folder {0}" .format(parent_dir)) abs_template_path = make_abs_path(parent_dir, template_path) template_dir = os.path.dirname(abs_template_path) with open(abs_template_path, "r") as handle: template_str = handle.read() self.template_dict = yaml_parse(template_str) self.template_dir = template_dir self.resources_to_export = resources_to_export self.uploader = uploader
def test_parse_yaml_preserve_elements_order(self): input_template = ( 'B_Resource:\n' ' Key2:\n' ' Name: name2\n' ' Key1:\n' ' Name: name1\n' 'A_Resource:\n' ' Key2:\n' ' Name: name2\n' ' Key1:\n' ' Name: name1\n' ) output_dict = yaml_parse(input_template) expected_dict = OrderedDict([ ('B_Resource', OrderedDict([('Key2', {'Name': 'name2'}), ('Key1', {'Name': 'name1'})])), ('A_Resource', OrderedDict([('Key2', {'Name': 'name2'}), ('Key1', {'Name': 'name1'})])) ]) self.assertEqual(expected_dict, output_dict) output_template = yaml_dump(output_dict) self.assertEqual(input_template, output_template)
def test_parse_json_with_tabs(self): template = '{\n\t"foo": "bar"\n}' output = yaml_parse(template) self.assertEqual(output, {'foo': 'bar'})
def __load_yaml(self, filename): with open(filename) as f: return yaml_parse(f.read())