prima-twig 0.58.509 → 0.59.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
@@ -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)