prima-twig 0.58.509 → 0.59.0

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.
@@ -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
@@ -219,24 +212,6 @@ module PrimaAwsClient
219
212
  output "\nStack #{stack_name} pronto!\n".green
220
213
  end
221
214
 
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
215
  def get_stack_tags(name)
241
216
  begin
242
217
  resp = cf_client.describe_stacks(stack_name: name)
@@ -300,23 +275,6 @@ module PrimaAwsClient
300
275
  ['CREATE_COMPLETE', 'UPDATE_COMPLETE', 'UPDATE_ROLLBACK_COMPLETE', 'ROLLBACK_COMPLETE'].include? stack_status
301
276
  end
302
277
 
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
278
  def artifact_exists?(bucket, path)
321
279
  resp = s3_client.list_objects(
322
280
  bucket: bucket,
@@ -337,23 +295,6 @@ module PrimaAwsClient
337
295
  output "#{s3_bucket}/#{destination_path} uploadato con successo!\n".green
338
296
  end
339
297
 
340
- def wait_for_artifact(bucket, path)
341
- ready = artifact_exists?(bucket, path)
342
- sleep_seconds = 13
343
- output "Attendo che lo sia pronto l'artefatto #{path}...\n".yellow
344
- while !ready
345
- ready = true if artifact_exists?(bucket, path)
346
- seconds_elapsed = 0
347
- loop do
348
- break if seconds_elapsed >= sleep_seconds
349
- print '.'.yellow; STDOUT.flush
350
- sleep 1
351
- seconds_elapsed += 1
352
- end
353
- end
354
- output "\nArtefatto #{path} creato!\n".green
355
- end
356
-
357
298
  def list_import_stacks(export_name)
358
299
  stacks = []
359
300
  next_token = ''
@@ -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.58.509
4
+ version: 0.59.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-04-10 00:00:00.000000000 Z
17
+ date: 2019-11-26 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,7 @@ 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
+ rubygems_version: 3.0.3
332
218
  signing_key:
333
219
  specification_version: 4
334
220
  summary: The Prima twig toolbelt
@@ -1,1914 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rubygems'
4
- require_relative '../lib/prima_twig.rb'
5
- require_relative '../lib/prima_aws_client.rb'
6
- require 'digest'
7
- require 'json'
8
- require 'launchy'
9
- require 'pp'
10
- require 'redis'
11
-
12
- class Build
13
- include Command
14
- include PrimaAwsClient
15
-
16
- def initialize(update_gem=true)
17
- @prima = Prima.new
18
- if update_gem
19
- output 'Controllo se ci sono aggiornamenti da fare (potrebbe richiedere qualche minuto)'
20
- unless `gem update prima-twig`=="Updating installed gems\nNothing to update\n"
21
- output 'Gemma prima-twig aggiornata'
22
- exec "twig build #{ARGV.join ' '}"
23
- end
24
- end
25
- @batch = Aws::Batch::Client.new
26
- @s3 = Aws::S3::Client.new
27
- @s3_bucket = 'prima-artifacts'
28
- @artifact_path = '/tmp/prima-artifact.zip'
29
- @import_db_task = 'arn:aws:ecs:eu-west-1:001575623345:task-definition/ecs-task-db-restore2-TaskDefinitionDbRestore-4UBHMCZBE5WM:1'
30
- @cf_role = 'arn:aws:iam::001575623345:role/qainit-service-role-cloudformat-CloudformationRole-18KBZQIS148R9'
31
- @ecs_cluster_name = nil
32
- @deploy_update = false
33
- @qainit = false
34
- @qainit_host_folder = "/var/ci/#{ENV['DRONE_REPO']}/#{ENV['DRONE_BRANCH']}/#{ENV['DRONE_BUILD_NUMBER']}"
35
- @qainit_folder = "/drone/src/github.com/project/primait/qainit"
36
- @projects = {
37
- 'prima' => {},
38
- 'urania' => {},
39
- 'ermes' => {},
40
- 'bburago' => {},
41
- 'hal9000' => {},
42
- 'fidaty' => {},
43
- 'peano' => {},
44
- 'rogoreport' => {},
45
- 'assange' => {},
46
- 'borat' => {},
47
- 'crash' => {},
48
- 'activia' => {},
49
- 'skynet' => {},
50
- 'roger' => {},
51
- 'rachele' => {},
52
- 'leftorium' => {},
53
- 'pyxis-npm' => {},
54
- 'starsky' => {},
55
- 'hutch' => {},
56
- 'maia' => {}
57
- }
58
- @base_stack_name_alb = 'ecs-alb-http-public-qa-'
59
- @base_stack_name_alb_ws = 'ecs-alb-ws-public-qa-'
60
- @git_branch = ''
61
- @cloudflare = Rubyflare.connect_with(ENV['CLOUDFLARE_EMAIL'], ENV['CLOUDFLARE_APIKEY'])
62
- end
63
-
64
- def execute!(args)
65
- qainit_read_config!
66
- abort('Non sei nella cartella di qainit') unless Dir.pwd.match 'qainit$' or Dir.pwd.match '/drone/src'
67
- case args[0]
68
- when 'infrastructure'
69
- create_infrastructure_stacks! unless is_shutdown?
70
- when 'project'
71
- proj_method = "create_#{args[1]}_stack"
72
- self.send(proj_method.to_sym) unless is_shutdown?
73
- when 'complete'
74
- if is_shutdown?
75
- output 'Shutting down'.green
76
- qainit_drone_shutdown!
77
- else
78
- complete_qa_setup!
79
- end
80
- end
81
- end
82
-
83
- def is_shutdown?
84
- return ENV['DRONE_COMMIT_MESSAGE'] == 'shutdown'
85
- end
86
-
87
- def qainit_drone_shutdown!
88
- output "Recupero le informazioni sui QA attivi..."
89
- stack_list, envs = get_stacks
90
-
91
- env_hash = "qa-" + get_deploy_id
92
-
93
- cluster_stack_name = nil
94
- stacks_to_delete = []
95
- stack_list.each do |stack|
96
- if stack.stack_name.match(/#{env_hash}$/)
97
- if stack.stack_name.match(/ecs-cluster/)
98
- cluster_stack_name = stack.stack_name
99
- else
100
- break unless stack.stack_name.match(/#{env_hash}$/)
101
- stacks_to_delete.push(stack.stack_name)
102
- delete_stack(stack.stack_name)
103
- end
104
- end
105
- end
106
-
107
- cluster_stack_name = "ecs-cluster-#{env_hash}"
108
- if stack_exists?(cluster_stack_name)
109
- aggregator_enabled = get_stack_tags(cluster_stack_name).detect do |tag|
110
- tag.key === "hostname_pattern_priority" and tag.value === "1"
111
- end.is_a?(Aws::CloudFormation::Types::Tag)
112
-
113
- if aggregator_enabled
114
- dns_to_staging(env_hash)
115
- end
116
- end
117
-
118
- # Se non ha finito di cancellare le altre non si puo' cancellare il cluster
119
- output "Attendo 10 secondi per poter eliminare il cluster ECS"
120
-
121
- while stacks_to_delete.length > 0
122
- sleep 13
123
- stacks_to_delete.each do |stack_name|
124
- stacks_to_delete = stacks_to_delete - [stack_name] unless stack_exists?(stack_name)
125
- end
126
- output "Stack ancora attivi: #{stacks_to_delete.length.to_s}. Attendo altri 10 secondi per eliminare il cluster ECS"
127
- end
128
-
129
- delete_stack(cluster_stack_name) if stack_exists?(cluster_stack_name)
130
- delete_stack(@base_stack_name_alb + env_hash[3..8]) if stack_exists?(@base_stack_name_alb + env_hash[3..8])
131
- delete_stack(@base_stack_name_alb_ws + env_hash[3..8]) if stack_exists?(@base_stack_name_alb_ws + env_hash[3..8])
132
- `git checkout master && git push origin --delete ${DRONE_BRANCH}`
133
- output "Cancello il record DNS utilizzato da Lighthouse"
134
- delete_lighthouse_dns()
135
- output "Finito!".green
136
-
137
- if @qainit
138
- qainit_write_output("QA #{ENV["DRONE_BRANCH"]} spento.", 'Indirizzi scritti su ')
139
- end
140
- end
141
-
142
- def qainit_write_output(file_message, output_message)
143
- `mkdir -p /etc/qainit-output`
144
- qa_file_name = "/etc/qainit-output/url_qa"
145
- File.open(qa_file_name + '.txt', 'w') { |file| file.write(file_message) }
146
- output "#{output_message} #{qa_file_name}".green
147
- end
148
-
149
- def qainit_read_config!()
150
- projects = ''
151
-
152
- File.open('branch_names', 'r') do |file|
153
- file.each_line do |line|
154
- projects = JSON.parse(line)
155
- end
156
- end
157
-
158
- projects.each do |key, project|
159
- @projects[key] = project
160
- end
161
-
162
- get_s3_config_files
163
- @qainit = true
164
- end
165
-
166
- def get_s3_config_files
167
- # manteniamo la struttura per lanciarlo facilmente anche da locale
168
- `mkdir -p cloudformation/stacks/task cloudformation/stacks/route53 cloudformation/stacks/asg cloudformation/stacks/elb`
169
- @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/task/db.yml', response_target: 'cloudformation/stacks/task/db.yml'})
170
- @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/route53/qa.yml', response_target: 'cloudformation/stacks/route53/qa.yml'})
171
- @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/asg/ecs-asg-allinone.yml', response_target: 'cloudformation/stacks/asg/ecs-asg-allinone.yml'})
172
- @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/ecs-cluster.yml', response_target: 'cloudformation/stacks/ecs-cluster.yml'})
173
- @s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/elb/alb-public-qa.yml', response_target: 'cloudformation/stacks/elb/alb-public-qa.yml'})
174
- end
175
-
176
- def get_deploy_id
177
- if @deploy_id
178
- @deploy_id
179
- else
180
- @deploy_id = Digest::MD5.hexdigest(ENV['DRONE_BRANCH'])
181
- @deploy_id
182
- end
183
- end
184
-
185
- def get_ecs_cluster_name
186
- if @ecs_cluster_name
187
- @ecs_cluster_name
188
- else
189
- cluster_stack_name = "ecs-cluster-qa-#{get_deploy_id}"
190
- resp = describe_stack_resource(cluster_stack_name, 'ECSCluster')
191
- @ecs_cluster_name = resp.stack_resource_detail.physical_resource_id
192
- @ecs_cluster_name
193
- end
194
- end
195
-
196
- def get_asg_stack_name
197
- "ecs-asg-allinone-qa-#{get_deploy_id}"
198
- end
199
-
200
- def get_stack_name(service)
201
- "ecs-task-#{service}-qa-#{get_deploy_id}"
202
- end
203
-
204
- def create_infrastructure_stacks!
205
- `git pull && git submodule init && git submodule update`
206
- @ami_id = get_ami_id("ecs-fleet-allinone-staging")
207
- deploy_id = get_deploy_id
208
- stack_name_alb = 'ecs-alb-http-public-qa-' + deploy_id[0..5]
209
- stack_name_alb_ws = 'ecs-alb-ws-public-qa-' + deploy_id[0..5]
210
- unless @qainit
211
- @projects.each_key do |project_key|
212
- if @projects[project_key]['revision']
213
- git_checkout_version(project_key, @projects[project_key]['revision'])
214
- end
215
- end
216
- end
217
- @git_branch = ENV['DRONE_BRANCH']
218
- hostname_pattern_priority = hostname_pattern_priority()
219
- @tags = [
220
- {
221
- key: "qainit",
222
- value: @git_branch
223
- },
224
- {
225
- key: "hostname_pattern_priority",
226
- value: hostname_pattern_priority
227
- }
228
- ]
229
- @projects.each do |key, value|
230
- @tags << { key: key, value: value['name'] }
231
- end
232
-
233
- cluster_stack_name = "ecs-cluster-qa-#{deploy_id}"
234
-
235
- if stack_exists?(cluster_stack_name)
236
- @tags = get_stack_tags(cluster_stack_name)
237
- hostname_pattern_priority = @tags.detect do |tag|
238
- tag.key == 'hostname_pattern_priority'
239
- end.value
240
- end
241
-
242
- create_cluster_stack(cluster_stack_name, @tags) unless stack_exists?(cluster_stack_name)
243
- wait_for_stack_ready(cluster_stack_name) unless stack_ready?(cluster_stack_name)
244
-
245
- create_alb_stack(stack_name_alb, "http", deploy_id) unless stack_exists?(stack_name_alb)
246
- create_alb_stack(stack_name_alb_ws, "websocket", deploy_id) unless stack_exists?(stack_name_alb_ws)
247
-
248
- create_asg_stack(get_asg_stack_name, @tags) unless stack_exists?(get_asg_stack_name)
249
-
250
- stack_name_db = "ecs-task-db-qa-#{deploy_id}"
251
- stack_body = IO.read('cloudformation/stacks/task/db.yml')
252
- parameters = [
253
- {
254
- parameter_key: "Environment",
255
- parameter_value: "qa"
256
- },
257
- {
258
- parameter_key: "ECSClusterName",
259
- parameter_value: get_ecs_cluster_name
260
- }
261
- ]
262
- create_stack(stack_name_db, stack_body, parameters, @tags, @cf_role) unless stack_exists?(stack_name_db) # creazione asincrona stack dei db (~4 min)
263
-
264
- output "check pyxis \n".yellow
265
-
266
- wait_for_stack_ready(stack_name_db) unless stack_ready?(stack_name_db) # dovrebbe essere istantaneo
267
- db_task = ''
268
- db_task = import_dbs(get_ec2_ip_address) unless stack_exists?("ecs-route53-qa-#{deploy_id}") # import asincrono dei dati
269
-
270
- wait_for_db_import(db_task) unless stack_exists?("ecs-route53-qa-#{deploy_id}") # dovrebbe essere istantaneo
271
-
272
- import_redis_crash(get_ec2_ip_address) if !stack_exists?("ecs-task-web-qa-#{deploy_id}")
273
-
274
- wait_for_stack_ready(stack_name_alb) unless stack_ready?(stack_name_alb)
275
- wait_for_stack_ready(stack_name_alb_ws) unless stack_ready?(stack_name_alb_ws)
276
-
277
- stack_name_route53 = "ecs-route53-qa-#{deploy_id}"
278
- stack_body = IO.read('cloudformation/stacks/route53/qa.yml')
279
- parameters = [
280
- {
281
- parameter_key: "DnsRecordIdentifier",
282
- parameter_value: get_deploy_id
283
- },
284
- {
285
- parameter_key: "PrimaElbHostname",
286
- parameter_value: get_alb_host(stack_name_alb)
287
- },
288
- {
289
- parameter_key: "UraniaIp",
290
- parameter_value: get_ec2_ip_address
291
- },
292
- {
293
- parameter_key: "BburagoIp",
294
- parameter_value: get_ec2_ip_address
295
- },
296
- {
297
- parameter_key: "Hal9000Ip",
298
- parameter_value: get_ec2_ip_address
299
- },
300
- {
301
- parameter_key: "FidatyIp",
302
- parameter_value: get_ec2_ip_address
303
- },
304
- {
305
- parameter_key: "PeanoIp",
306
- parameter_value: get_ec2_ip_address
307
- },
308
- {
309
- parameter_key: "ErmesIp",
310
- parameter_value: get_ec2_ip_address
311
- },
312
- {
313
- parameter_key: "ActiviaIp",
314
- parameter_value: get_ec2_ip_address
315
- },
316
- {
317
- parameter_key: "SkynetIp",
318
- parameter_value: get_ec2_ip_address
319
- },
320
- {
321
- parameter_key: "RogerIp",
322
- parameter_value: get_ec2_ip_address
323
- },
324
- {
325
- parameter_key: "LeftoriumIp",
326
- parameter_value: get_ec2_ip_address
327
- },
328
- {
329
- parameter_key: "RacheleIp",
330
- parameter_value: get_ec2_ip_address
331
- },
332
- {
333
- parameter_key: "RedisIp",
334
- parameter_value: get_ec2_ip_address
335
- },
336
- {
337
- parameter_key: "AssangeElbHostname",
338
- parameter_value: get_alb_host(stack_name_alb)
339
- },
340
- {
341
- parameter_key: "BoratElbHostname",
342
- parameter_value: get_alb_host(stack_name_alb_ws)
343
- },
344
- {
345
- parameter_key: 'CrashElbHostname',
346
- parameter_value: get_alb_host(stack_name_alb_ws)
347
- },
348
- {
349
- parameter_key: 'StarskyElbHostname',
350
- parameter_value: get_alb_host(stack_name_alb)
351
- },
352
- {
353
- parameter_key: 'HutchElbHostname',
354
- parameter_value: get_alb_host(stack_name_alb)
355
- },
356
- {
357
- parameter_key: 'MaiaElbHostname',
358
- parameter_value: get_alb_host(stack_name_alb)
359
- }
360
- ]
361
-
362
- create_stack(stack_name_route53, stack_body, parameters, @tags, @cf_role) unless stack_exists?(stack_name_route53)
363
- wait_for_stack_ready(stack_name_route53) unless stack_ready?(stack_name_route53)
364
- end
365
-
366
- def create_skynet_stack()
367
- wait_for_artifact('prima-artifacts-encrypted', "microservices/skynet/#{@projects["skynet"]['revision']}-qa.tar.gz")
368
- stack_name_skynet = get_stack_name("skynet")
369
- git_checkout_version('skynet', @projects["skynet"]['revision'])
370
- stack_body = File.read('projects/skynet/deploy/task.yml')
371
- parameters = [
372
- {
373
- parameter_key: "Environment",
374
- parameter_value: "qa"
375
- },
376
- {
377
- parameter_key: "ReleaseVersion",
378
- parameter_value: @projects["skynet"]['revision']
379
- },
380
- {
381
- parameter_key: "TaskDesiredCount",
382
- parameter_value: "1"
383
- },
384
- {
385
- parameter_key: "ECSClusterName",
386
- parameter_value: get_ecs_cluster_name
387
- },
388
- {
389
- parameter_key: "HostnamePattern",
390
- parameter_value: "skynet-#{get_deploy_id}.qa.colaster.com"
391
- },
392
- {
393
- parameter_key: "HostnamePatternPriority",
394
- parameter_value: hostname_pattern_priority
395
- }
396
- ]
397
- if stack_exists?(stack_name_skynet)
398
- cur_version = get_currently_deployed_version(stack_name_skynet)
399
- update_stack(stack_name_skynet, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["skynet"]['revision'])
400
- else
401
- create_stack(stack_name_skynet, stack_body, parameters, @tags, @cf_role)
402
- end
403
- end
404
-
405
- def create_urania_stack()
406
- wait_for_artifact('prima-artifacts-encrypted', "microservices/urania/#{@projects["urania"]['revision']}-qa.tar.gz")
407
- stack_name_urania = get_stack_name("urania")
408
- git_checkout_version('urania', @projects["urania"]['revision'])
409
- stack_body = File.read('projects/urania/deploy/task.yml')
410
- parameters = [
411
- {
412
- parameter_key: "Environment",
413
- parameter_value: "qa"
414
- },
415
- {
416
- parameter_key: "ReleaseVersion",
417
- parameter_value: @projects["urania"]['revision']
418
- },
419
- {
420
- parameter_key: "TaskDesiredCount",
421
- parameter_value: "1"
422
- },
423
- {
424
- parameter_key: "ECSClusterName",
425
- parameter_value: get_ecs_cluster_name
426
- },
427
- {
428
- parameter_key: "HostnamePattern",
429
- parameter_value: "urania-#{get_deploy_id}.qa.colaster.com"
430
- },
431
- {
432
- parameter_key: "HostnamePatternPriority",
433
- parameter_value: hostname_pattern_priority
434
- }
435
- ]
436
- if stack_exists?(stack_name_urania)
437
- cur_version = get_currently_deployed_version(stack_name_urania)
438
- update_stack(stack_name_urania, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["urania"]['revision'])
439
- else
440
- create_stack(stack_name_urania, stack_body, parameters, @tags, @cf_role)
441
- end
442
- end
443
-
444
- def create_ermes_stack()
445
- wait_for_artifact('prima-artifacts-encrypted', "microservices/ermes/#{@projects["ermes"]['revision']}-qa.tar.gz")
446
- stack_name_ermes = get_stack_name("ermes")
447
- git_checkout_version('ermes', @projects["ermes"]['revision'])
448
- stack_body = File.read('projects/ermes/deploy/task.yml')
449
- parameters = [
450
- {
451
- parameter_key: "Environment",
452
- parameter_value: "qa"
453
- },
454
- {
455
- parameter_key: "ReleaseVersion",
456
- parameter_value: "#{@projects['ermes']['revision']}"
457
- },
458
- {
459
- parameter_key: "TaskDesiredCount",
460
- parameter_value: "1"
461
- },
462
- {
463
- parameter_key: "ECSClusterName",
464
- parameter_value: get_ecs_cluster_name
465
- },
466
- {
467
- parameter_key: "HostnamePattern",
468
- parameter_value: "ermes-#{get_deploy_id}.qa.colaster.com"
469
- },
470
- {
471
- parameter_key: "HostnamePatternPriority",
472
- parameter_value: hostname_pattern_priority
473
- },
474
- {
475
- parameter_key: "WebHost",
476
- parameter_value: get_route53_hostname('ecs-task-web-qa-notneeded')
477
- },
478
- {
479
- parameter_key: "PeanoHost",
480
- parameter_value: get_route53_hostname('ecs-task-peano-qa-notneeded')
481
- }
482
- ]
483
- if stack_exists?(stack_name_ermes)
484
- cur_version = get_currently_deployed_version(stack_name_ermes)
485
- update_stack(stack_name_ermes, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["ermes"]['revision'])
486
- else
487
- create_stack(stack_name_ermes, stack_body, parameters, @tags, @cf_role)
488
- end
489
- end
490
-
491
- def create_bburago_stack()
492
- wait_for_artifact('prima-artifacts-encrypted', "microservices/bburago/#{@projects["bburago"]['revision']}-qa.tar.gz")
493
-
494
- stack_name_bburago = get_stack_name("bburago")
495
- git_checkout_version('bburago', @projects["bburago"]['revision'])
496
- stack_body = File.read('projects/bburago/deploy/task.yml')
497
- parameters = [
498
- {
499
- parameter_key: "Environment",
500
- parameter_value: "qa"
501
- },
502
- {
503
- parameter_key: "ReleaseVersion",
504
- parameter_value: @projects["bburago"]['revision']
505
- },
506
- {
507
- parameter_key: "ECSClusterName",
508
- parameter_value: get_ecs_cluster_name
509
- },
510
- {
511
- parameter_key: "TaskDesiredCount",
512
- parameter_value: "1"
513
- },
514
- {
515
- parameter_key: "HostnamePattern",
516
- parameter_value: "bburago-#{get_deploy_id}.qa.colaster.com"
517
- },
518
- {
519
- parameter_key: "HostnamePatternPriority",
520
- parameter_value: hostname_pattern_priority
521
- }
522
- ]
523
- if stack_exists?(stack_name_bburago)
524
- cur_version = get_currently_deployed_version(stack_name_bburago)
525
- update_stack(stack_name_bburago, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["bburago"]['revision'])
526
- else
527
- create_stack(stack_name_bburago, stack_body, parameters, @tags, @cf_role)
528
- end
529
- end
530
-
531
- def create_hal9000_stack()
532
- wait_for_artifact('prima-artifacts-encrypted', "microservices/hal9000/#{@projects["hal9000"]['revision']}-qa.tar.gz")
533
-
534
- stack_name_hal9000 = get_stack_name("hal9000")
535
- git_checkout_version('hal9000', @projects["hal9000"]['revision'])
536
- stack_body = File.read('projects/hal9000/deploy/task.yml')
537
- parameters = [
538
- {
539
- parameter_key: "Environment",
540
- parameter_value: "qa"
541
- },
542
- {
543
- parameter_key: "ReleaseVersion",
544
- parameter_value: @projects["hal9000"]['revision']
545
- },
546
- {
547
- parameter_key: "ECSClusterName",
548
- parameter_value: get_ecs_cluster_name
549
- },
550
- {
551
- parameter_key: "TaskDesiredCount",
552
- parameter_value: "1"
553
- },
554
- {
555
- parameter_key: "HostnamePattern",
556
- parameter_value: "hal9000-#{get_deploy_id}.qa.colaster.com"
557
- },
558
- {
559
- parameter_key: "HostnamePatternPriority",
560
- parameter_value: hostname_pattern_priority
561
- }
562
- ]
563
- if stack_exists?(stack_name_hal9000)
564
- cur_version = get_currently_deployed_version(stack_name_hal9000)
565
- update_stack(stack_name_hal9000, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["hal9000"]['revision'])
566
- else
567
- create_stack(stack_name_hal9000, stack_body, parameters, @tags, @cf_role)
568
- end
569
- end
570
-
571
- def create_fidaty_stack()
572
- wait_for_artifact('prima-artifacts-encrypted', "microservices/fidaty/#{@projects["fidaty"]['revision']}-qa.tar.gz")
573
-
574
- stack_name_fidaty = get_stack_name("fidaty")
575
- git_checkout_version('fidaty', @projects["fidaty"]['revision'])
576
- stack_body = File.read('projects/fidaty/deploy/task.yml')
577
- parameters = [
578
- {
579
- parameter_key: "Environment",
580
- parameter_value: "qa"
581
- },
582
- {
583
- parameter_key: "ReleaseVersion",
584
- parameter_value: "#{@projects["fidaty"]['revision']}"
585
- },
586
- {
587
- parameter_key: "ECSClusterName",
588
- parameter_value: get_ecs_cluster_name
589
- },
590
- {
591
- parameter_key: "TaskDesiredCount",
592
- parameter_value: "1"
593
- },
594
- {
595
- parameter_key: "HostnamePattern",
596
- parameter_value: "fidaty-#{get_deploy_id}.qa.colaster.com"
597
- },
598
- {
599
- parameter_key: "HostnamePatternPriority",
600
- parameter_value: hostname_pattern_priority
601
- },
602
- {
603
- parameter_key: "PeanoHost",
604
- parameter_value: get_route53_hostname("ecs-task-peano-qa-notneeded")
605
- }
606
- ]
607
- if stack_exists?(stack_name_fidaty)
608
- cur_version = get_currently_deployed_version(stack_name_fidaty)
609
- update_stack(stack_name_fidaty, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["fidaty"]['revision'])
610
- else
611
- create_stack(stack_name_fidaty, stack_body, parameters, @tags, @cf_role)
612
- end
613
- end
614
-
615
- def create_peano_stack()
616
- wait_for_artifact('prima-artifacts-encrypted', "microservices/peano/#{@projects["peano"]['revision']}-qa.tar.gz")
617
-
618
- stack_name_peano = get_stack_name("peano")
619
- git_checkout_version('peano', @projects["peano"]['revision'])
620
- stack_body = File.read('projects/peano/deploy/task.yml')
621
- parameters = [
622
- {
623
- parameter_key: "Environment",
624
- parameter_value: "qa"
625
- },
626
- {
627
- parameter_key: "ReleaseVersion",
628
- parameter_value: "#{@projects['peano']['revision']}"
629
- },
630
- {
631
- parameter_key: "ECSClusterName",
632
- parameter_value: get_ecs_cluster_name
633
- },
634
- {
635
- parameter_key: "TaskDesiredCount",
636
- parameter_value: "1"
637
- },
638
- {
639
- parameter_key: "HostnamePattern",
640
- parameter_value: "peano-#{get_deploy_id}.qa.colaster.com"
641
- },
642
- {
643
- parameter_key: "HostnamePatternPriority",
644
- parameter_value: hostname_pattern_priority
645
- },
646
- {
647
- parameter_key: "WebHost",
648
- parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
649
- },
650
- {
651
- parameter_key: "AssangeHost",
652
- parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
653
- }
654
- ]
655
- if stack_exists?(stack_name_peano)
656
- cur_version = get_currently_deployed_version(stack_name_peano)
657
- update_stack(stack_name_peano, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["peano"]['revision'])
658
- else
659
- create_stack(stack_name_peano, stack_body, parameters, @tags, @cf_role)
660
- end
661
- end
662
-
663
- def create_rogoreport_stack()
664
- wait_for_artifact('prima-artifacts-encrypted', "microservices/rogoreport/#{@projects["rogoreport"]['revision']}-qa.tar.gz")
665
-
666
- stack_name_rogoreport = get_stack_name("rogoreport")
667
- git_checkout_version('rogoreport', @projects["rogoreport"]['revision'])
668
- stack_body = IO.read('projects/rogoreport/deploy/task.yml')
669
- parameters = [
670
- {
671
- parameter_key: "Environment",
672
- parameter_value: "qa"
673
- },
674
- {
675
- parameter_key: "ReleaseVersion",
676
- parameter_value: "#{@projects["rogoreport"]['revision']}"
677
- },
678
- {
679
- parameter_key: "ReleaseName",
680
- parameter_value: "rogoreport"
681
- },
682
- {
683
- parameter_key: "ECSClusterName",
684
- parameter_value: get_ecs_cluster_name
685
- }
686
- ]
687
- if stack_exists?(stack_name_rogoreport)
688
- cur_version = get_currently_deployed_version(stack_name_rogoreport)
689
- update_stack(stack_name_rogoreport, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["rogoreport"]['revision'])
690
- else
691
- create_stack(stack_name_rogoreport, stack_body, parameters, @tags, @cf_role)
692
- end
693
- end
694
-
695
- def create_assange_stack()
696
- wait_for_artifact('prima-artifacts-encrypted', "microservices/assange/#{@projects["assange"]['revision']}-qa.tar.gz")
697
-
698
- stack_name_assange = get_stack_name("assange")
699
- git_checkout_version('assange', @projects["assange"]['revision'])
700
- stack_body = IO.read('projects/assange/deploy/task.yml')
701
- parameters = [
702
- {
703
- parameter_key: "Environment",
704
- parameter_value: "qa"
705
- },
706
- {
707
- parameter_key: "ReleaseVersion",
708
- parameter_value: "#{@projects["assange"]['revision']}"
709
- },
710
- {
711
- parameter_key: "ECSClusterName",
712
- parameter_value: get_ecs_cluster_name
713
- },
714
- {
715
- parameter_key: "TaskDesiredCount",
716
- parameter_value: "1"
717
- },
718
- {
719
- parameter_key: "ALBShortName",
720
- parameter_value: "assange-qa-#{get_deploy_id}"[0..27]
721
- },
722
- {
723
- parameter_key: "HostnamePattern",
724
- parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
725
- },
726
- {
727
- parameter_key: "HostnamePatternPriority",
728
- parameter_value: (hostname_pattern_priority.to_i + 20).to_s
729
- },
730
- {
731
- parameter_key: "EnvHash",
732
- parameter_value: get_deploy_id
733
- },
734
- {
735
- parameter_key: "WebHost",
736
- parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
737
- },
738
- {
739
- parameter_key: "AssangeHost",
740
- parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
741
- }
742
- ]
743
- if stack_exists?(stack_name_assange)
744
- cur_version = get_currently_deployed_version(stack_name_assange)
745
- update_stack(stack_name_assange, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["assange"]['revision'])
746
- else
747
- create_stack(stack_name_assange, stack_body, parameters, @tags, @cf_role)
748
- end
749
- end
750
-
751
- def create_leftorium_stack()
752
- wait_for_artifact('prima-artifacts-encrypted', "microservices/leftorium/#{@projects["leftorium"]['revision']}-qa.tar.gz")
753
-
754
- stack_name_leftorium = get_stack_name("leftorium")
755
- git_checkout_version('leftorium', @projects["leftorium"]['revision'])
756
- stack_body = File.read('projects/leftorium/deploy/task.yml')
757
- parameters = [
758
- {
759
- parameter_key: "Environment",
760
- parameter_value: "qa"
761
- },
762
- {
763
- parameter_key: "ReleaseVersion",
764
- parameter_value: "#{@projects["leftorium"]['revision']}"
765
- },
766
- {
767
- parameter_key: "ECSClusterName",
768
- parameter_value: get_ecs_cluster_name
769
- },
770
- {
771
- parameter_key: "TaskDesiredCount",
772
- parameter_value: "1"
773
- },
774
- {
775
- parameter_key: "HostnamePattern",
776
- parameter_value: "leftorium-#{get_deploy_id}.qa.colaster.com"
777
- },
778
- {
779
- parameter_key: "HostnamePatternPriority",
780
- parameter_value: hostname_pattern_priority
781
- }
782
- ]
783
- if stack_exists?(stack_name_leftorium)
784
- cur_version = get_currently_deployed_version(stack_name_leftorium)
785
- update_stack(stack_name_leftorium, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["leftorium"]['revision'])
786
- else
787
- create_stack(stack_name_leftorium, stack_body, parameters, @tags, @cf_role)
788
- end
789
- end
790
-
791
- def create_rachele_stack()
792
- wait_for_artifact('prima-artifacts-encrypted', "microservices/rachele/#{@projects["rachele"]['revision']}-qa.tar.gz")
793
-
794
- stack_name_rachele = get_stack_name("rachele")
795
- git_checkout_version('rachele', @projects["rachele"]['revision'])
796
- stack_body = File.read('projects/rachele/deploy/task.yml')
797
- parameters = [
798
- {
799
- parameter_key: "Environment",
800
- parameter_value: "qa"
801
- },
802
- {
803
- parameter_key: "ReleaseVersion",
804
- parameter_value: "#{@projects["rachele"]['revision']}"
805
- },
806
- {
807
- parameter_key: "ECSClusterName",
808
- parameter_value: get_ecs_cluster_name
809
- },
810
- {
811
- parameter_key: "TaskDesiredCount",
812
- parameter_value: "1"
813
- },
814
- {
815
- parameter_key: "WebHost",
816
- parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
817
- },
818
- {
819
- parameter_key: "HostnamePattern",
820
- parameter_value: "rachele-#{get_deploy_id}.qa.colaster.com"
821
- },
822
- {
823
- parameter_key: "HostnamePatternPriority",
824
- parameter_value: hostname_pattern_priority
825
- }
826
- ]
827
- if stack_exists?(stack_name_rachele)
828
- cur_version = get_currently_deployed_version(stack_name_rachele)
829
- unless cur_version.include?(@projects["rachele"]['revision'])
830
- delete_stack(stack_name_rachele)
831
- wait_for_stack_removal(stack_name_rachele)
832
- create_stack(stack_name_rachele, stack_body, parameters, @tags, @cf_role)
833
- end
834
- else
835
- create_stack(stack_name_rachele, stack_body, parameters, @tags, @cf_role)
836
- end
837
- end
838
-
839
- def create_borat_stack()
840
- wait_for_artifact('prima-artifacts-encrypted', "microservices/borat/#{@projects["borat"]['revision']}-qa.tar.gz")
841
-
842
- stack_name_borat = get_stack_name("borat")
843
- git_checkout_version('borat', @projects["borat"]['revision'])
844
- stack_body = IO.read('projects/borat/deploy/task.yml')
845
- parameters = [
846
- {
847
- parameter_key: "Environment",
848
- parameter_value: "qa"
849
- },
850
- {
851
- parameter_key: "ReleaseVersion",
852
- parameter_value: "#{@projects["borat"]['revision']}"
853
- },
854
- {
855
- parameter_key: "ECSClusterName",
856
- parameter_value: get_ecs_cluster_name
857
- },
858
- {
859
- parameter_key: "TaskDesiredCount",
860
- parameter_value: "1"
861
- },
862
- {
863
- parameter_key: "ALBShortName",
864
- parameter_value: "borat-qa-#{get_deploy_id}"[0..27]
865
- },
866
- {
867
- parameter_key: "HostnamePattern",
868
- parameter_value: "backoffice-#{get_deploy_id}.qa.colaster.com"
869
- },
870
- {
871
- parameter_key: "HostnamePatternPriority",
872
- parameter_value: (hostname_pattern_priority.to_i + 30).to_s
873
- },
874
- {
875
- parameter_key: "EnvHash",
876
- parameter_value: get_deploy_id
877
- },
878
- {
879
- parameter_key: "WsEndpoint",
880
- parameter_value: "wss://backoffice-#{get_deploy_id}.qa.colaster.com/socket/websocket?vsn=1.0.0"
881
- },
882
- {
883
- parameter_key: "GraphqlEndpoint",
884
- parameter_value: "https://backoffice-#{get_deploy_id}.qa.colaster.com/graphql"
885
- },
886
- {
887
- parameter_key: "GraphqlInsuranceEndpoint",
888
- parameter_value: "https://backoffice-#{get_deploy_id}.qa.colaster.com/graphql/insurance"
889
- },
890
- {
891
- parameter_key: "AuthEndpoint",
892
- parameter_value: "https://backoffice-#{get_deploy_id}.qa.colaster.com/auth"
893
- },
894
- {
895
- parameter_key: "FrontendEndpoint",
896
- parameter_value: "https://www-#{get_deploy_id}.qa.colaster.com/"
897
- }
898
- ]
899
- if stack_exists?(stack_name_borat)
900
- cur_version = get_currently_deployed_version(stack_name_borat)
901
- update_stack(stack_name_borat, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["borat"]['revision'])
902
- else
903
- create_stack(stack_name_borat, stack_body, parameters, @tags, @cf_role)
904
- end
905
- end
906
-
907
- def create_crash_stack()
908
- wait_for_artifact('prima-artifacts-encrypted', "microservices/crash/#{@projects['crash']['revision']}-qa.tar.gz")
909
-
910
- stack_name_crash = get_stack_name("crash")
911
- git_checkout_version('crash', @projects['crash']['revision'])
912
- stack_body = IO.read('projects/crash/deploy/task.yml')
913
- parameters = [
914
- {
915
- parameter_key: 'Environment',
916
- parameter_value: 'qa'
917
- },
918
- {
919
- parameter_key: 'ReleaseVersion',
920
- parameter_value: "#{@projects['crash']['revision']}"
921
- },
922
- {
923
- parameter_key: 'TaskDesiredCount',
924
- parameter_value: '1'
925
- },
926
- {
927
- parameter_key: 'ECSClusterName',
928
- parameter_value: get_ecs_cluster_name
929
- },
930
- {
931
- parameter_key: 'ALBShortName',
932
- parameter_value: "crash-qa-#{get_deploy_id}"[0..27]
933
- },
934
- {
935
- parameter_key: 'HostnamePattern',
936
- parameter_value: "crash-#{get_deploy_id}.qa.colaster.com"
937
- },
938
- {
939
- parameter_key: 'HostnamePatternPriority',
940
- parameter_value: (hostname_pattern_priority.to_i + 10).to_s
941
- },
942
- {
943
- parameter_key: "EnvHash",
944
- parameter_value: get_deploy_id
945
- },
946
- {
947
- parameter_key: "WsEndpoint",
948
- parameter_value: "wss://crash-#{get_deploy_id}.qa.colaster.com/socket/websocket?vsn=1.0.0"
949
- },
950
- {
951
- parameter_key: "GraphqlEndpoint",
952
- parameter_value: "https://crash-#{get_deploy_id}.qa.colaster.com/graphql"
953
- },
954
- {
955
- parameter_key: "AuthDomain",
956
- parameter_value: "https://www-#{get_deploy_id}.qa.colaster.com/"
957
- },
958
- ]
959
- if stack_exists?(stack_name_crash)
960
- cur_version = get_currently_deployed_version(stack_name_crash)
961
- update_stack(stack_name_crash, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["crash"]['revision'])
962
- else
963
- create_stack(stack_name_crash, stack_body, parameters, @tags, @cf_role)
964
- end
965
- end
966
-
967
- def create_starsky_stack()
968
- wait_for_artifact('prima-artifacts-encrypted', "microservices/starsky/#{@projects["starsky"]['revision']}-qa.tar.gz")
969
-
970
- git_checkout_version('starsky', @projects["starsky"]['revision'])
971
- stack_name_starsky = get_stack_name("starsky")
972
- stack_body = IO.read('projects/starsky/deploy/task.yml')
973
- parameters = [
974
- {
975
- parameter_key: "Environment",
976
- parameter_value: "qa"
977
- },
978
- {
979
- parameter_key: "ReleaseVersion",
980
- parameter_value: "#{@projects["starsky"]['revision']}"
981
- },
982
- {
983
- parameter_key: "TaskDesiredCount",
984
- parameter_value: "1"
985
- },
986
- {
987
- parameter_key: "ECSClusterName",
988
- parameter_value: get_ecs_cluster_name
989
- },
990
- {
991
- parameter_key: "ALBShortName",
992
- parameter_value: "starsky-qa-#{get_deploy_id}"[0..27]
993
- },
994
- {
995
- parameter_key: "EnvHash",
996
- parameter_value: get_deploy_id
997
- },
998
- {
999
- parameter_key: "HostnamePattern",
1000
- parameter_value: "starsky-#{get_deploy_id}.qa.colaster.com"
1001
- },
1002
- {
1003
- parameter_key: "HostnamePatternPriority",
1004
- parameter_value: (hostname_pattern_priority.to_i + 74).to_s
1005
- }
1006
- ]
1007
- if stack_exists?(stack_name_starsky)
1008
- cur_version = get_currently_deployed_version(stack_name_starsky)
1009
- unless cur_version.include?(@projects["starsky"]['revision'])
1010
- delete_stack(stack_name_starsky)
1011
- wait_for_stack_removal(stack_name_starsky)
1012
- create_stack(stack_name_starsky, stack_body, parameters, @tags, @cf_role)
1013
- end
1014
- else
1015
- create_stack(stack_name_starsky, stack_body, parameters, @tags, @cf_role)
1016
- end
1017
- end
1018
-
1019
- def create_activia_stack()
1020
- wait_for_artifact('prima-artifacts-encrypted', "microservices/activia/#{@projects["activia"]['revision']}-qa.tar.gz")
1021
-
1022
- stack_name_activia = get_stack_name("activia")
1023
- git_checkout_version('activia', @projects["activia"]['revision'])
1024
- stack_body = File.read('projects/activia/deploy/task.yml')
1025
- parameters = [
1026
- {
1027
- parameter_key: "Environment",
1028
- parameter_value: "qa"
1029
- },
1030
- {
1031
- parameter_key: "ReleaseVersion",
1032
- parameter_value: "#{@projects["activia"]['revision']}"
1033
- },
1034
- {
1035
- parameter_key: "ECSClusterName",
1036
- parameter_value: get_ecs_cluster_name
1037
- },
1038
- {
1039
- parameter_key: "TaskDesiredCount",
1040
- parameter_value: "1"
1041
- },
1042
- {
1043
- parameter_key: "HostnamePattern",
1044
- parameter_value: "activia-#{get_deploy_id}.qa.colaster.com"
1045
- },
1046
- {
1047
- parameter_key: "HostnamePatternPriority",
1048
- parameter_value: hostname_pattern_priority
1049
- },
1050
- {
1051
- parameter_key: "WebHost",
1052
- parameter_value: get_route53_hostname('ecs-task-web-qa-notneeded')
1053
- },
1054
- {
1055
- parameter_key: "PeanoHost",
1056
- parameter_value: get_route53_hostname('ecs-task-peano-qa-notneeded')
1057
- }
1058
- ]
1059
- if stack_exists?(stack_name_activia)
1060
- cur_version = get_currently_deployed_version(stack_name_activia)
1061
- update_stack(stack_name_activia, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["activia"]['revision'])
1062
- else
1063
- create_stack(stack_name_activia, stack_body, parameters, @tags, @cf_role)
1064
- end
1065
- end
1066
-
1067
- def create_web_stack()
1068
- wait_for_artifact('prima-artifacts-encrypted', "prima/#{@projects["prima"]['revision']}.tar.gz")
1069
- # Waiting for prima healtcheck dependencies
1070
- wait_for_stack_ready(get_stack_name("skynet")) unless stack_ready?(get_stack_name("skynet"))
1071
- wait_for_stack_ready(get_stack_name("urania")) unless stack_ready?(get_stack_name("urania"))
1072
- wait_for_stack_ready(get_stack_name("bburago")) unless stack_ready?(get_stack_name("bburago"))
1073
- wait_for_stack_ready(get_stack_name("hal9000")) unless stack_ready?(get_stack_name("hal9000"))
1074
- wait_for_stack_ready(get_stack_name("assange")) unless stack_ready?(get_stack_name("assange"))
1075
- wait_for_stack_ready(get_stack_name("fidaty")) unless stack_ready?(get_stack_name("fidaty"))
1076
- wait_for_stack_ready(get_stack_name("leftorium")) unless stack_ready?(get_stack_name("leftorium"))
1077
- wait_for_stack_ready(get_stack_name("rachele")) unless stack_ready?(get_stack_name("rachele"))
1078
- stack_name_web = get_stack_name("web")
1079
- git_checkout_version('prima', @projects["prima"]['revision'])
1080
- stack_body = IO.read('projects/prima/app/cloudformation/tasks/web.yml')
1081
- parameters = [
1082
- {
1083
- parameter_key: "Environment",
1084
- parameter_value: "qa"
1085
- },
1086
- {
1087
- parameter_key: "ReleaseVersion",
1088
- parameter_value: "#{@projects["prima"]['revision']}"
1089
- },
1090
- {
1091
- parameter_key: "TaskDesiredCount",
1092
- parameter_value: "1"
1093
- },
1094
- {
1095
- parameter_key: "ECSClusterName",
1096
- parameter_value: get_ecs_cluster_name
1097
- },
1098
- {
1099
- parameter_key: "ALBShortName",
1100
- parameter_value: "web-qa-#{get_deploy_id}"[0..27]
1101
- },
1102
- {
1103
- parameter_key: "WebQaBaseHostname",
1104
- parameter_value: "#{get_deploy_id}.qa.colaster.com"
1105
- },
1106
- {
1107
- parameter_key: "HostnamePatternPriority",
1108
- parameter_value: hostname_pattern_priority
1109
- },
1110
- {
1111
- parameter_key: "HostnamePatternAggregatorPriority",
1112
- parameter_value: (hostname_pattern_priority.to_i + 1).to_s
1113
- },
1114
- {
1115
- parameter_key: "EnvHash",
1116
- parameter_value: get_deploy_id
1117
- },
1118
- {
1119
- parameter_key: "AssangeHostname",
1120
- parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
1121
- },
1122
- {
1123
- parameter_key: "BackofficeHostname",
1124
- parameter_value: "backoffice-#{get_deploy_id}.qa.colaster.com"
1125
- },
1126
- {
1127
- parameter_key: "WebHostname",
1128
- parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1129
- },
1130
- {
1131
- parameter_key: "FePrimaDomain",
1132
- parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1133
- },
1134
- {
1135
- parameter_key: "HostnamePattern",
1136
- parameter_value: "www-#{get_deploy_id}.*"
1137
- }
1138
- ]
1139
- if stack_exists?(stack_name_web)
1140
- cur_version = get_currently_deployed_version(stack_name_web)
1141
- update_stack(stack_name_web, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["prima"]['revision'])
1142
- else
1143
- create_stack(stack_name_web, stack_body, parameters, @tags, @cf_role)
1144
- end
1145
- end
1146
-
1147
- def create_consumer_stack()
1148
- wait_for_artifact('prima-artifacts-encrypted', "prima/#{@projects["prima"]['revision']}.tar.gz")
1149
- # Waiting for prima healtcheck dependencies
1150
- wait_for_stack_ready(get_stack_name("skynet")) unless stack_ready?(get_stack_name("skynet"))
1151
- wait_for_stack_ready(get_stack_name("urania")) unless stack_ready?(get_stack_name("urania"))
1152
- wait_for_stack_ready(get_stack_name("bburago")) unless stack_ready?(get_stack_name("bburago"))
1153
- wait_for_stack_ready(get_stack_name("hal9000")) unless stack_ready?(get_stack_name("hal9000"))
1154
- wait_for_stack_ready(get_stack_name("assange")) unless stack_ready?(get_stack_name("assange"))
1155
- wait_for_stack_ready(get_stack_name("fidaty")) unless stack_ready?(get_stack_name("fidaty"))
1156
- wait_for_stack_ready(get_stack_name("leftorium")) unless stack_ready?(get_stack_name("leftorium"))
1157
- wait_for_stack_ready(get_stack_name("rachele")) unless stack_ready?(get_stack_name("rachele"))
1158
- stack_name_consumer = get_stack_name("consumer")
1159
- git_checkout_version('prima', @projects["prima"]['revision'])
1160
- stack_body = IO.read('projects/prima/app/cloudformation/tasks/consumer.yml')
1161
- parameters = [
1162
- {
1163
- parameter_key: "Environment",
1164
- parameter_value: "qa"
1165
- },
1166
- {
1167
- parameter_key: "ReleaseVersion",
1168
- parameter_value: "#{@projects["prima"]['revision']}"
1169
- },
1170
- {
1171
- parameter_key: "ECSClusterName",
1172
- parameter_value: get_ecs_cluster_name
1173
- },
1174
- {
1175
- parameter_key: "NginxHttpHost",
1176
- parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1177
- },
1178
- {
1179
- parameter_key: "AssangeHostname",
1180
- parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
1181
- },
1182
- {
1183
- parameter_key: "BackofficeHostname",
1184
- parameter_value: "backoffice-#{get_deploy_id}.qa.colaster.com"
1185
- },
1186
- {
1187
- parameter_key: "WebHostname",
1188
- parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1189
- },
1190
- {
1191
- parameter_key: "FePrimaDomain",
1192
- parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1193
- },
1194
- {
1195
- parameter_key: "HostnamePattern",
1196
- parameter_value: "consumer-#{get_deploy_id}.qa.colaster.com"
1197
- },
1198
- {
1199
- parameter_key: "WebQaBaseHostname",
1200
- parameter_value: "#{get_deploy_id}.qa.colaster.com"
1201
- }
1202
- ]
1203
- if stack_exists?(stack_name_consumer)
1204
- cur_version = get_currently_deployed_version(stack_name_consumer)
1205
- update_stack(stack_name_consumer, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["prima"]['revision'])
1206
- else
1207
- create_stack(stack_name_consumer, stack_body, parameters, @tags, @cf_role)
1208
- end
1209
- end
1210
-
1211
- def create_roger_stack()
1212
- wait_for_artifact('prima-artifacts-encrypted', "microservices/roger/#{@projects["roger"]['revision']}-qa.tar.gz")
1213
- wait_for_stack_ready(get_stack_name("consumer")) unless stack_ready?(get_stack_name("consumer"))
1214
- stack_name_roger = "ecs-task-roger-qa-#{get_deploy_id}"
1215
- git_checkout_version('roger', @projects["roger"]['revision'])
1216
- stack_body = File.read('projects/roger/deploy/task.yml')
1217
- parameters = [
1218
- {
1219
- parameter_key: "Environment",
1220
- parameter_value: "qa"
1221
- },
1222
- {
1223
- parameter_key: "ReleaseVersion",
1224
- parameter_value: @projects["roger"]['revision']
1225
- },
1226
- {
1227
- parameter_key: "TaskDesiredCount",
1228
- parameter_value: "1"
1229
- },
1230
- {
1231
- parameter_key: "ECSClusterName",
1232
- parameter_value: get_ecs_cluster_name
1233
- },
1234
- {
1235
- parameter_key: "HostnamePattern",
1236
- parameter_value: "roger-#{get_deploy_id}.qa.colaster.com"
1237
- },
1238
- {
1239
- parameter_key: "HostnamePatternPriority",
1240
- parameter_value: hostname_pattern_priority
1241
- }
1242
- ]
1243
- if stack_exists?(stack_name_roger)
1244
- cur_version = get_currently_deployed_version(stack_name_roger)
1245
- update_stack(stack_name_roger, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["roger"]['revision'])
1246
- else
1247
- create_stack(stack_name_roger, stack_body, parameters, @tags, @cf_role)
1248
- end
1249
- end
1250
-
1251
- def create_hutch_stack()
1252
- wait_for_artifact('prima-artifacts-encrypted', "microservices/hutch/#{@projects["hutch"]['revision']}-#{get_deploy_id[0..7]}-qa.tar.gz")
1253
- wait_for_stack_ready(get_stack_name("starsky")) unless stack_ready?(get_stack_name("starsky"))
1254
-
1255
- stack_name_hutch = get_stack_name("hutch")
1256
- git_checkout_version('hutch', @projects["hutch"]['revision'])
1257
- stack_body = File.read('projects/hutch/deploy/task.yml')
1258
- parameters = [
1259
- {
1260
- parameter_key: "Environment",
1261
- parameter_value: "qa"
1262
- },
1263
- {
1264
- parameter_key: "ReleaseVersion",
1265
- parameter_value: "#{@projects["hutch"]['revision']}-#{get_deploy_id[0..7]}"
1266
- },
1267
- {
1268
- parameter_key: "ALBShortName",
1269
- parameter_value: "hutch-qa-#{get_deploy_id}"[0..27]
1270
- },
1271
- {
1272
- parameter_key: "ECSClusterName",
1273
- parameter_value: get_ecs_cluster_name
1274
- },
1275
- {
1276
- parameter_key: "EnvHash",
1277
- parameter_value: get_deploy_id
1278
- },
1279
- {
1280
- parameter_key: "HostnamePattern",
1281
- parameter_value: "hutch-#{get_deploy_id}.qa.colaster.com"
1282
- },
1283
- {
1284
- parameter_key: "HostnamePatternPriority",
1285
- parameter_value: (hostname_pattern_priority.to_i + 254).to_s
1286
- },
1287
- {
1288
- parameter_key: "ApiUrl",
1289
- parameter_value: "https://#{get_route53_hostname('maia-intermediari')}"
1290
- }
1291
- ]
1292
- if stack_exists?(stack_name_hutch)
1293
- cur_version = get_currently_deployed_version(stack_name_hutch)
1294
- update_stack(stack_name_hutch, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["hutch"]['revision'])
1295
- else
1296
- create_stack(stack_name_hutch, stack_body, parameters, @tags, @cf_role)
1297
- end
1298
- end
1299
-
1300
- def create_maia_stack()
1301
- wait_for_artifact('prima-artifacts-encrypted', "microservices/maia/#{@projects["maia"]['revision']}-qa.tar.gz")
1302
- stack_name_maia = get_stack_name("maia")
1303
- git_checkout_version('maia', @projects["maia"]['revision'])
1304
- stack_body = File.read('projects/maia/deploy/task.yml')
1305
- parameters = [
1306
- {
1307
- parameter_key: "Environment",
1308
- parameter_value: "qa"
1309
- },
1310
- {
1311
- parameter_key: "ReleaseVersion",
1312
- parameter_value: "#{@projects["maia"]['revision']}"
1313
- },
1314
- {
1315
- parameter_key: "ALBShortName",
1316
- parameter_value: "maia-qa-#{get_deploy_id}"[0..15]
1317
- },
1318
- {
1319
- parameter_key: "ECSClusterName",
1320
- parameter_value: get_ecs_cluster_name
1321
- },
1322
- {
1323
- parameter_key: "EnvHash",
1324
- parameter_value: get_deploy_id
1325
- },
1326
- {
1327
- parameter_key: "HostnamePatternPublic",
1328
- parameter_value: "api*-#{get_deploy_id}.qa.colaster.com"
1329
- },
1330
- {
1331
- parameter_key: "HostnamePatternPriority",
1332
- parameter_value: (hostname_pattern_priority.to_i + 128).to_s
1333
- },
1334
- {
1335
- parameter_key: "ProxyHostnameIntermediari",
1336
- parameter_value: "api-intermediari-#{get_deploy_id}.qa.colaster.com"
1337
- },
1338
- {
1339
- parameter_key: "ProxyHostnameApp",
1340
- parameter_value: "api-#{get_deploy_id}.qa.colaster.com"
1341
- }
1342
- ]
1343
- if stack_exists?(stack_name_maia)
1344
- cur_version = get_currently_deployed_version(stack_name_maia)
1345
- update_stack(stack_name_maia, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["maia"]['revision'])
1346
- else
1347
- create_stack(stack_name_maia, stack_body, parameters, @tags, @cf_role)
1348
- end
1349
- end
1350
-
1351
- def complete_qa_setup!()
1352
- wait_for_stack_ready(get_stack_name("web")) unless stack_ready?(get_stack_name("web"))
1353
- wait_for_stack_ready(get_stack_name("consumer")) unless stack_ready?(get_stack_name("consumer"))
1354
- wait_for_stack_ready(get_stack_name("ermes")) unless stack_ready?(get_stack_name("ermes"))
1355
- wait_for_stack_ready(get_stack_name("peano")) unless stack_ready?(get_stack_name("peano"))
1356
- wait_for_stack_ready(get_stack_name("rogoreport")) unless stack_ready?(get_stack_name("rogoreport"))
1357
- wait_for_stack_ready(get_stack_name("borat")) unless stack_ready?(get_stack_name("borat"))
1358
- wait_for_stack_ready(get_stack_name("activia")) unless stack_ready?(get_stack_name("activia"))
1359
- wait_for_stack_ready(get_stack_name("maia")) unless stack_ready?(get_stack_name("maia"))
1360
- wait_for_stack_ready(get_stack_name("crash")) unless stack_ready?(get_stack_name("crash"))
1361
- wait_for_stack_ready(get_stack_name("hutch")) unless stack_ready?(get_stack_name("hutch"))
1362
-
1363
- update_service_defaults(get_stack_name("web"))
1364
- update_service_defaults(get_stack_name("consumer"))
1365
- update_service_defaults(get_stack_name("urania"))
1366
- update_service_defaults(get_stack_name("ermes"))
1367
- update_service_defaults(get_stack_name("bburago"))
1368
- update_service_defaults(get_stack_name("hal9000"))
1369
- update_service_defaults(get_stack_name("fidaty"))
1370
- update_service_defaults(get_stack_name("peano"))
1371
- update_service_defaults(get_stack_name("rogoreport"))
1372
- update_service_defaults(get_stack_name("assange"))
1373
- update_service_defaults(get_stack_name("borat"))
1374
- update_service_defaults(get_stack_name("activia"))
1375
- update_service_defaults(get_stack_name("skynet"))
1376
- update_service_defaults(get_stack_name("leftorium"))
1377
- update_service_defaults(get_stack_name("rachele"))
1378
- update_service_defaults(get_stack_name("maia"))
1379
- update_service_defaults(get_stack_name("starsky"))
1380
- update_service_defaults(get_stack_name("hutch"))
1381
- update_service_defaults(get_stack_name("crash"))
1382
-
1383
- activia_hostname = get_route53_hostname("activia")
1384
- assange_hostname = get_route53_hostname("assange")
1385
- bburago_hostname = get_route53_hostname("bburago")
1386
- borat_hostname = get_route53_hostname("borat")
1387
- ermes_hostname = get_route53_hostname("ermes")
1388
- fidaty_hostname = get_route53_hostname("fidaty")
1389
- hal9000_hostname = get_route53_hostname("hal9000")
1390
- prima_hostname = get_route53_hostname("web")
1391
- peano_hostname = get_route53_hostname("peano")
1392
- skynet_hostname = get_route53_hostname("skynet")
1393
- urania_hostname = get_route53_hostname("urania")
1394
- roger_hostname = get_route53_hostname("roger")
1395
- leftorium_hostname = get_route53_hostname("leftorium")
1396
- rachele_hostname = get_route53_hostname("rachele")
1397
- maia_app_hostname = get_route53_hostname("maia-app")
1398
- maia_intermediari_hostname = get_route53_hostname("maia-intermediari")
1399
- crash_hostname = get_route53_hostname("crash")
1400
- starsky_hostname = get_route53_hostname("starsky")
1401
- hutch_hostname = get_route53_hostname("hutch")
1402
-
1403
- launch_mimo(get_deploy_id)
1404
-
1405
- projects_text = "
1406
- > Prima url: https://#{prima_hostname}
1407
- > Backoffice (Borat) url: https://#{borat_hostname}
1408
- > Urania url: http://#{urania_hostname}:81
1409
- > Bburago url: http://#{bburago_hostname}:83
1410
- > Ermes url: http://#{ermes_hostname}:10002
1411
- > Hal9000 url: http://#{hal9000_hostname}:10031
1412
- > Fidaty url: http://#{fidaty_hostname}:10021
1413
- > Peano url: http://#{peano_hostname}:10039
1414
- > Assange url: https://#{assange_hostname}
1415
- > Activia url: http://#{activia_hostname}:10041
1416
- > Skynet url: http://#{skynet_hostname}:8050
1417
- > Roger url: http://#{roger_hostname}:10051
1418
- > Leftorium url: http://#{leftorium_hostname}:10061
1419
- > Rachele url: http://#{rachele_hostname}:10040
1420
- > Maia App url: https://#{maia_app_hostname}
1421
- > Maia Intermediari url: https://#{maia_intermediari_hostname}
1422
- > Crash url: https://#{crash_hostname}
1423
- > Starsky url: https://#{starsky_hostname}
1424
- > Hutch url: https://#{hutch_hostname}
1425
- > RabbitMQ url: http://#{get_ec2_ip_address}:15672
1426
- > Supervisor url: http://#{get_ec2_ip_address}:9001
1427
- > Elasticsearch url: http://#{get_ec2_ip_address}:9200
1428
- > SSH connection: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no githubUsername@#{get_ec2_ip_address}\n"
1429
- output projects_text.cyan
1430
- output "Deploy effettuato, everything is awesome!\n".green
1431
-
1432
- if @projects['prima']['name'] != 'master' then
1433
- output "Lancio il batch job per la visual regression..."
1434
- launch_bocelli_test(prima_hostname)
1435
- output "Visual regression lanciata con successo!"
1436
-
1437
- output "Lancio i test con Lighthouse..."
1438
- launch_lighthouse_test(prima_hostname, "mobile")
1439
- launch_lighthouse_test(prima_hostname, "desktop")
1440
- output "Test con Lighthouse lanciati con successo..."
1441
- end
1442
-
1443
- qainit_write_output(projects_text, 'Indirizzi scritti su ')
1444
- end
1445
-
1446
- def get_route53_hostname(project)
1447
- case
1448
- when project.include?('web')
1449
- host = "www-#{get_deploy_id}.qa.colaster.com"
1450
- when project.include?('urania')
1451
- host = "urania-#{get_deploy_id}.qa.colaster.com"
1452
- when project.include?('bburago')
1453
- host = "bburago-#{get_deploy_id}.qa.colaster.com"
1454
- when project.include?('hal9000')
1455
- host = "hal9000-#{get_deploy_id}.qa.colaster.com"
1456
- when project.include?('fidaty')
1457
- host = "fidaty-#{get_deploy_id}.qa.colaster.com"
1458
- when project.include?('peano')
1459
- host = "peano-#{get_deploy_id}.qa.colaster.com"
1460
- when project.include?('assange')
1461
- host = "assange-#{get_deploy_id}.qa.colaster.com"
1462
- when project.include?('borat')
1463
- host = "backoffice-#{get_deploy_id}.qa.colaster.com"
1464
- when project.include?('crash')
1465
- host = "crash-#{get_deploy_id}.qa.colaster.com"
1466
- when project.include?('ermes')
1467
- host = "ermes-#{get_deploy_id}.qa.colaster.com"
1468
- when project.include?('activia')
1469
- host = "activia-#{get_deploy_id}.qa.colaster.com"
1470
- when project.include?('skynet')
1471
- host = "skynet-#{get_deploy_id}.qa.colaster.com"
1472
- when project.include?('roger')
1473
- host = "roger-#{get_deploy_id}.qa.colaster.com"
1474
- when project.include?('leftorium')
1475
- host = "leftorium-#{get_deploy_id}.qa.colaster.com"
1476
- when project.include?('rachele')
1477
- host = "rachele-#{get_deploy_id}.qa.colaster.com"
1478
- when project.include?('starsky')
1479
- host = "starsky-#{get_deploy_id}.qa.colaster.com"
1480
- when project.include?('hutch')
1481
- host = "hutch-#{get_deploy_id}.qa.colaster.com"
1482
- when project.include?('maia-app')
1483
- host = "api-#{get_deploy_id}.qa.colaster.com"
1484
- when project.include?('maia-intermediari')
1485
- host = "api-intermediari-#{get_deploy_id}.qa.colaster.com"
1486
- end
1487
- host
1488
- end
1489
-
1490
- def get_ec2_ip_address()
1491
- if @ec2_ip_address
1492
- @ec2_ip_address
1493
- else
1494
- resp = describe_stack_resource(get_asg_stack_name, 'ECSAutoScalingGroup')
1495
- resp = describe_auto_scaling_groups([resp.stack_resource_detail.physical_resource_id], 1)
1496
- instance_id = resp.auto_scaling_groups[0].instances[0].instance_id
1497
- resp = describe_instances([instance_id])
1498
- @ec2_ip_address = resp.reservations[0].instances[0].private_ip_address
1499
- @ec2_ip_address
1500
- end
1501
- end
1502
-
1503
- def get_alb_host(stack_name)
1504
- case
1505
- when stack_name.include?('web')
1506
- logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1507
- when stack_name.include?('urania')
1508
- logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1509
- when stack_name.include?('backoffice')
1510
- logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1511
- when stack_name.include?('bburago')
1512
- logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1513
- when stack_name.include?('hal9000')
1514
- logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1515
- when stack_name.include?('fidaty')
1516
- logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1517
- when stack_name.include?('activia')
1518
- logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1519
- when stack_name.include?('skynet')
1520
- logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1521
- when stack_name.include?('roger')
1522
- logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1523
- when stack_name.include?('alb-http-public')
1524
- logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1525
- when stack_name.include?('alb-ws-public')
1526
- logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1527
- when stack_name.include?('peano')
1528
- logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1529
- when stack_name.include?('leftorium')
1530
- logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1531
- when stack_name.include?('assange')
1532
- logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1533
- when stack_name.include?('borat')
1534
- logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1535
- when stack_name.include?('crash')
1536
- logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1537
- when stack_name.include?('rachele')
1538
- logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1539
- when stack_name.include?('starsky')
1540
- logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1541
- when stack_name.include?('hutch')
1542
- logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1543
- when stack_name.include?('maia')
1544
- logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1545
- end
1546
- resp = describe_stack_resource(stack_name, logical_resource_id)
1547
- resp = describe_load_balancers([resp.stack_resource_detail.physical_resource_id])
1548
- resp.load_balancers[0].dns_name
1549
- end
1550
-
1551
- def update_service_defaults(stack_name)
1552
- case
1553
- when stack_name.include?('web')
1554
- logical_resource_id = 'ECSServiceWebQA'
1555
- when stack_name.include?('consumer')
1556
- logical_resource_id = 'ECSServiceConsumerApiQa'
1557
- when stack_name.include?('urania')
1558
- logical_resource_id = 'ECSServiceUraniaQA'
1559
- when stack_name.include?('backoffice')
1560
- logical_resource_id = 'ECSServiceBackoffice'
1561
- when stack_name.include?('ermes')
1562
- logical_resource_id = 'ECSServiceErmesQA'
1563
- when stack_name.include?('bburago')
1564
- logical_resource_id = 'ECSServiceBburagoQA'
1565
- when stack_name.include?('hal9000')
1566
- logical_resource_id = 'ECSServiceHal9000QA'
1567
- when stack_name.include?('fidaty')
1568
- logical_resource_id = 'ECSServiceFidatyQA'
1569
- when stack_name.include?('skynet')
1570
- logical_resource_id = 'ECSServiceSkynetQA'
1571
- when stack_name.include?('roger')
1572
- logical_resource_id = 'ECSServiceRogerQA'
1573
- when stack_name.include?('activia')
1574
- logical_resource_id = 'ECSServiceActiviaQA'
1575
- when stack_name.include?('peano')
1576
- logical_resource_id = 'ECSServicePeanoQA'
1577
- when stack_name.include?('rogoreport')
1578
- logical_resource_id = 'ECSServiceRogoreport'
1579
- when stack_name.include?('assange')
1580
- logical_resource_id = 'ECSServiceAssangeQA'
1581
- when stack_name.include?('borat')
1582
- logical_resource_id = 'ECSServiceBorat'
1583
- when stack_name.include?('leftorium')
1584
- logical_resource_id = 'ECSServiceLeftoriumQA'
1585
- when stack_name.include?('rachele')
1586
- logical_resource_id = 'ECSServiceRacheleQA'
1587
- when stack_name.include?('crash')
1588
- logical_resource_id = 'ECSServiceCrashQA'
1589
- when stack_name.include?('starsky')
1590
- logical_resource_id = 'ECSServiceStarskyQA'
1591
- when stack_name.include?('hutch')
1592
- logical_resource_id = 'ECSServiceHutch'
1593
- when stack_name.include?('maia')
1594
- logical_resource_id = 'ECSServiceMaia'
1595
- else
1596
- raise "Service name non gestito per lo stack #{stack_name}"
1597
- end
1598
- resp = describe_stack_resource(stack_name, logical_resource_id)
1599
- update_ecs_service(get_ecs_cluster_name, resp.stack_resource_detail.physical_resource_id, {minimum_healthy_percent: 0, maximum_percent: 100})
1600
- end
1601
-
1602
- def launch_lighthouse_test(url, device)
1603
- @cloudflare.post("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {type: 'CNAME', name: "www-#{get_deploy_id}", content: url, proxied: true, ttl: 1}) unless get_lighthouse_dns()
1604
-
1605
- @batch.submit_job({
1606
- job_name: "lighthouse-#{device}-#{get_deploy_id}",
1607
- job_queue: "tools-production",
1608
- job_definition: describe_stack_resource('batch-job-lighthouse-production', 'JobDefinition').stack_resource_detail.physical_resource_id,
1609
- container_overrides: {
1610
- environment: [
1611
- {
1612
- name: "URL_TO_TEST",
1613
- value: "https://www-#{get_deploy_id}.prima.it/?superprima"
1614
- },
1615
- {
1616
- name: "DEVICE",
1617
- value: device
1618
- },
1619
- {
1620
- name: "BRANCH_NAME",
1621
- value: @projects['prima']['name']
1622
- },
1623
- {
1624
- name: "COMMITTER_EMAIL",
1625
- value: @projects['prima']['committer']
1626
- }
1627
- ]
1628
- }
1629
- })
1630
- end
1631
-
1632
- def get_lighthouse_dns()
1633
- dns_records = @cloudflare.get("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {per_page: 100, type: 'CNAME', name: "www-#{get_deploy_id}.prima.it"})
1634
- if dns_records.body[:result_info][:count] > 0
1635
- return dns_records.body[:result][0][:id]
1636
- end
1637
- false
1638
- end
1639
-
1640
- def delete_lighthouse_dns()
1641
- dns_id = get_lighthouse_dns()
1642
- @cloudflare.delete("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records/#{dns_id}") if dns_id
1643
- end
1644
-
1645
- def launch_bocelli_test(url)
1646
- @batch.submit_job({
1647
- job_name: "bocelli-test-#{get_deploy_id}",
1648
- job_queue: "tools-production",
1649
- job_definition: describe_stack_resource('batch-job-bocelli-production', 'JobDefinition').stack_resource_detail.physical_resource_id,
1650
- container_overrides: {
1651
- environment: [
1652
- {
1653
- name: "BATCH_COMMAND",
1654
- value: "test"
1655
- },
1656
- {
1657
- name: "QA_HOSTNAME",
1658
- value: url
1659
- },
1660
- {
1661
- name: "BRANCH_NAME",
1662
- value: @projects['prima']['name']
1663
- },
1664
- {
1665
- name: "COMMITTER_EMAIL",
1666
- value: @projects['prima']['committer']
1667
- }
1668
- ]
1669
- }
1670
- })
1671
- end
1672
-
1673
- def git_checkout_version(project, revision)
1674
- Dir.chdir "projects/#{project}"
1675
- exec_step "git checkout -- . && git checkout #{revision}"
1676
- Dir.chdir "../../"
1677
- end
1678
-
1679
- def create_asg_stack(stack_name, tags = [])
1680
- stack_body = IO.read('cloudformation/stacks/asg/ecs-asg-allinone.yml')
1681
- parameters = [
1682
- {
1683
- parameter_key: "Environment",
1684
- parameter_value: "qa"
1685
- },
1686
- {
1687
- parameter_key: "InstanceType",
1688
- parameter_value: "t3a.xlarge"
1689
- },
1690
- {
1691
- parameter_key: "ECSClusterName",
1692
- parameter_value: get_ecs_cluster_name
1693
- },
1694
- {
1695
- parameter_key: "AMIID",
1696
- parameter_value: @ami_id
1697
- }
1698
- ]
1699
- puts @tags
1700
- create_stack(stack_name, stack_body, parameters, tags, @cf_role)
1701
- end
1702
-
1703
- def create_cluster_stack(stack_name, tags = [])
1704
- stack_body = IO.read('cloudformation/stacks/ecs-cluster.yml')
1705
- create_stack(stack_name, stack_body, [], tags)
1706
- end
1707
-
1708
- def update_cluster_stack(stack_name, tags = [])
1709
- stack_body = IO.read('cloudformation/stacks/ecs-cluster.yml')
1710
- update_stack(stack_name, stack_body, [], tags)
1711
- end
1712
-
1713
- def create_alb_stack(stack_name, role, hash, environment = 'qa')
1714
- stack_body = IO.read('cloudformation/stacks/elb/alb-public-qa.yml')
1715
- parameters = [
1716
- {
1717
- parameter_key: "Environment",
1718
- parameter_value: environment
1719
- },
1720
- {
1721
- parameter_key: "Role",
1722
- parameter_value: role
1723
- },
1724
- {
1725
- parameter_key: "EnvHash",
1726
- parameter_value: hash
1727
- }
1728
- ]
1729
- create_stack(stack_name, stack_body, parameters, [], @cf_role)
1730
- end
1731
-
1732
- def import_redis_crash(qa_ip_address)
1733
- output "Importo chiavi di Redis da staging\n".yellow
1734
-
1735
- prefixes = ['CODICI', 'fun_with_flags']
1736
- redis_qa = Redis.new(:url => "redis://#{qa_ip_address}:6379/10")
1737
- redis_staging = Redis.new(:url => 'redis://staging.cache-1.prima.it:6379/10')
1738
-
1739
- prefixes.each do |prefix|
1740
- redis_staging.keys("#{prefix}*").each do |key|
1741
- next unless redis_qa.keys(key).empty?
1742
- output "Importo #{key} dal Redis di staging\n".yellow
1743
- dump_staging = redis_staging.dump key
1744
- redis_qa.restore key, 0, dump_staging
1745
- end
1746
- end
1747
- end
1748
-
1749
- def import_dbs(ip_address)
1750
- overrides = {
1751
- container_overrides: [
1752
- {
1753
- name: 'dbrestore',
1754
- environment: [
1755
- {
1756
- name: 'EC2_IP_ADDRESS',
1757
- value: ip_address
1758
- }
1759
- ]
1760
- }
1761
- ]
1762
- }
1763
- resp = run_ecs_task(get_ecs_cluster_name, @import_db_task, overrides, 1)
1764
- return resp
1765
- end
1766
-
1767
- def wait_for_db_import(task)
1768
- output "Attendo che i DB vengano importati...\n".yellow
1769
- stopped_at = nil
1770
- sleep 15 # altrimenti non trova il task appena avviato...
1771
- while stopped_at.nil?
1772
- if task.tasks[0].nil?
1773
- pp get_ecs_cluster_name
1774
- pp task
1775
- stop_if true, "Task di import DB lanciato, ma risposta vuota!".red
1776
- end
1777
- task = describe_ecs_tasks(task.tasks[0].cluster_arn, [task.tasks[0].task_arn])
1778
- stopped_at = task.tasks[0].stopped_at unless task.tasks[0].nil?
1779
- sleep_seconds = 10
1780
- seconds_elapsed = 0
1781
- while true && stopped_at.nil?
1782
- break if seconds_elapsed >= sleep_seconds
1783
- print '.'.yellow; STDOUT.flush
1784
- sleep 1
1785
- seconds_elapsed += 1
1786
- end
1787
- end
1788
- print "\n"
1789
- end
1790
-
1791
- def get_stacks()
1792
- envs = {}
1793
- stack_list = stack_list()
1794
- stack_list.each do |stack|
1795
- unless stack.stack_name.match(/spotfleet-allinone-qa-(\w+)$/)
1796
- env_hash = stack.stack_name.match(/qa-(\w+)$/)[0]
1797
- envs[env_hash] = stack.tags unless envs.has_key?(env_hash) || stack.tags.empty?
1798
- end
1799
- end
1800
- return stack_list, envs
1801
- end
1802
-
1803
- def get_clusters()
1804
- envs = {}
1805
- cluster_list = cluster_list()
1806
- cluster_list.each do |stack|
1807
- unless stack.stack_name.match(/spotfleet-allinone-qa-(\w+)$/)
1808
- env_hash = stack.stack_name.match(/qa-(\w+)$/)[0]
1809
- envs[env_hash] = stack.tags unless envs.has_key?(env_hash) || stack.tags.empty?
1810
- end
1811
- end
1812
- return cluster_list, envs
1813
- end
1814
-
1815
- def hostname_pattern_priority()
1816
- (Time.now.to_i.to_s[-4..-1].to_i + Random.rand(40000)).to_s
1817
- end
1818
-
1819
- def launch_mimo(env_hash)
1820
- resp = describe_stack_resource('batch-job-mimo', 'JobDefinition')
1821
-
1822
- @batch.submit_job({
1823
- job_name: "mimo-#{get_deploy_id}", # required
1824
- job_queue: "tools-production", # required
1825
- job_definition: resp.stack_resource_detail.physical_resource_id, # required
1826
- container_overrides: {
1827
- environment: [
1828
- {
1829
- name: 'ENV_HASH',
1830
- value: env_hash
1831
- },
1832
- {
1833
- name: 'APP_ENV',
1834
- value: 'qa'
1835
- },
1836
- {
1837
- name: 'CYPRESS_BASE_URL',
1838
- value: "https://hutch-#{env_hash}.qa.colaster.com"
1839
- },
1840
- {
1841
- name: 'CYPRESS_PEANO_BASE_URL',
1842
- value: "http://peano-#{env_hash}.qa.colaster.com:10039/quotation"
1843
- },
1844
- {
1845
- name: 'CYPRESS_API_BASE_URL',
1846
- value: "https://#{get_route53_hostname("starsky")}/graphql"
1847
- },
1848
- {
1849
- name: 'QA_NAME',
1850
- value: @git_branch
1851
- }
1852
- ]
1853
- }
1854
- })
1855
-
1856
- output "Mimo lanciato con successo!\n".green
1857
- end
1858
-
1859
- def get_currently_deployed_version(stack_name)
1860
- parameters = get_stack_parameters(stack_name)
1861
- currently_deployed_version = nil
1862
- parameters.each do |parameter|
1863
- if parameter.parameter_key == "ReleaseVersion"
1864
- currently_deployed_version = parameter.parameter_value
1865
- end
1866
- end
1867
- currently_deployed_version
1868
- end
1869
-
1870
- def get_ami_id(stack_name)
1871
- get_stack_parameters(stack_name).each do |param|
1872
- if param.parameter_key == "AMIID"
1873
- return param.parameter_value
1874
- end
1875
- end
1876
- end
1877
- end
1878
-
1879
- def help_content
1880
- <<-HELP
1881
-
1882
- twig-buils
1883
- ===========
1884
-
1885
- Manage qa cloudformation stack creation
1886
-
1887
- Synopsis
1888
- --------
1889
-
1890
- twig build #command
1891
-
1892
- Description
1893
- -----------
1894
-
1895
- #command #command description
1896
-
1897
- HELP
1898
- end
1899
-
1900
- args = ARGV.dup
1901
-
1902
- if args.include?('--help')
1903
- puts help_content
1904
- exit
1905
- end
1906
-
1907
- gem_update = true
1908
- if args.include?('no-gem-update')
1909
- gem_update = false
1910
- end
1911
-
1912
- args.delete('no-gem-update')
1913
-
1914
- Build.new(gem_update).execute!(args)