コード例 #1
0
 def __init__(self, metadata=None, template={}):
     self.metadata = metadata or {}
     self.template = template or {}
     self._template_raw = clone_safe(self.template)
     self.template_original = clone_safe(self.template)
     # initialize resources
     for resource_id, resource in self.template_resources.items():
         resource['LogicalResourceId'] = self.template_original['Resources'][resource_id]['LogicalResourceId'] = (
             resource.get('LogicalResourceId') or resource_id)
     # initialize stack template attributes
     self.template['StackId'] = self.metadata['StackId'] = (self.metadata.get('StackId') or
         aws_stack.cloudformation_stack_arn(self.stack_name, short_uid()))
     self.template['Parameters'] = self.template.get('Parameters') or {}
     self.template['Outputs'] = self.template.get('Outputs') or {}
     # initialize metadata
     self.metadata['Parameters'] = self.metadata.get('Parameters') or []
     self.metadata['StackStatus'] = 'CREATE_IN_PROGRESS'
     self.metadata['CreationTime'] = self.metadata.get('CreationTime') or timestamp_millis()
     # maps resource id to resource state
     self.resource_states = {}
     # maps resource id to moto resource class instance (TODO: remove in the future)
     self.moto_resource_statuses = {}
     # list of stack events
     self.events = []
     # list of stack change sets
     self.change_sets = []
     # initialize parameters
     for i in range(1, 100):
         key = 'Parameters.member.%s.ParameterKey' % i
         value = 'Parameters.member.%s.ParameterValue' % i
         key = self.metadata.get(key)
         value = self.metadata.get(value)
         if not key:
             break
         self.metadata['Parameters'].append({'ParameterKey': key, 'ParameterValue': value})
コード例 #2
0
def delete_stack(stack_name, stack_resources):
    resources = dict([(r['LogicalResourceId'], common.clone_safe(r))
                      for r in stack_resources])
    for key, resource in resources.items():
        resources[key]['Properties'] = common.clone_safe(resource)
    for resource_id, resource in resources.items():
        delete_resource(resource_id, resources, stack_name)
コード例 #3
0
ファイル: test_common.py プロジェクト: jbylund/localstack
 def test_parse_yaml_nodes(self):
     obj = {'test': yaml.ScalarNode('tag:yaml.org,2002:int', '123')}
     result = common.clone_safe(obj)
     self.assertEqual(result, {'test': 123})
     obj = {'foo': [
         yaml.ScalarNode('tag:yaml.org,2002:str', 'value'),
         yaml.ScalarNode('tag:yaml.org,2002:int', '123'),
         yaml.ScalarNode('tag:yaml.org,2002:float', '1.23'),
         yaml.ScalarNode('tag:yaml.org,2002:bool', 'true')
     ]}
     result = common.clone_safe(obj)
     self.assertEqual(result, {'foo': ['value', 123, 1.23, True]})
コード例 #4
0
def parse_template(template):
    try:
        return json.loads(template)
    except Exception:
        yaml.add_multi_constructor(
            '',
            moto.cloudformation.utils.yaml_tag_constructor,
            Loader=NoDatesSafeLoader)
        try:
            return clone_safe(yaml.safe_load(template))
        except Exception:
            return clone_safe(yaml.load(template, Loader=NoDatesSafeLoader))
コード例 #5
0
 def test_parse_yaml_nodes(self):
     obj = {"test": yaml.ScalarNode("tag:yaml.org,2002:int", "123")}
     result = common.clone_safe(obj)
     assert result == {"test": 123}
     obj = {
         "foo": [
             yaml.ScalarNode("tag:yaml.org,2002:str", "value"),
             yaml.ScalarNode("tag:yaml.org,2002:int", "123"),
             yaml.ScalarNode("tag:yaml.org,2002:float", "1.23"),
             yaml.ScalarNode("tag:yaml.org,2002:bool", "true"),
         ]
     }
     result = common.clone_safe(obj)
     assert result == {"foo": ["value", 123, 1.23, True]}
コード例 #6
0
def parse_template(template):
    try:
        return json.loads(template)
    except Exception:
        yaml.add_multi_constructor(
            "", moto.cloudformation.utils.yaml_tag_constructor, Loader=NoDatesSafeLoader
        )  # TODO: remove moto dependency here
        try:
            return clone_safe(yaml.safe_load(template))
        except Exception:
            try:
                return clone_safe(yaml.load(template, Loader=NoDatesSafeLoader))
            except Exception as e:
                LOG.debug("Unable to parse CloudFormation template (%s): %s" % (e, template))
                raise
コード例 #7
0
 def __init__(self, metadata=None, template=None):
     if template is None:
         template = {}
     self.metadata = metadata or {}
     self.template = template or {}
     self._template_raw = clone_safe(self.template)
     self.template_original = clone_safe(self.template)
     # initialize resources
     for resource_id, resource in self.template_resources.items():
         resource["LogicalResourceId"] = self.template_original[
             "Resources"][resource_id]["LogicalResourceId"] = (
                 resource.get("LogicalResourceId") or resource_id)
     # initialize stack template attributes
     self.template["StackId"] = self.metadata[
         "StackId"] = self.metadata.get(
             "StackId") or aws_stack.cloudformation_stack_arn(
                 self.stack_name, short_uid())
     self.template["Parameters"] = self.template.get("Parameters") or {}
     self.template["Outputs"] = self.template.get("Outputs") or {}
     self.template["Conditions"] = self.template.get("Conditions") or {}
     # initialize metadata
     self.metadata["Parameters"] = self.metadata.get("Parameters") or []
     self.metadata["StackStatus"] = "CREATE_IN_PROGRESS"
     self.metadata["CreationTime"] = self.metadata.get(
         "CreationTime") or timestamp_millis()
     # maps resource id to resource state
     self._resource_states = {}
     # list of stack events
     self.events = []
     # list of stack change sets
     self.change_sets = []
     # initialize parameters
     for i in range(1, 100):
         key = "Parameters.member.%s.ParameterKey" % i
         value = "Parameters.member.%s.ParameterValue" % i
         key = self.metadata.get(key)
         value = self.metadata.get(value)
         if not key:
             break
         self.metadata["Parameters"].append({
             "ParameterKey": key,
             "ParameterValue": value
         })