Add exports to CloudFormationBackend
This commit is contained in:
parent
8f7f306f48
commit
a0651ccde5
@ -42,7 +42,7 @@ class FakeStack(BaseModel):
|
||||
return resource_map
|
||||
|
||||
def _create_output_map(self):
|
||||
output_map = OutputMap(self.resource_map, self.template_dict)
|
||||
output_map = OutputMap(self.resource_map, self.template_dict, self.stack_id)
|
||||
output_map.create()
|
||||
return output_map
|
||||
|
||||
@ -90,6 +90,10 @@ class FakeStack(BaseModel):
|
||||
def stack_outputs(self):
|
||||
return self.output_map.values()
|
||||
|
||||
@property
|
||||
def exports(self):
|
||||
return self.output_map.exports
|
||||
|
||||
def update(self, template, role_arn=None, parameters=None, tags=None):
|
||||
self._add_stack_event("UPDATE_IN_PROGRESS", resource_status_reason="User Initiated")
|
||||
self.template = template
|
||||
@ -131,6 +135,7 @@ class CloudFormationBackend(BaseBackend):
|
||||
def __init__(self):
|
||||
self.stacks = OrderedDict()
|
||||
self.deleted_stacks = {}
|
||||
self.exports = OrderedDict()
|
||||
|
||||
def create_stack(self, name, template, parameters, region_name, notification_arns=None, tags=None, role_arn=None):
|
||||
stack_id = generate_stack_id(name)
|
||||
@ -145,6 +150,8 @@ class CloudFormationBackend(BaseBackend):
|
||||
role_arn=role_arn,
|
||||
)
|
||||
self.stacks[stack_id] = new_stack
|
||||
for export in new_stack.exports:
|
||||
self.exports[export.name] = export
|
||||
return new_stack
|
||||
|
||||
def describe_stacks(self, name_or_stack_id):
|
||||
@ -191,6 +198,7 @@ class CloudFormationBackend(BaseBackend):
|
||||
stack = self.stacks.pop(name_or_stack_id, None)
|
||||
stack.delete()
|
||||
self.deleted_stacks[stack.stack_id] = stack
|
||||
[self.exports.pop(export.name) for export in stack.exports]
|
||||
return self.stacks.pop(name_or_stack_id, None)
|
||||
else:
|
||||
# Delete by stack name
|
||||
|
@ -454,8 +454,9 @@ class ResourceMap(collections.Mapping):
|
||||
|
||||
class OutputMap(collections.Mapping):
|
||||
|
||||
def __init__(self, resources, template):
|
||||
def __init__(self, resources, template, stack_id):
|
||||
self._template = template
|
||||
self._stack_id = stack_id
|
||||
self._output_json_map = template.get('Outputs')
|
||||
|
||||
# Create the default resources
|
||||
@ -484,6 +485,35 @@ class OutputMap(collections.Mapping):
|
||||
def outputs(self):
|
||||
return self._output_json_map.keys() if self._output_json_map else []
|
||||
|
||||
@property
|
||||
def exports(self):
|
||||
exports = []
|
||||
if self.outputs:
|
||||
for key, value in self._output_json_map.iteritems():
|
||||
if value.get('Export'):
|
||||
exports.append(Export(self._stack_id, value['Export'].get('Name'), value.get('Value')))
|
||||
return exports
|
||||
|
||||
def create(self):
|
||||
for output in self.outputs:
|
||||
self[output]
|
||||
|
||||
|
||||
class Export(object):
|
||||
|
||||
def __init__(self, exporting_stack_id, name, value):
|
||||
self._exporting_stack_id = exporting_stack_id
|
||||
self._name = name
|
||||
self._value = value
|
||||
|
||||
@property
|
||||
def exporting_stack_id(self):
|
||||
return self._exporting_stack_id
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self._name
|
||||
|
||||
@property
|
||||
def value(self):
|
||||
return self._value
|
||||
|
Loading…
x
Reference in New Issue
Block a user