prima-twig 1.3.0 → 1.3.1
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 +4 -4
- data/lib/command.rb +2 -2
- data/lib/prima_aws_client.rb +131 -157
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dca7d3d6359bd512ce34021d35d023a917507ae1004de5f758abe3f70f6f1c10
|
4
|
+
data.tar.gz: 14221958e4695b6ff58ac68a3c332f9b735ad2ca99093f72eaad8d1ffe4989a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2d5a682591fee449f6e62e2c7dc07bb9cb5b9fe6cf3ad265698daf5f484df20b6d77d84ca4edd279191bab807849ee7a395ed734cc4e34a55ad03d9fb1233f8
|
7
|
+
data.tar.gz: 754189d1268adc751f5d44fa20422bba0fb712e5024560234049bf417e8d59c62d7a1fd6c02caad8e740e948fd58e448aabec7112e98336637654070d3314f71
|
data/lib/command.rb
CHANGED
@@ -64,10 +64,10 @@ module Command
|
|
64
64
|
|
65
65
|
# executes command and returns properly colored output
|
66
66
|
def execute_command(cmd)
|
67
|
-
output "
|
67
|
+
output "Executing #{cmd}".yellow
|
68
68
|
res = `#{cmd}`
|
69
69
|
color = $CHILD_STATUS.exitstatus.zero? ? 'green' : 'red'
|
70
70
|
output res.send color
|
71
|
-
stop_if (color == 'red'),
|
71
|
+
stop_if (color == 'red'), 'Error'.red
|
72
72
|
end
|
73
73
|
end
|
data/lib/prima_aws_client.rb
CHANGED
@@ -7,7 +7,6 @@ require 'aws-sdk-ecs'
|
|
7
7
|
require 'aws-sdk-elasticloadbalancingv2'
|
8
8
|
require 'aws-sdk-s3'
|
9
9
|
require 'colorize'
|
10
|
-
#
|
11
10
|
module PrimaAwsClient
|
12
11
|
def s3_client
|
13
12
|
@s3 ||= Aws::S3::Client.new
|
@@ -48,6 +47,7 @@ module PrimaAwsClient
|
|
48
47
|
end
|
49
48
|
stacks += resp.stacks
|
50
49
|
break unless resp.next_token
|
50
|
+
|
51
51
|
next_token = resp.next_token
|
52
52
|
end
|
53
53
|
puts '.'.yellow; STDOUT.flush
|
@@ -70,6 +70,7 @@ module PrimaAwsClient
|
|
70
70
|
end
|
71
71
|
stacks += resp.stacks
|
72
72
|
break unless resp.next_token
|
73
|
+
|
73
74
|
next_token = resp.next_token
|
74
75
|
end
|
75
76
|
puts '.'.yellow; STDOUT.flush
|
@@ -92,6 +93,7 @@ module PrimaAwsClient
|
|
92
93
|
end
|
93
94
|
exports += resp.exports
|
94
95
|
break unless resp.next_token
|
96
|
+
|
95
97
|
next_token = resp.next_token
|
96
98
|
end
|
97
99
|
puts '.'.yellow; STDOUT.flush
|
@@ -108,9 +110,7 @@ module PrimaAwsClient
|
|
108
110
|
on_failure: 'ROLLBACK'
|
109
111
|
}
|
110
112
|
|
111
|
-
|
112
|
-
cf_args.merge!(role_arn: role)
|
113
|
-
end
|
113
|
+
cf_args.merge!(role_arn: role) unless role.nil?
|
114
114
|
|
115
115
|
begin
|
116
116
|
cf_client.create_stack(cf_args)
|
@@ -119,7 +119,7 @@ module PrimaAwsClient
|
|
119
119
|
sleep 15
|
120
120
|
create_stack(stack_name, stack_body, parameters = [], tags = [])
|
121
121
|
else
|
122
|
-
output "
|
122
|
+
output "CloudFormation stack #{stack_name} creation started".green
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
@@ -132,9 +132,7 @@ module PrimaAwsClient
|
|
132
132
|
capabilities: ['CAPABILITY_IAM']
|
133
133
|
}
|
134
134
|
|
135
|
-
|
136
|
-
cf_args.merge!(role_arn: role)
|
137
|
-
end
|
135
|
+
cf_args.merge!(role_arn: role) unless role.nil?
|
138
136
|
|
139
137
|
begin
|
140
138
|
cf_client.update_stack(cf_args)
|
@@ -145,7 +143,7 @@ module PrimaAwsClient
|
|
145
143
|
rescue Aws::CloudFormation::Errors::ValidationError => e
|
146
144
|
raise e
|
147
145
|
else
|
148
|
-
output "
|
146
|
+
output "CloudFormation stack #{stack_name} update started".green
|
149
147
|
end
|
150
148
|
end
|
151
149
|
|
@@ -158,9 +156,7 @@ module PrimaAwsClient
|
|
158
156
|
capabilities: ['CAPABILITY_IAM']
|
159
157
|
}
|
160
158
|
|
161
|
-
|
162
|
-
cf_args.merge!(role_arn: role)
|
163
|
-
end
|
159
|
+
cf_args.merge!(role_arn: role) unless role.nil?
|
164
160
|
|
165
161
|
begin
|
166
162
|
cf_client.update_stack(cf_args)
|
@@ -171,7 +167,7 @@ module PrimaAwsClient
|
|
171
167
|
rescue Aws::CloudFormation::Errors::ValidationError => e
|
172
168
|
raise e
|
173
169
|
else
|
174
|
-
output "
|
170
|
+
output "CloudFormation stack #{stack_name} update started".green
|
175
171
|
end
|
176
172
|
end
|
177
173
|
|
@@ -184,9 +180,7 @@ module PrimaAwsClient
|
|
184
180
|
capabilities: ['CAPABILITY_IAM']
|
185
181
|
}
|
186
182
|
|
187
|
-
|
188
|
-
cf_args.merge!(role_arn: role)
|
189
|
-
end
|
183
|
+
cf_args.merge!(role_arn: role) unless role.nil?
|
190
184
|
|
191
185
|
begin
|
192
186
|
cf_client.update_stack(cf_args)
|
@@ -197,64 +191,63 @@ module PrimaAwsClient
|
|
197
191
|
rescue Aws::CloudFormation::Errors::ValidationError => e
|
198
192
|
raise e
|
199
193
|
else
|
200
|
-
output "
|
194
|
+
output "CloudFormation stack #{stack_name} update started".green
|
201
195
|
end
|
202
196
|
end
|
203
197
|
|
204
198
|
def stack_exists?(stack_name)
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
end
|
199
|
+
cf_client.describe_stacks(stack_name: stack_name)
|
200
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
201
|
+
output 'Throttling, retrying in 15 seconds'.red
|
202
|
+
sleep 15
|
203
|
+
stack_exists?(stack_name)
|
204
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
205
|
+
return false if e.message.include? 'does not exist'
|
206
|
+
|
207
|
+
raise e
|
208
|
+
else
|
209
|
+
true
|
217
210
|
end
|
218
211
|
|
219
212
|
def delete_stack(stack_name)
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
output "Stack #{stack_name} spenta con successo\n".green
|
228
|
-
end
|
213
|
+
cf_client.delete_stack(stack_name: stack_name)
|
214
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
215
|
+
output 'Throttling, retrying in 15 seconds'.red
|
216
|
+
sleep 15
|
217
|
+
delete_stack(stack_name)
|
218
|
+
else
|
219
|
+
output "Stack #{stack_name} shutdown succesfully\n".green
|
229
220
|
end
|
230
221
|
|
231
|
-
def wait_for_stack_ready(stack_name, failed_statuses = [
|
222
|
+
def wait_for_stack_ready(stack_name, failed_statuses = %w[CREATE_FAILED ROLLBACK_IN_PROGRESS ROLLBACK_FAILED DELETE_IN_PROGRESS DELETE_FAILED DELETE_COMPLETE UPDATE_ROLLBACK_FAILED UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS])
|
232
223
|
ready = false
|
233
224
|
sleep_seconds = 13
|
234
|
-
output "
|
235
|
-
|
225
|
+
output "Waiting for stack #{stack_name}...\n".yellow
|
226
|
+
until ready
|
236
227
|
ready = true if stack_ready?(stack_name, failed_statuses)
|
237
228
|
seconds_elapsed = 0
|
238
229
|
loop do
|
239
230
|
break if seconds_elapsed >= sleep_seconds
|
231
|
+
|
240
232
|
print '.'.yellow; STDOUT.flush
|
241
233
|
sleep 1
|
242
234
|
seconds_elapsed += 1
|
243
235
|
end
|
244
236
|
end
|
245
|
-
output "\nStack #{stack_name}
|
237
|
+
output "\nStack #{stack_name} ready!\n".green
|
246
238
|
end
|
247
239
|
|
248
240
|
def wait_for_stack_removal(stack_name)
|
249
241
|
ready = false
|
250
242
|
sleep_seconds = 13
|
251
243
|
sleep 10
|
252
|
-
output "
|
253
|
-
|
244
|
+
output "Waiting for stack #{stack_name}...\n".yellow
|
245
|
+
until ready
|
254
246
|
ready = true if stack_deleted?(stack_name)
|
255
247
|
seconds_elapsed = 0
|
256
248
|
loop do
|
257
249
|
break if seconds_elapsed >= sleep_seconds
|
250
|
+
|
258
251
|
print '.'.yellow; STDOUT.flush
|
259
252
|
sleep 1
|
260
253
|
seconds_elapsed += 1
|
@@ -264,55 +257,46 @@ module PrimaAwsClient
|
|
264
257
|
end
|
265
258
|
|
266
259
|
def get_stack_tags(name)
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
resp.stacks[0].tags
|
275
|
-
end
|
260
|
+
resp = cf_client.describe_stacks(stack_name: name)
|
261
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
262
|
+
output 'Throttling, retrying in 15 seconds'.red
|
263
|
+
sleep 15
|
264
|
+
get_stack_tags(name)
|
265
|
+
else
|
266
|
+
resp.stacks[0].tags
|
276
267
|
end
|
277
268
|
|
278
269
|
def get_stack_parameters(name)
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
resp.stacks[0].parameters
|
287
|
-
end
|
270
|
+
resp = cf_client.describe_stacks(stack_name: name)
|
271
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
272
|
+
output 'Throttling, retrying in 15 seconds'.red
|
273
|
+
sleep 15
|
274
|
+
get_stack_parameters(name)
|
275
|
+
else
|
276
|
+
resp.stacks[0].parameters
|
288
277
|
end
|
289
278
|
|
290
279
|
def get_stack_outputs(name)
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
resp.stacks[0].outputs
|
299
|
-
end
|
280
|
+
resp = cf_client.describe_stacks(stack_name: name)
|
281
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
282
|
+
output 'Throttling, retrying in 15 seconds'.red
|
283
|
+
sleep 15
|
284
|
+
get_stack_outputs(name)
|
285
|
+
else
|
286
|
+
resp.stacks[0].outputs
|
300
287
|
end
|
301
288
|
|
302
289
|
def get_stack_template(name)
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
resp.template_body
|
311
|
-
end
|
312
|
-
|
290
|
+
resp = cf_client.get_template(stack_name: name)
|
291
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
292
|
+
output 'Throttling, retrying in 15 seconds'.red
|
293
|
+
sleep 15
|
294
|
+
get_stack_template(name)
|
295
|
+
else
|
296
|
+
resp.template_body
|
313
297
|
end
|
314
298
|
|
315
|
-
def stack_ready?(stack_name, failed_statuses = [
|
299
|
+
def stack_ready?(stack_name, failed_statuses = %w[CREATE_FAILED ROLLBACK_IN_PROGRESS ROLLBACK_FAILED DELETE_IN_PROGRESS DELETE_FAILED DELETE_COMPLETE UPDATE_ROLLBACK_FAILED UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS])
|
316
300
|
begin
|
317
301
|
resp = cf_client.describe_stacks(
|
318
302
|
stack_name: stack_name
|
@@ -323,10 +307,11 @@ module PrimaAwsClient
|
|
323
307
|
return false
|
324
308
|
end
|
325
309
|
raise "The stack #{stack_name} errored out" if failed_statuses.include? stack_status
|
326
|
-
|
310
|
+
|
311
|
+
%w[CREATE_COMPLETE UPDATE_COMPLETE UPDATE_ROLLBACK_COMPLETE ROLLBACK_COMPLETE].include? stack_status
|
327
312
|
end
|
328
313
|
|
329
|
-
def stack_deleted?(stack_name, failed_statuses = [
|
314
|
+
def stack_deleted?(stack_name, failed_statuses = %w[ROLLBACK_IN_PROGRESS ROLLBACK_FAILED DELETE_FAILED UPDATE_ROLLBACK_FAILED UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS])
|
330
315
|
begin
|
331
316
|
resp = cf_client.describe_stacks(
|
332
317
|
stack_name: stack_name
|
@@ -340,6 +325,7 @@ module PrimaAwsClient
|
|
340
325
|
return true
|
341
326
|
end
|
342
327
|
raise "The stack #{stack_name} errored out" if failed_statuses.include? stack_status
|
328
|
+
|
343
329
|
['DELETE_COMPLETE'].include? stack_status
|
344
330
|
end
|
345
331
|
|
@@ -352,38 +338,39 @@ module PrimaAwsClient
|
|
352
338
|
!resp.contents.empty?
|
353
339
|
end
|
354
340
|
|
355
|
-
def upload_artifact(source_path, destination_path, bucket_name_override=nil)
|
356
|
-
output "
|
341
|
+
def upload_artifact(source_path, destination_path, bucket_name_override = nil)
|
342
|
+
output "Uploading artifact (#{(File.size(source_path).to_f / 2**20).round(2)} MiB)\n".yellow
|
357
343
|
s3 = Aws::S3::Resource.new
|
358
|
-
s3_bucket =
|
344
|
+
s3_bucket = !bucket_name_override.nil? ? bucket_name_override : @s3_bucket
|
359
345
|
puts s3_bucket
|
360
346
|
obj = s3.bucket(s3_bucket).object(destination_path)
|
361
347
|
obj.upload_file(source_path)
|
362
348
|
|
363
|
-
output "#{s3_bucket}/#{destination_path}
|
349
|
+
output "#{s3_bucket}/#{destination_path} upload success!\n".green
|
364
350
|
end
|
365
351
|
|
366
352
|
def wait_for_artifact(bucket, path)
|
367
353
|
ready = artifact_exists?(bucket, path)
|
368
354
|
sleep_seconds = 13
|
369
|
-
output "
|
355
|
+
output "Wating that artifact #{path} becomes ready...\n".yellow
|
370
356
|
retries = 0
|
371
|
-
|
357
|
+
until ready
|
372
358
|
ready = true if artifact_exists?(bucket, path)
|
373
359
|
seconds_elapsed = 0
|
374
360
|
loop do
|
375
361
|
break if seconds_elapsed >= sleep_seconds
|
362
|
+
|
376
363
|
print '.'.yellow; STDOUT.flush
|
377
364
|
sleep 1
|
378
365
|
seconds_elapsed += 1
|
379
366
|
end
|
380
367
|
retries += 1
|
381
368
|
if retries > 150
|
382
|
-
output "\n
|
369
|
+
output "\n Artifact #{path} timed out\n".red
|
383
370
|
exit
|
384
371
|
end
|
385
372
|
end
|
386
|
-
output "\
|
373
|
+
output "\nArtifact #{path} created!\n".green
|
387
374
|
end
|
388
375
|
|
389
376
|
def list_import_stacks(export_name)
|
@@ -391,7 +378,7 @@ module PrimaAwsClient
|
|
391
378
|
next_token = ''
|
392
379
|
loop do
|
393
380
|
print '.'.yellow; STDOUT.flush
|
394
|
-
options = next_token != '' ? { export_name: export_name, next_token: next_token } : {export_name: export_name}
|
381
|
+
options = next_token != '' ? { export_name: export_name, next_token: next_token } : { export_name: export_name }
|
395
382
|
begin
|
396
383
|
resp = cf_client.list_imports(options)
|
397
384
|
rescue Aws::CloudFormation::Errors::Throttling => e
|
@@ -401,94 +388,81 @@ module PrimaAwsClient
|
|
401
388
|
end
|
402
389
|
stacks += resp.imports
|
403
390
|
break unless resp.next_token
|
391
|
+
|
404
392
|
next_token = resp.next_token
|
405
393
|
end
|
406
394
|
stacks
|
407
395
|
end
|
408
396
|
|
409
397
|
def describe_stack_resource(cluster_stack_name, logical_resource_id)
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
resp = describe_stack_resource(cluster_stack_name, logical_resource_id)
|
416
|
-
end
|
398
|
+
resp = cf_client.describe_stack_resource({ stack_name: cluster_stack_name, logical_resource_id: logical_resource_id })
|
399
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
400
|
+
output 'Throttling, retrying in 15 seconds'.red
|
401
|
+
sleep 15
|
402
|
+
resp = describe_stack_resource(cluster_stack_name, logical_resource_id)
|
417
403
|
end
|
418
404
|
|
419
405
|
def describe_instances(instance_ids)
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
resp = describe_instances(instance_ids)
|
426
|
-
end
|
406
|
+
resp = ec2_client.describe_instances({ instance_ids: instance_ids })
|
407
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
408
|
+
output 'Throttling, retrying in 15 seconds'.red
|
409
|
+
sleep 15
|
410
|
+
resp = describe_instances(instance_ids)
|
427
411
|
end
|
428
412
|
|
429
413
|
def describe_auto_scaling_groups(auto_scaling_group_names, max_records)
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
resp = describe_auto_scaling_groups(auto_scaling_group_names, max_records)
|
439
|
-
end
|
414
|
+
resp = asg_client.describe_auto_scaling_groups({
|
415
|
+
auto_scaling_group_names: auto_scaling_group_names,
|
416
|
+
max_records: max_records
|
417
|
+
})
|
418
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
419
|
+
output 'Throttling, retrying in 15 seconds'.red
|
420
|
+
sleep 15
|
421
|
+
resp = describe_auto_scaling_groups(auto_scaling_group_names, max_records)
|
440
422
|
end
|
441
423
|
|
442
424
|
def describe_load_balancers(load_balancer_arns)
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
resp = describe_load_balancers(load_balancer_arns)
|
449
|
-
end
|
425
|
+
resp = alb_client.describe_load_balancers({ load_balancer_arns: load_balancer_arns })
|
426
|
+
rescue Aws::ElasticLoadBalancingV2::Errors::Throttling => e
|
427
|
+
output 'Throttling, retrying in 15 seconds'.red
|
428
|
+
sleep 15
|
429
|
+
resp = describe_load_balancers(load_balancer_arns)
|
450
430
|
end
|
451
431
|
|
452
432
|
def update_ecs_service(cluster, service, deployment_configuration)
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
resp = update_ecs_service(cluster, service, deployment_configuration)
|
463
|
-
end
|
433
|
+
resp = ecs_client.update_service(
|
434
|
+
cluster: cluster,
|
435
|
+
service: service,
|
436
|
+
deployment_configuration: deployment_configuration
|
437
|
+
)
|
438
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
439
|
+
output 'Throttling, retrying in 15 seconds'.red
|
440
|
+
sleep 15
|
441
|
+
resp = update_ecs_service(cluster, service, deployment_configuration)
|
464
442
|
end
|
465
443
|
|
466
444
|
def describe_ecs_tasks(cluster, tasks)
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
resp = describe_ecs_tasks(cluster, tasks)
|
476
|
-
end
|
445
|
+
resp = ecs_client.describe_tasks({
|
446
|
+
cluster: cluster,
|
447
|
+
tasks: tasks
|
448
|
+
})
|
449
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
450
|
+
output 'Throttling, retrying in 15 seconds'.red
|
451
|
+
sleep 15
|
452
|
+
resp = describe_ecs_tasks(cluster, tasks)
|
477
453
|
end
|
478
454
|
|
479
455
|
def run_ecs_task(cluster, task_definition, overrides, count)
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
resp = run_ecs_task(cluster, task_definition, overrides, count)
|
491
|
-
end
|
456
|
+
resp = ecs_client.run_task({
|
457
|
+
cluster: cluster,
|
458
|
+
task_definition: task_definition,
|
459
|
+
overrides: overrides,
|
460
|
+
count: count
|
461
|
+
})
|
462
|
+
rescue Aws::CloudFormation::Errors::Throttling => e
|
463
|
+
output 'Throttling, retrying in 15 seconds'.red
|
464
|
+
sleep 15
|
465
|
+
resp = run_ecs_task(cluster, task_definition, overrides, count)
|
492
466
|
end
|
493
467
|
|
494
468
|
def get_autoscaling_capacity(asg_name)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prima-twig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matteo Giachino
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2020-11-
|
17
|
+
date: 2020-11-18 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: aws-sdk-autoscaling
|