cfn-model 0.4.17 → 0.4.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee4e39515d2ee0750c7ef71ec03c1f74d2345493621b99ad454ed0ef73013767
4
- data.tar.gz: acff3ed655ee47fb57c2fcd1c107c6bd0a6e6d47695ee1d7bab69ae6716b83d0
3
+ metadata.gz: a30f11c718dd0eff8aca481d309eb43ec956fb7589f4bac4509568029c49d96a
4
+ data.tar.gz: b49b0f87f0314422b9596e83377ac80ab53f8587426549b8dca118c9bc1f56e3
5
5
  SHA512:
6
- metadata.gz: 5ea5adf97d67de8fa64278cd5d83c7b3482f53d559eac400dd2be17c0024e42b7b8225248e1b007c32a51ec8b24f717c5559721405d5ce15f5a81e78e346c4ec
7
- data.tar.gz: bdc94a195a2f246874bc6d8e98b0b222c45e7a14efa4bfe913b760f489336b2955ed57f66c5663682c86fa5ffaf53a5656e12a6f9544806a13a56327b2b3aeb4
6
+ metadata.gz: 5be4b84d0149684785f3696941d2a288f7f7080057bb2d31945e9561ca73625134aed3a9a405930651d3bdcdc29529f79bc2ab7b2a31b80eeb81b7cc9ae18306
7
+ data.tar.gz: f863433dfba321ace4cfd1b685d2176b8ff56ec09826f9b6863f44079b7ac96ecf80206f394ac2f0967082686c9ca7e95bfc0343e10294cc38b4780005bd12d1
@@ -7,10 +7,13 @@ class CfnModel
7
7
  # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html
8
8
  class Serverless
9
9
  def perform_transform(cfn_hash)
10
+ with_line_numbers = false
10
11
  resources = cfn_hash['Resources'].clone
11
12
  resources.each do |resource_name, resource|
12
- next unless resource['Type'].eql? 'AWS::Serverless::Function'
13
- replace_serverless_function cfn_hash, resource_name
13
+ next unless matching_resource_type?(resource['Type'], 'AWS::Serverless::Function')
14
+
15
+ with_line_numbers = true if resource['Type'].is_a? Hash
16
+ replace_serverless_function cfn_hash, resource_name, with_line_numbers
14
17
  end
15
18
  end
16
19
 
@@ -39,6 +42,23 @@ class CfnModel
39
42
  end
40
43
  end
41
44
 
45
+ def matching_resource_type?(resource_type, type_to_match)
46
+ matching_string_resource_type?(resource_type, type_to_match) ||
47
+ matching_line_number_enriched_resource_type?(resource_type, type_to_match)
48
+ end
49
+
50
+ def matching_string_resource_type?(resource_type, type_to_match)
51
+ resource_type.is_a?(String) && resource_type.eql?(type_to_match)
52
+ end
53
+
54
+ def matching_line_number_enriched_resource_type?(resource_type, type_to_match)
55
+ resource_type.is_a?(Hash) && resource_type['value'].eql?(type_to_match)
56
+ end
57
+
58
+ def format_resource_type(type, line_no, numbers)
59
+ numbers ? { 'value' => type, 'line' => line_no } : type
60
+ end
61
+
42
62
  def resolve_globals_function_property(cfn_hash, property_name)
43
63
  cfn_hash['Globals'] && cfn_hash['Globals']['Function'] && cfn_hash['Globals']['Function'][property_name]
44
64
  end
@@ -61,12 +81,13 @@ class CfnModel
61
81
  lambda_fn_params
62
82
  end
63
83
 
64
- def serverless_function_properties(cfn_hash, serverless_function)
84
+ def serverless_function_properties(cfn_hash, serverless_function, with_line_numbers)
65
85
  code_uri = serverless_function_property(serverless_function, cfn_hash, 'CodeUri')
66
86
 
67
87
  lambda_fn_params = {
68
88
  handler: serverless_function_property(serverless_function, cfn_hash, 'Handler'),
69
- runtime: serverless_function_property(serverless_function, cfn_hash, 'Runtime')
89
+ runtime: serverless_function_property(serverless_function, cfn_hash, 'Runtime'),
90
+ with_line_numbers: with_line_numbers
70
91
  }
71
92
 
72
93
  lambda_fn_params = transform_code_uri(
@@ -77,15 +98,15 @@ class CfnModel
77
98
  lambda_fn_params
78
99
  end
79
100
 
80
- def replace_serverless_function(cfn_hash, resource_name)
101
+ def replace_serverless_function(cfn_hash, resource_name, with_line_numbers)
81
102
  serverless_function = cfn_hash['Resources'][resource_name]
82
103
 
83
- lambda_fn_params = serverless_function_properties(cfn_hash, serverless_function)
104
+ lambda_fn_params = serverless_function_properties(cfn_hash, serverless_function, with_line_numbers)
84
105
 
85
106
  cfn_hash['Resources'][resource_name] = lambda_function lambda_fn_params
86
- cfn_hash['Resources']['FunctionNameRole'] = function_name_role
107
+ cfn_hash['Resources']['FunctionNameRole'] = function_name_role with_line_numbers
87
108
 
88
- transform_function_events(cfn_hash, serverless_function, resource_name) if \
109
+ transform_function_events(cfn_hash, serverless_function, resource_name, with_line_numbers) if \
89
110
  serverless_function['Properties']['Events']
90
111
  end
91
112
 
@@ -104,9 +125,9 @@ class CfnModel
104
125
 
105
126
  # Return the hash structure of the 'FunctionNameRole'
106
127
  # AWS::IAM::Role resource as created by Serverless transform
107
- def function_name_role
128
+ def function_name_role(with_line_numbers)
108
129
  {
109
- 'Type' => 'AWS::IAM::Role',
130
+ 'Type' => format_resource_type('AWS::IAM::Role', -1, with_line_numbers),
110
131
  'Properties' => {
111
132
  'ManagedPolicyArns' => [
112
133
  'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
@@ -131,9 +152,10 @@ class CfnModel
131
152
  def lambda_function(handler:,
132
153
  code_bucket: nil,
133
154
  code_key: nil,
134
- runtime:)
155
+ runtime:,
156
+ with_line_numbers: false)
135
157
  fn_resource = {
136
- 'Type' => 'AWS::Lambda::Function',
158
+ 'Type' => format_resource_type('AWS::Lambda::Function', -1, with_line_numbers),
137
159
  'Properties' => {
138
160
  'Handler' => handler,
139
161
  'Role' => { 'Fn::GetAtt' => %w[FunctionNameRole Arn] },
@@ -145,15 +167,16 @@ class CfnModel
145
167
 
146
168
  # Return the Event structure of a AWS::Lambda::Function as created
147
169
  # by Serverless transform
148
- def transform_function_events(cfn_hash, serverless_function, function_name)
170
+ def transform_function_events(cfn_hash, serverless_function, function_name, with_line_numbers)
149
171
  serverless_function['Properties']['Events'].each do |_, event|
150
- serverlessrestapi_resources(cfn_hash, event, function_name) if event['Type'] == 'Api'
172
+ serverlessrestapi_resources(cfn_hash, event, function_name, with_line_numbers) if \
173
+ matching_resource_type?(event['Type'], 'Api')
151
174
  end
152
175
  end
153
176
 
154
- def serverlessrestapi_resources(cfn_hash, event, func_name)
177
+ def serverlessrestapi_resources(cfn_hash, event, func_name, with_line_numbers)
155
178
  # ServerlessRestApi
156
- cfn_hash['Resources']['ServerlessRestApi'] ||= serverlessrestapi_base
179
+ cfn_hash['Resources']['ServerlessRestApi'] ||= serverlessrestapi_base with_line_numbers
157
180
  add_serverlessrestapi_event(
158
181
  cfn_hash['Resources']['ServerlessRestApi']['Properties']['Body']['paths'],
159
182
  event,
@@ -161,15 +184,15 @@ class CfnModel
161
184
  )
162
185
 
163
186
  # ServerlessRestApiDeployment
164
- cfn_hash['Resources']['ServerlessRestApiDeployment'] = serverlessrestapi_deployment
187
+ cfn_hash['Resources']['ServerlessRestApiDeployment'] = serverlessrestapi_deployment with_line_numbers
165
188
 
166
189
  # ServerlessRestApiProdStage
167
- cfn_hash['Resources']['ServerlessRestApiProdStage'] = serverlessrestapi_stage
190
+ cfn_hash['Resources']['ServerlessRestApiProdStage'] = serverlessrestapi_stage with_line_numbers
168
191
  end
169
192
 
170
- def serverlessrestapi_base
193
+ def serverlessrestapi_base(with_line_nos)
171
194
  {
172
- 'Type' => 'AWS::ApiGateway::RestApi',
195
+ 'Type' => format_resource_type('AWS::ApiGateway::RestApi', -1, with_line_nos),
173
196
  'Properties' => {
174
197
  'Body' => {
175
198
  'info' => {
@@ -196,20 +219,26 @@ class CfnModel
196
219
  }
197
220
  end
198
221
 
199
- def serverlessrestapi_deployment
222
+ def serverlessrestapi_deployment(with_line_nos)
200
223
  {
201
- 'Type' => 'AWS::ApiGateway::Deployment',
224
+ 'Type' => format_resource_type('AWS::ApiGateway::Deployment', -1, with_line_nos),
202
225
  'Properties' => {
203
226
  'Description' => 'Generated by cfn-model',
204
227
  'RestApiId' => { 'Ref' => 'ServerlessRestApi' },
228
+ 'StageDescription' => {
229
+ 'AccessLogSetting' => {
230
+ 'DestinationArn' => 'arn:aws:logs:region:account:group/ApiLogs',
231
+ 'Format' => '$context.requestId'
232
+ }
233
+ },
205
234
  'StageName' => 'Stage'
206
235
  }
207
236
  }
208
237
  end
209
238
 
210
- def serverlessrestapi_stage
239
+ def serverlessrestapi_stage(with_line_nos)
211
240
  {
212
- 'Type' => 'AWS::ApiGateway::Stage',
241
+ 'Type' => format_resource_type('AWS::ApiGateway::Stage', -1, with_line_nos),
213
242
  'Properties' => {
214
243
  'DeploymentId' => { 'Ref' => 'ServerlessRestApiDeployment' },
215
244
  'RestApiId' => { 'Ref' => 'ServerlessRestApi' },
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfn-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.17
4
+ version: 0.4.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Kascic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-24 00:00:00.000000000 Z
11
+ date: 2020-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop