Merge pull request #2838 from bblommers/feature/2388
CloudFormation - CreateChangeSet should not create resources
This commit is contained in:
commit
229b3ec196
@ -239,8 +239,11 @@ class FakeStack(BaseModel):
|
||||
self.cross_stack_resources = cross_stack_resources or {}
|
||||
self.resource_map = self._create_resource_map()
|
||||
self.output_map = self._create_output_map()
|
||||
self._add_stack_event("CREATE_COMPLETE")
|
||||
self.status = "CREATE_COMPLETE"
|
||||
if create_change_set:
|
||||
self.status = "REVIEW_IN_PROGRESS"
|
||||
else:
|
||||
self.create_resources()
|
||||
self._add_stack_event("CREATE_COMPLETE")
|
||||
self.creation_time = datetime.utcnow()
|
||||
|
||||
def _create_resource_map(self):
|
||||
@ -253,7 +256,7 @@ class FakeStack(BaseModel):
|
||||
self.template_dict,
|
||||
self.cross_stack_resources,
|
||||
)
|
||||
resource_map.create()
|
||||
resource_map.load()
|
||||
return resource_map
|
||||
|
||||
def _create_output_map(self):
|
||||
@ -326,6 +329,10 @@ class FakeStack(BaseModel):
|
||||
def exports(self):
|
||||
return self.output_map.exports
|
||||
|
||||
def create_resources(self):
|
||||
self.resource_map.create()
|
||||
self.status = "CREATE_COMPLETE"
|
||||
|
||||
def update(self, template, role_arn=None, parameters=None, tags=None):
|
||||
self._add_stack_event(
|
||||
"UPDATE_IN_PROGRESS", resource_status_reason="User Initiated"
|
||||
@ -640,6 +647,7 @@ class CloudFormationBackend(BaseBackend):
|
||||
else:
|
||||
stack._add_stack_event("UPDATE_IN_PROGRESS")
|
||||
stack._add_stack_event("UPDATE_COMPLETE")
|
||||
stack.create_resources()
|
||||
return True
|
||||
|
||||
def describe_stacks(self, name_or_stack_id):
|
||||
|
@ -531,14 +531,16 @@ class ResourceMap(collections_abc.Mapping):
|
||||
for condition_name in self.lazy_condition_map:
|
||||
self.lazy_condition_map[condition_name]
|
||||
|
||||
def create(self):
|
||||
def load(self):
|
||||
self.load_mapping()
|
||||
self.transform_mapping()
|
||||
self.load_parameters()
|
||||
self.load_conditions()
|
||||
|
||||
def create(self):
|
||||
# Since this is a lazy map, to create every object we just need to
|
||||
# iterate through self.
|
||||
# Assumes that self.load() has been called before
|
||||
self.tags.update(
|
||||
{
|
||||
"aws:cloudformation:stack-name": self.get("AWS::StackName"),
|
||||
|
@ -835,8 +835,10 @@ def test_describe_change_set():
|
||||
)
|
||||
|
||||
stack = cf_conn.describe_change_set(ChangeSetName="NewChangeSet")
|
||||
|
||||
stack["ChangeSetName"].should.equal("NewChangeSet")
|
||||
stack["StackName"].should.equal("NewStack")
|
||||
stack["Status"].should.equal("REVIEW_IN_PROGRESS")
|
||||
|
||||
cf_conn.create_change_set(
|
||||
StackName="NewStack",
|
||||
@ -851,15 +853,30 @@ def test_describe_change_set():
|
||||
|
||||
|
||||
@mock_cloudformation
|
||||
@mock_ec2
|
||||
def test_execute_change_set_w_arn():
|
||||
cf_conn = boto3.client("cloudformation", region_name="us-east-1")
|
||||
ec2 = boto3.client("ec2", region_name="us-east-1")
|
||||
# Verify no instances exist at the moment
|
||||
ec2.describe_instances()["Reservations"].should.have.length_of(0)
|
||||
# Create a Change set, and verify no resources have been created yet
|
||||
change_set = cf_conn.create_change_set(
|
||||
StackName="NewStack",
|
||||
TemplateBody=dummy_template_json,
|
||||
ChangeSetName="NewChangeSet",
|
||||
ChangeSetType="CREATE",
|
||||
)
|
||||
ec2.describe_instances()["Reservations"].should.have.length_of(0)
|
||||
cf_conn.describe_change_set(ChangeSetName="NewChangeSet")["Status"].should.equal(
|
||||
"REVIEW_IN_PROGRESS"
|
||||
)
|
||||
# Execute change set
|
||||
cf_conn.execute_change_set(ChangeSetName=change_set["Id"])
|
||||
# Verify that the status has changed, and the appropriate resources have been created
|
||||
cf_conn.describe_change_set(ChangeSetName="NewChangeSet")["Status"].should.equal(
|
||||
"CREATE_COMPLETE"
|
||||
)
|
||||
ec2.describe_instances()["Reservations"].should.have.length_of(1)
|
||||
|
||||
|
||||
@mock_cloudformation
|
||||
|
Loading…
x
Reference in New Issue
Block a user