prima-twig 0.13.1 → 0.13.37

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