prima-twig 1.0.23

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