Skip to content

Commit 08447b7

Browse files
authored
Fix scenario if role is provided (#85)
1 parent 240d9c2 commit 08447b7

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

lib/cfn-model/transforms/serverless.rb

+3-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,9 @@ def replace_serverless_function(cfn_hash, resource_name, with_line_numbers)
133133
# https://github.com/aws/serverless-application-model/issues/264
134134
if serverless_function.key?('Metadata') && serverless_function['Metadata'].key?('cfn_nag')
135135
cfn_hash['Resources'][resource_name]['Metadata'] = serverless_function['Metadata']
136-
cfn_hash['Resources'][resource_name + 'Role']['Metadata'] = serverless_function['Metadata']
136+
unless serverless_function['Properties']['Role']
137+
cfn_hash['Resources'][resource_name + 'Role']['Metadata'] = serverless_function['Metadata']
138+
end
137139
end
138140
end
139141

spec/test_templates/yaml/sam/valid_metadata_lambda_fn.yml

+15
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
# Example from
33
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html
44
Transform: AWS::Serverless-2016-10-31
5+
Parameters:
6+
RoleArn:
7+
Type: String
58
Resources:
69
MyServerlessFunctionLogicalID:
710
Type: AWS::Serverless::Function
@@ -14,3 +17,15 @@ Resources:
1417
Handler: index.handler
1518
Runtime: nodejs12.x
1619
CodeUri: 's3://testBucket/mySourceCode.zip'
20+
MyServerlessFunctionLogicalID2:
21+
Type: AWS::Serverless::Function
22+
Metadata:
23+
cfn_nag:
24+
rules_to_suppress:
25+
- id: W58
26+
reason: I know what I am doing
27+
Properties:
28+
Handler: index.handler
29+
Runtime: nodejs12.x
30+
CodeUri: 's3://testBucket/mySourceCode.zip'
31+
Role: !Ref RoleArn

spec/transforms/serverless_spec.rb

+14
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,20 @@
113113
actual_cfn_model.raw_model['Resources']['MyServerlessFunctionLogicalIDRole'].key?('Metadata')
114114
).to be true
115115
end
116+
it 'Adds metadata to transformed resources without role' do
117+
cloudformation_template_yml = \
118+
yaml_test_template('sam/valid_metadata_lambda_fn')
119+
actual_cfn_model = @cfn_parser.parse cloudformation_template_yml
120+
expect(
121+
actual_cfn_model.raw_model['Resources']['MyServerlessFunctionLogicalID'].key?('Metadata')
122+
).to be true
123+
expect(
124+
actual_cfn_model.raw_model['Resources']['MyServerlessFunctionLogicalIDRole'].key?('Metadata')
125+
).to be true
126+
expect(
127+
actual_cfn_model.raw_model['Resources']['MyServerlessFunctionLogicalID2'].key?('Metadata')
128+
).to be true
129+
end
116130
end
117131

118132
context 'Template with serverless transform without URI' do

0 commit comments

Comments
 (0)