prima-twig 0.54.235 → 0.55.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,7 @@ require_relative '../lib/prima_twig.rb'
5
5
  require_relative '../lib/prima_aws_client.rb'
6
6
  require 'launchy'
7
7
  require 'json'
8
- require 'aws-sdk-s3'
8
+ require 'aws-sdk'
9
9
 
10
10
  class TwigUpdateAmi
11
11
  include Command
@@ -29,8 +29,8 @@ class TwigUpdateAmi
29
29
  Dir.chdir 'ami'
30
30
  update_instance_name(ami_id, ami_name, ami_description, ami_template)
31
31
  output 'running packer update (this could take some time)'.light_green
32
- new_ami_id = update_packer(ami_template, env)
33
- # new_ami_id = 'ami-026890988d91ee8c6'
32
+ new_ami_id = update_packer(ami_template)
33
+ # new_ami_id = 'ami-000e38f3a919824ae'
34
34
  Dir.chdir '..'
35
35
  stop_if(new_ami_id.to_s.empty?, 'Failed to generate AMI!'.red)
36
36
  output "new ami id: #{new_ami_id}"
@@ -50,33 +50,33 @@ class TwigUpdateAmi
50
50
  if stack.include?('qa')
51
51
  output "skipping stack #{stack} because is a qa"
52
52
  next
53
- else
53
+ elsif stack.include?('batch')
54
+ stack_parameters = update_stack_parameters(get_stack_parameters(stack),
55
+ [
56
+ { parameter_key: 'AMIID', parameter_value: new_ami_id }
57
+ ]
58
+ )
59
+ update_stack(stack, get_stack_template(stack), stack_parameters)
60
+ elsif stack.include?('fleet')
54
61
  stack_tags = tags_to_hashes(get_stack_tags(stack))
55
62
  stack_tags['TemplateVersion'] = stack_tags['TemplateVersion'].to_i + 1
56
63
 
57
- if stack.include?('batch')
58
- stack_parameters = update_stack_parameters(get_stack_parameters(stack),
59
- [
60
- { parameter_key: 'AMIID', parameter_value: new_ami_id },
61
- { parameter_key: 'TemplateVersion', parameter_value: stack_tags['TemplateVersion'].to_s }
62
- ]
63
- )
64
- if stack.include?('offsite-backups')
65
- stack_template = File.read("./cloudformation/stacks/batch/compute-environment-offsite-backups.yml")
66
- else
67
- stack_template = File.read("./cloudformation/stacks/batch/compute-environment.yml")
68
- end
69
- else
70
- stack_parameters = update_stack_parameters(get_stack_parameters(stack),
71
- [
72
- { parameter_key: 'AMIID', parameter_value: new_ami_id },
73
- { parameter_key: 'DesiredCapacity', parameter_value: get_desired_capacity(stack).to_s },
74
- { parameter_key: 'TemplateVersion', parameter_value: stack_tags['TemplateVersion'].to_s }
75
- ]
76
- )
77
- stack_template = File.read("./cloudformation/stacks/asg/#{stack.to_s.split("/")[1]}.yml")
78
- end
79
- update_stack(stack, stack_template, stack_parameters, hashes_to_tags(stack_tags))
64
+ stack_parameters = update_stack_parameters(get_stack_parameters(stack),
65
+ [
66
+ { parameter_key: 'AMIID', parameter_value: new_ami_id },
67
+ { parameter_key: 'DesiredCapacity', parameter_value: get_desired_capacity(stack).to_s },
68
+ { parameter_key: 'TemplateVersion', parameter_value: stack_tags['TemplateVersion'].to_s }
69
+ ]
70
+ )
71
+ update_stack(stack, get_stack_template(stack), stack_parameters, hashes_to_tags(stack_tags))
72
+ else # autoscaling group normali come ania-tools
73
+ stack_parameters = update_stack_parameters(get_stack_parameters(stack),
74
+ [
75
+ { parameter_key: 'AMIID', parameter_value: new_ami_id },
76
+ { parameter_key: 'DesiredCapacity', parameter_value: get_desired_capacity(stack).to_s }
77
+ ]
78
+ )
79
+ update_stack(stack, get_stack_template(stack), stack_parameters)
80
80
  end
81
81
  end
82
82
 
@@ -149,8 +149,8 @@ class TwigUpdateAmi
149
149
  end
150
150
  end
151
151
 
152
- def update_packer(json_filename, env)
153
- execute_command "AWS_MAX_ATTEMPTS=90 AWS_POLL_DELAY_SECONDS=60 packer build -var datadog_apikey=`biscuit get -f ../configs/secrets/common.yml common_production_apikey_datadog` -var github_token=`biscuit get -f ../configs/secrets/common.yml common_private_repo_github_token` -var drone_key=\"`biscuit get -f ../configs/secrets/common.yml drone_license_key`\" -var env=#{env} -machine-readable ./#{json_filename} | tee build.log"
152
+ def update_packer(json_filename)
153
+ execute_command "packer build -var datadog_apikey=`biscuit get -f ../configs/secrets/common.yml common_production_apikey_datadog` -var github_token=`biscuit get -f ../configs/secrets/common.yml common_private_repo_github_token` -var drone_key=\"`biscuit get -f ../configs/secrets/common.yml drone_license_key`\" -machine-readable ./#{json_filename} | tee build.log"
154
154
  `grep 'artifact,0,id' build.log | cut -d, -f6 | cut -d: -f2`.sub(/\n/, '')
155
155
  end
156
156
 
@@ -1,11 +1,4 @@
1
- require 'aws-sdk-autoscaling'
2
- require 'aws-sdk-batch'
3
- require 'aws-sdk-cloudformation'
4
- require 'aws-sdk-cloudfront'
5
- require 'aws-sdk-ec2'
6
- require 'aws-sdk-ecs'
7
- require 'aws-sdk-elasticloadbalancingv2'
8
- require 'aws-sdk-s3'
1
+ require 'aws-sdk'
9
2
  require 'colorize'
10
3
  #
11
4
  module PrimaAwsClient
@@ -25,14 +18,6 @@ module PrimaAwsClient
25
18
  @ec2 ||= Aws::EC2::Client.new
26
19
  end
27
20
 
28
- def alb_client
29
- @alb ||= Aws::ElasticLoadBalancingV2::Client.new
30
- end
31
-
32
- def ecs_client
33
- @ecs ||= Aws::ECS::Client.new
34
- end
35
-
36
21
  def stack_list
37
22
  stacks = []
38
23
  next_token = ''
@@ -219,24 +204,6 @@ module PrimaAwsClient
219
204
  output "\nStack #{stack_name} pronto!\n".green
220
205
  end
221
206
 
222
- def wait_for_stack_removal(stack_name)
223
- ready = false
224
- sleep_seconds = 13
225
- sleep 10
226
- output "Attendo che lo stack #{stack_name} finisca di essere cancellato...\n".yellow
227
- while !ready
228
- ready = true if stack_deleted?(stack_name)
229
- seconds_elapsed = 0
230
- loop do
231
- break if seconds_elapsed >= sleep_seconds
232
- print '.'.yellow; STDOUT.flush
233
- sleep 1
234
- seconds_elapsed += 1
235
- end
236
- end
237
- output "\nStack #{stack_name} eliminato!\n".green
238
- end
239
-
240
207
  def get_stack_tags(name)
241
208
  begin
242
209
  resp = cf_client.describe_stacks(stack_name: name)
@@ -300,23 +267,6 @@ module PrimaAwsClient
300
267
  ['CREATE_COMPLETE', 'UPDATE_COMPLETE', 'UPDATE_ROLLBACK_COMPLETE', 'ROLLBACK_COMPLETE'].include? stack_status
301
268
  end
302
269
 
303
- def stack_deleted?(stack_name, failed_statuses = ['ROLLBACK_IN_PROGRESS', 'ROLLBACK_FAILED', 'DELETE_FAILED', 'UPDATE_ROLLBACK_FAILED', 'UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS'])
304
- begin
305
- resp = cf_client.describe_stacks(
306
- stack_name: stack_name
307
- )
308
- stack_status = resp.stacks[0].stack_status
309
- rescue Aws::CloudFormation::Errors::Throttling => e
310
- print 'Throttling'.red; STDOUT.flush
311
- return false
312
- rescue Aws::CloudFormation::Errors::ValidationError => e
313
- print 'Stack deleted'
314
- return true
315
- end
316
- raise "The stack #{stack_name} errored out" if failed_statuses.include? stack_status
317
- ['DELETE_COMPLETE'].include? stack_status
318
- end
319
-
320
270
  def artifact_exists?(bucket, path)
321
271
  resp = s3_client.list_objects(
322
272
  bucket: bucket,
@@ -337,29 +287,6 @@ module PrimaAwsClient
337
287
  output "#{s3_bucket}/#{destination_path} uploadato con successo!\n".green
338
288
  end
339
289
 
340
- def wait_for_artifact(bucket, path)
341
- ready = artifact_exists?(bucket, path)
342
- sleep_seconds = 13
343
- output "Attendo che sia pronto l'artefatto #{path}...\n".yellow
344
- retries = 0
345
- while !ready
346
- ready = true if artifact_exists?(bucket, path)
347
- seconds_elapsed = 0
348
- loop do
349
- break if seconds_elapsed >= sleep_seconds
350
- print '.'.yellow; STDOUT.flush
351
- sleep 1
352
- seconds_elapsed += 1
353
- end
354
- retries += 1
355
- if retries > 150
356
- output "\n Timeout raggiunto aspettando #{path}\n".red
357
- exit
358
- end
359
- end
360
- output "\nArtefatto #{path} creato!\n".green
361
- end
362
-
363
290
  def list_import_stacks(export_name)
364
291
  stacks = []
365
292
  next_token = ''
@@ -380,91 +307,6 @@ module PrimaAwsClient
380
307
  stacks
381
308
  end
382
309
 
383
- def describe_stack_resource(cluster_stack_name, logical_resource_id)
384
- begin
385
- resp = cf_client.describe_stack_resource({stack_name: cluster_stack_name, logical_resource_id: logical_resource_id})
386
- rescue Aws::CloudFormation::Errors::Throttling => e
387
- output 'Throttling, retrying in 15 seconds'.red
388
- sleep 15
389
- resp = describe_stack_resource(cluster_stack_name, logical_resource_id)
390
- end
391
- end
392
-
393
- def describe_instances(instance_ids)
394
- begin
395
- resp = ec2_client.describe_instances({instance_ids: instance_ids})
396
- rescue Aws::CloudFormation::Errors::Throttling => e
397
- output 'Throttling, retrying in 15 seconds'.red
398
- sleep 15
399
- resp = describe_instances(instance_ids)
400
- end
401
- end
402
-
403
- def describe_auto_scaling_groups(auto_scaling_group_names, max_records)
404
- begin
405
- resp = asg_client.describe_auto_scaling_groups({
406
- auto_scaling_group_names: auto_scaling_group_names,
407
- max_records: max_records
408
- })
409
- rescue Aws::CloudFormation::Errors::Throttling => e
410
- output 'Throttling, retrying in 15 seconds'.red
411
- sleep 15
412
- resp = describe_auto_scaling_groups(auto_scaling_group_names, max_records)
413
- end
414
- end
415
-
416
- def describe_load_balancers(load_balancer_arns)
417
- begin
418
- resp = alb_client.describe_load_balancers({load_balancer_arns: load_balancer_arns})
419
- rescue Aws::CloudFormation::Errors::Throttling => e
420
- output 'Throttling, retrying in 15 seconds'.red
421
- sleep 15
422
- resp = describe_load_balancers(load_balancer_arns)
423
- end
424
- end
425
-
426
- def update_ecs_service(cluster, service, deployment_configuration)
427
- begin
428
- resp = ecs_client.update_service(
429
- cluster: cluster,
430
- service: service,
431
- deployment_configuration: deployment_configuration
432
- )
433
- rescue Aws::CloudFormation::Errors::Throttling => e
434
- output 'Throttling, retrying in 15 seconds'.red
435
- sleep 15
436
- resp = update_ecs_service(cluster, service, deployment_configuration)
437
- end
438
- end
439
-
440
- def describe_ecs_tasks(cluster, tasks)
441
- begin
442
- resp = ecs_client.describe_tasks({
443
- cluster: cluster,
444
- tasks: tasks
445
- })
446
- rescue Aws::CloudFormation::Errors::Throttling => e
447
- output 'Throttling, retrying in 15 seconds'.red
448
- sleep 15
449
- resp = describe_ecs_tasks(cluster, tasks)
450
- end
451
- end
452
-
453
- def run_ecs_task(cluster, task_definition, overrides, count)
454
- begin
455
- resp = ecs_client.run_task({
456
- cluster: cluster,
457
- task_definition: task_definition,
458
- overrides: overrides,
459
- count: count
460
- })
461
- rescue Aws::CloudFormation::Errors::Throttling => e
462
- output 'Throttling, retrying in 15 seconds'.red
463
- sleep 15
464
- resp = run_ecs_task(cluster, task_definition, overrides, count)
465
- end
466
- end
467
-
468
310
  def get_autoscaling_capacity(asg_name)
469
311
  resp = asg_client.describe_auto_scaling_groups(auto_scaling_group_names: [asg_name])
470
312
  resp.auto_scaling_groups[0].desired_capacity
@@ -4,7 +4,7 @@ require 'octokit'
4
4
  require 'yaml'
5
5
  require 'rugged'
6
6
  require 'highline/import'
7
- require 'aws-sdk-core'
7
+ require 'aws-sdk'
8
8
  require 'rubyflare'
9
9
 
10
10
  class Prima
@@ -20,9 +20,7 @@ class Prima
20
20
  @twig = Twig.new(:read_options => true, :max_days_old => 30)
21
21
  unless has_config?
22
22
  if File.exist?('../prima/twig.yml')
23
- `cp ../prima/twig.yml .`
24
- elsif File.exist?('/tmp/twig.yml')
25
- `cp /tmp/twig.yml .`
23
+ `cp ../prima/twig.yml .`
26
24
  else
27
25
  generate_config
28
26
  end
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: 0.54.235
4
+ version: 0.55.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matteo Giachino
@@ -14,122 +14,10 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2020-06-08 00:00:00.000000000 Z
17
+ date: 2019-11-18 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
- name: aws-sdk-autoscaling
21
- requirement: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: '1'
26
- type: :runtime
27
- prerelease: false
28
- version_requirements: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: '1'
33
- - !ruby/object:Gem::Dependency
34
- name: aws-sdk-batch
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '1'
40
- type: :runtime
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '1'
47
- - !ruby/object:Gem::Dependency
48
- name: aws-sdk-cloudformation
49
- requirement: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '1'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '1'
61
- - !ruby/object:Gem::Dependency
62
- name: aws-sdk-cloudfront
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '1'
68
- type: :runtime
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '1'
75
- - !ruby/object:Gem::Dependency
76
- name: aws-sdk-ec2
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '1'
82
- type: :runtime
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '1'
89
- - !ruby/object:Gem::Dependency
90
- name: aws-sdk-ecs
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '1'
96
- type: :runtime
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '1'
103
- - !ruby/object:Gem::Dependency
104
- name: aws-sdk-elasticloadbalancingv2
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '1'
110
- type: :runtime
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '1'
117
- - !ruby/object:Gem::Dependency
118
- name: aws-sdk-s3
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '1'
124
- type: :runtime
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '1'
131
- - !ruby/object:Gem::Dependency
132
- name: aws-sdk-core
20
+ name: aws-sdk
133
21
  requirement: !ruby/object:Gem::Requirement
134
22
  requirements:
135
23
  - - "~>"
@@ -285,7 +173,6 @@ dependencies:
285
173
  description: Our tools to manage git and github
286
174
  email: matteo.giachino@prima.it
287
175
  executables:
288
- - twig-build
289
176
  - twig-circle
290
177
  - twig-deploy
291
178
  - twig-feature
@@ -297,7 +184,6 @@ executables:
297
184
  extensions: []
298
185
  extra_rdoc_files: []
299
186
  files:
300
- - bin/twig-build
301
187
  - bin/twig-circle
302
188
  - bin/twig-deploy
303
189
  - bin/twig-feature
@@ -328,7 +214,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
328
214
  - !ruby/object:Gem::Version
329
215
  version: '0'
330
216
  requirements: []
331
- rubygems_version: 3.0.1
217
+ rubyforge_project:
218
+ rubygems_version: 2.7.8
332
219
  signing_key:
333
220
  specification_version: 4
334
221
  summary: The Prima twig toolbelt