@@ -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+
193217def 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