Skip to content
This repository was archived by the owner on Aug 14, 2024. It is now read-only.

Commit d8d5a36

Browse files
committed
expose CloudFormation add_default_resource_props at top level
1 parent 46190fb commit d8d5a36

1 file changed

Lines changed: 26 additions & 25 deletions

File tree

localstack/services/cloudformation/cloudformation_starter.py

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,30 @@ def update_resource_name(resource, resource_json):
190190
props['StateMachineName'] = resource.name
191191

192192

193+
def add_default_resource_props(resource_props, stack_name, resource_name=None):
194+
""" Apply some fixes which otherwise cause deployments to fail """
195+
res_type = resource_props['Type']
196+
props = resource_props.get('Properties', {})
197+
198+
if res_type == 'AWS::Lambda::EventSourceMapping' and not props.get('StartingPosition'):
199+
props['StartingPosition'] = 'LATEST'
200+
201+
if res_type == 'AWS::SNS::Topic' and not props.get('TopicName'):
202+
props['TopicName'] = 'topic-%s' % short_uid()
203+
204+
if res_type == 'AWS::SQS::Queue' and not props.get('QueueName'):
205+
props['QueueName'] = 'queue-%s' % short_uid()
206+
207+
if res_type == 'AWS::ApiGateway::RestApi':
208+
props['Name'] = props.get('Name') or resource_name
209+
210+
# generate default names for certain resource types
211+
default_attrs = (('AWS::IAM::Role', 'RoleName'), ('AWS::Events::Rule', 'Name'))
212+
for entry in default_attrs:
213+
if res_type == entry[0] and not props.get(entry[1]):
214+
props[entry[1]] = 'cf-%s-%s' % (stack_name, md5(canonical_json(props)))
215+
216+
193217
def apply_patches():
194218
""" Apply patches to make LocalStack seamlessly interact with the moto backend.
195219
TODO: Eventually, these patches should be contributed to the upstream repo! """
@@ -254,33 +278,10 @@ def _parse_and_create_resource(logical_id, resource_json, resources_map, region_
254278
return None
255279
_, resource_json, resource_name = resource_tuple
256280

257-
def add_default_props(resource_props, res_name=None):
258-
""" apply some fixes which otherwise cause deployments to fail """
259-
res_type = resource_props['Type']
260-
props = resource_props.get('Properties', {})
261-
262-
if res_type == 'AWS::Lambda::EventSourceMapping' and not props.get('StartingPosition'):
263-
props['StartingPosition'] = 'LATEST'
264-
265-
if res_type == 'AWS::SNS::Topic' and not props.get('TopicName'):
266-
props['TopicName'] = 'topic-%s' % short_uid()
267-
268-
if res_type == 'AWS::SQS::Queue' and not props.get('QueueName'):
269-
props['QueueName'] = 'queue-%s' % short_uid()
270-
271-
if res_type == 'AWS::ApiGateway::RestApi':
272-
props['Name'] = props.get('Name') or res_name
273-
274-
# generate default names for certain resource types
275-
default_attrs = (('AWS::IAM::Role', 'RoleName'), ('AWS::Events::Rule', 'Name'))
276-
for entry in default_attrs:
277-
if res_type == entry[0] and not props.get(entry[1]):
278-
props[entry[1]] = 'cf-%s-%s' % (stack_name, md5(canonical_json(props)))
279-
280281
# add some fixes and default props which otherwise cause deployments to fail
281-
add_default_props(resource_json, resource_name)
282+
add_default_resource_props(resource_json, stack_name, resource_name=resource_name)
282283
for resource in resources_map._resource_json_map.values():
283-
add_default_props(resource)
284+
add_default_resource_props(resource, stack_name)
284285

285286
# check if this resource already exists in the resource map
286287
resource = resources_map._parsed_resources.get(logical_id)

0 commit comments

Comments
 (0)