prima-twig 0.63.24 → 0.63.25

Sign up to get free protection for your applications and to get access to all the features.
data/bin/twig-build ADDED
@@ -0,0 +1,1968 @@
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: "HostnamePatternPriority",
1169
+ parameter_value: hostname_pattern_priority
1170
+ },
1171
+ {
1172
+ parameter_key: "HostnamePatternAggregatorPriority",
1173
+ parameter_value: (hostname_pattern_priority.to_i + 1).to_s
1174
+ },
1175
+ {
1176
+ parameter_key: "EnvHash",
1177
+ parameter_value: get_deploy_id
1178
+ },
1179
+ {
1180
+ parameter_key: "FePrimaDomain",
1181
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1182
+ },
1183
+ {
1184
+ parameter_key: "HostnamePattern",
1185
+ parameter_value: "www-#{get_deploy_id}.*"
1186
+ }
1187
+ ]
1188
+ if stack_exists?(stack_name_web)
1189
+ cur_version = get_currently_deployed_version(stack_name_web)
1190
+ update_stack(stack_name_web, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["prima"]['revision'])
1191
+ else
1192
+ create_stack(stack_name_web, stack_body, parameters, @tags, @cf_role)
1193
+ end
1194
+ end
1195
+
1196
+ def create_consumer_stack()
1197
+ wait_for_artifact('prima-artifacts-encrypted', "prima/#{@projects["prima"]['revision']}.tar.gz")
1198
+ # Waiting for prima healtcheck dependencies
1199
+ wait_for_stack_ready(get_stack_name("skynet")) unless stack_ready?(get_stack_name("skynet"))
1200
+ wait_for_stack_ready(get_stack_name("urania")) unless stack_ready?(get_stack_name("urania"))
1201
+ wait_for_stack_ready(get_stack_name("bburago")) unless stack_ready?(get_stack_name("bburago"))
1202
+ wait_for_stack_ready(get_stack_name("hal9000")) unless stack_ready?(get_stack_name("hal9000"))
1203
+ wait_for_stack_ready(get_stack_name("assange")) unless stack_ready?(get_stack_name("assange"))
1204
+ wait_for_stack_ready(get_stack_name("fidaty")) unless stack_ready?(get_stack_name("fidaty"))
1205
+ wait_for_stack_ready(get_stack_name("leftorium")) unless stack_ready?(get_stack_name("leftorium"))
1206
+ wait_for_stack_ready(get_stack_name("rachele")) unless stack_ready?(get_stack_name("rachele"))
1207
+ stack_name_consumer = get_stack_name("consumer")
1208
+ git_checkout_version('prima', @projects["prima"]['revision'])
1209
+ stack_body = IO.read('projects/prima/app/cloudformation/tasks/consumer.yml')
1210
+ parameters = [
1211
+ {
1212
+ parameter_key: "Environment",
1213
+ parameter_value: "qa"
1214
+ },
1215
+ {
1216
+ parameter_key: "ReleaseVersion",
1217
+ parameter_value: "#{@projects["prima"]['revision']}"
1218
+ },
1219
+ {
1220
+ parameter_key: "ECSClusterName",
1221
+ parameter_value: get_ecs_cluster_name
1222
+ },
1223
+ {
1224
+ parameter_key: "EnvHash",
1225
+ parameter_value: get_deploy_id
1226
+ }
1227
+ ]
1228
+ if stack_exists?(stack_name_consumer)
1229
+ cur_version = get_currently_deployed_version(stack_name_consumer)
1230
+ update_stack(stack_name_consumer, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["prima"]['revision'])
1231
+ else
1232
+ create_stack(stack_name_consumer, stack_body, parameters, @tags, @cf_role)
1233
+ end
1234
+
1235
+ stack_name_consumer_api = get_stack_name("consumer-api")
1236
+ stack_body = IO.read('projects/prima/app/cloudformation/tasks/consumer-api.yml')
1237
+ parameters = [
1238
+ {
1239
+ parameter_key: "Environment",
1240
+ parameter_value: "qa"
1241
+ },
1242
+ {
1243
+ parameter_key: "ReleaseVersion",
1244
+ parameter_value: "#{@projects["prima"]['revision']}"
1245
+ },
1246
+ {
1247
+ parameter_key: "ECSClusterName",
1248
+ parameter_value: get_ecs_cluster_name
1249
+ },
1250
+ {
1251
+ parameter_key: "EnvHash",
1252
+ parameter_value: get_deploy_id
1253
+ },
1254
+ {
1255
+ parameter_key: "FePrimaDomain",
1256
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1257
+ },
1258
+ {
1259
+ parameter_key: "HostnamePattern",
1260
+ parameter_value: "consumer-#{get_deploy_id}.qa.colaster.com"
1261
+ }
1262
+ ]
1263
+ if stack_exists?(stack_name_consumer_api)
1264
+ cur_version = get_currently_deployed_version(stack_name_consumer_api)
1265
+ update_stack(stack_name_consumer_api, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["prima"]['revision'])
1266
+ else
1267
+ create_stack(stack_name_consumer_api, stack_body, parameters, @tags, @cf_role)
1268
+ end
1269
+ end
1270
+
1271
+ def create_roger_stack()
1272
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/roger/#{@projects["roger"]['revision']}-qa.tar.gz")
1273
+ wait_for_stack_ready(get_stack_name("consumer")) unless stack_ready?(get_stack_name("consumer"))
1274
+ stack_name_roger = "ecs-task-roger-qa-#{get_deploy_id}"
1275
+ git_checkout_version('roger', @projects["roger"]['revision'])
1276
+ stack_body = File.read('projects/roger/deploy/task.yml')
1277
+ parameters = [
1278
+ {
1279
+ parameter_key: "Environment",
1280
+ parameter_value: "qa"
1281
+ },
1282
+ {
1283
+ parameter_key: "ReleaseVersion",
1284
+ parameter_value: @projects["roger"]['revision']
1285
+ },
1286
+ {
1287
+ parameter_key: "ECSClusterName",
1288
+ parameter_value: get_ecs_cluster_name
1289
+ },
1290
+ {
1291
+ parameter_key: "TaskDesiredCount",
1292
+ parameter_value: '1'
1293
+ }
1294
+ ]
1295
+ if stack_exists?(stack_name_roger)
1296
+ cur_version = get_currently_deployed_version(stack_name_roger)
1297
+ update_stack(stack_name_roger, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["roger"]['revision'])
1298
+ else
1299
+ create_stack(stack_name_roger, stack_body, parameters, @tags, @cf_role)
1300
+ end
1301
+ end
1302
+
1303
+ def create_hutch_stack()
1304
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/hutch/#{@projects["hutch"]['revision']}-#{get_deploy_id[0..7]}-qa.tar.gz")
1305
+ wait_for_stack_ready(get_stack_name("starsky")) unless stack_ready?(get_stack_name("starsky"))
1306
+
1307
+ stack_name_hutch = get_stack_name("hutch")
1308
+ git_checkout_version('hutch', @projects["hutch"]['revision'])
1309
+ stack_body = File.read('projects/hutch/deploy/task.yml')
1310
+ parameters = [
1311
+ {
1312
+ parameter_key: "Environment",
1313
+ parameter_value: "qa"
1314
+ },
1315
+ {
1316
+ parameter_key: "ReleaseVersion",
1317
+ parameter_value: "#{@projects["hutch"]['revision']}-#{get_deploy_id[0..7]}"
1318
+ },
1319
+ {
1320
+ parameter_key: "ALBShortName",
1321
+ parameter_value: "hutch-qa-#{get_deploy_id}"[0..27]
1322
+ },
1323
+ {
1324
+ parameter_key: "ECSClusterName",
1325
+ parameter_value: get_ecs_cluster_name
1326
+ },
1327
+ {
1328
+ parameter_key: "EnvHash",
1329
+ parameter_value: get_deploy_id
1330
+ },
1331
+ {
1332
+ parameter_key: "HostnamePattern",
1333
+ parameter_value: "hutch-#{get_deploy_id}.qa.colaster.com"
1334
+ },
1335
+ {
1336
+ parameter_key: "HostnamePatternPriority",
1337
+ parameter_value: (hostname_pattern_priority.to_i + 254).to_s
1338
+ },
1339
+ {
1340
+ parameter_key: "ApiUrl",
1341
+ parameter_value: "https://#{get_route53_hostname('maia-intermediari')}"
1342
+ }
1343
+ ]
1344
+ if stack_exists?(stack_name_hutch)
1345
+ cur_version = get_currently_deployed_version(stack_name_hutch)
1346
+ update_stack(stack_name_hutch, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["hutch"]['revision'])
1347
+ else
1348
+ create_stack(stack_name_hutch, stack_body, parameters, @tags, @cf_role)
1349
+ end
1350
+ end
1351
+
1352
+ def create_maia_stack()
1353
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/maia/#{@projects["maia"]['revision']}-qa.tar.gz")
1354
+ stack_name_maia = get_stack_name("maia")
1355
+ git_checkout_version('maia', @projects["maia"]['revision'])
1356
+ stack_body = File.read('projects/maia/deploy/task.yml')
1357
+ parameters = [
1358
+ {
1359
+ parameter_key: "Environment",
1360
+ parameter_value: "qa"
1361
+ },
1362
+ {
1363
+ parameter_key: "ReleaseVersion",
1364
+ parameter_value: "#{@projects["maia"]['revision']}"
1365
+ },
1366
+ {
1367
+ parameter_key: "ALBShortName",
1368
+ parameter_value: "maia-qa-#{get_deploy_id}"[0..15]
1369
+ },
1370
+ {
1371
+ parameter_key: "ECSClusterName",
1372
+ parameter_value: get_ecs_cluster_name
1373
+ },
1374
+ {
1375
+ parameter_key: "EnvHash",
1376
+ parameter_value: get_deploy_id
1377
+ },
1378
+ {
1379
+ parameter_key: "HostnamePatternPublic",
1380
+ parameter_value: "api*-#{get_deploy_id}.qa.colaster.com"
1381
+ },
1382
+ {
1383
+ parameter_key: "HostnamePatternPriority",
1384
+ parameter_value: (hostname_pattern_priority.to_i + 128).to_s
1385
+ },
1386
+ {
1387
+ parameter_key: "ProxyHostnameIntermediari",
1388
+ parameter_value: "api-intermediari-#{get_deploy_id}.qa.colaster.com"
1389
+ },
1390
+ {
1391
+ parameter_key: "ProxyHostnameApp",
1392
+ parameter_value: "api-#{get_deploy_id}.qa.colaster.com"
1393
+ }
1394
+ ]
1395
+ if stack_exists?(stack_name_maia)
1396
+ cur_version = get_currently_deployed_version(stack_name_maia)
1397
+ update_stack(stack_name_maia, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["maia"]['revision'])
1398
+ else
1399
+ create_stack(stack_name_maia, stack_body, parameters, @tags, @cf_role)
1400
+ end
1401
+ end
1402
+
1403
+ def create_rogoreport_stack()
1404
+ true
1405
+ end
1406
+
1407
+ def complete_qa_setup!()
1408
+ wait_for_stack_ready(get_stack_name("web")) unless stack_ready?(get_stack_name("web"))
1409
+ wait_for_stack_ready(get_stack_name("consumer")) unless stack_ready?(get_stack_name("consumer"))
1410
+ wait_for_stack_ready(get_stack_name("worker-ermes")) unless stack_ready?(get_stack_name("worker-ermes"))
1411
+ wait_for_stack_ready(get_stack_name("ermes")) unless stack_ready?(get_stack_name("ermes"))
1412
+ wait_for_stack_ready(get_stack_name("peano")) unless stack_ready?(get_stack_name("peano"))
1413
+ # wait_for_stack_ready(get_stack_name("rogoreport")) unless stack_ready?(get_stack_name("rogoreport"))
1414
+ wait_for_stack_ready(get_stack_name("borat")) unless stack_ready?(get_stack_name("borat"))
1415
+ wait_for_stack_ready(get_stack_name("activia")) unless stack_ready?(get_stack_name("activia"))
1416
+ wait_for_stack_ready(get_stack_name("maia")) unless stack_ready?(get_stack_name("maia"))
1417
+ wait_for_stack_ready(get_stack_name("crash")) unless stack_ready?(get_stack_name("crash"))
1418
+ wait_for_stack_ready(get_stack_name("hutch")) unless stack_ready?(get_stack_name("hutch"))
1419
+
1420
+ update_service_defaults(get_stack_name("web"))
1421
+ update_service_defaults(get_stack_name("consumer-api"))
1422
+ update_service_defaults(get_stack_name("urania"))
1423
+ update_service_defaults(get_stack_name("worker-ermes"))
1424
+ update_service_defaults(get_stack_name("ermes"))
1425
+ update_service_defaults(get_stack_name("bburago"))
1426
+ update_service_defaults(get_stack_name("hal9000"))
1427
+ update_service_defaults(get_stack_name("fidaty"))
1428
+ update_service_defaults(get_stack_name("peano"))
1429
+ # update_service_defaults(get_stack_name("rogoreport"))
1430
+ update_service_defaults(get_stack_name("assange"))
1431
+ update_service_defaults(get_stack_name("borat"))
1432
+ update_service_defaults(get_stack_name("activia"))
1433
+ update_service_defaults(get_stack_name("skynet"))
1434
+ update_service_defaults(get_stack_name("leftorium"))
1435
+ update_service_defaults(get_stack_name("rachele"))
1436
+ update_service_defaults(get_stack_name("maia"))
1437
+ update_service_defaults(get_stack_name("starsky"))
1438
+ update_service_defaults(get_stack_name("hutch"))
1439
+ update_service_defaults(get_stack_name("crash"))
1440
+
1441
+ activia_hostname = get_route53_hostname("activia")
1442
+ assange_hostname = get_route53_hostname("assange")
1443
+ bburago_hostname = get_route53_hostname("bburago")
1444
+ borat_hostname = get_route53_hostname("borat")
1445
+ ermes_hostname = get_route53_hostname("ermes")
1446
+ fidaty_hostname = get_route53_hostname("fidaty")
1447
+ hal9000_hostname = get_route53_hostname("hal9000")
1448
+ prima_hostname = get_route53_hostname("web")
1449
+ peano_hostname = get_route53_hostname("peano")
1450
+ skynet_hostname = get_route53_hostname("skynet")
1451
+ urania_hostname = get_route53_hostname("urania")
1452
+ roger_hostname = get_route53_hostname("roger")
1453
+ leftorium_hostname = get_route53_hostname("leftorium")
1454
+ rachele_hostname = get_route53_hostname("rachele")
1455
+ maia_app_hostname = get_route53_hostname("maia-app")
1456
+ maia_intermediari_hostname = get_route53_hostname("maia-intermediari")
1457
+ crash_hostname = get_route53_hostname("crash")
1458
+ starsky_hostname = get_route53_hostname("starsky")
1459
+ hutch_hostname = get_route53_hostname("hutch")
1460
+
1461
+ launch_mimo(get_deploy_id)
1462
+
1463
+ projects_text = "
1464
+ > Prima url: https://#{prima_hostname}
1465
+ > Backoffice (Borat) url: https://#{borat_hostname}
1466
+ > Urania url: http://#{urania_hostname}:81
1467
+ > Bburago url: http://#{bburago_hostname}:83
1468
+ > Ermes url: http://#{ermes_hostname}:10002
1469
+ > Hal9000 url: http://#{hal9000_hostname}:10031
1470
+ > Fidaty url: http://#{fidaty_hostname}:10021
1471
+ > Peano url: http://#{peano_hostname}:10039
1472
+ > Assange url: https://#{assange_hostname}
1473
+ > Activia url: http://#{activia_hostname}:10041
1474
+ > Skynet url: http://#{skynet_hostname}:8050
1475
+ > Roger url: http://#{roger_hostname}:10051
1476
+ > Leftorium url: http://#{leftorium_hostname}:10061
1477
+ > Rachele url: http://#{rachele_hostname}:10040
1478
+ > Maia App url: https://#{maia_app_hostname}
1479
+ > Maia Intermediari url: https://#{maia_intermediari_hostname}
1480
+ > Crash url: https://#{crash_hostname}
1481
+ > Starsky url: https://#{starsky_hostname}
1482
+ > Hutch url: https://#{hutch_hostname}
1483
+ > RabbitMQ url: http://#{get_ec2_ip_address}:15672
1484
+ > Elasticsearch url: http://#{get_ec2_ip_address}:9200
1485
+ > Git branch: #{@git_branch}
1486
+ > SSH connection: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no githubUsername@#{get_ec2_ip_address}\n"
1487
+ output projects_text.cyan
1488
+ output "Deploy effettuato, everything is awesome!\n".green
1489
+
1490
+ if @projects['prima']['name'] != 'master' then
1491
+ output "Lancio il batch job per la visual regression..."
1492
+ launch_bocelli_test(prima_hostname)
1493
+ output "Visual regression lanciata con successo!"
1494
+
1495
+ output "Lancio i test con Lighthouse..."
1496
+ launch_lighthouse_test(prima_hostname, "mobile")
1497
+ launch_lighthouse_test(prima_hostname, "desktop")
1498
+ output "Test con Lighthouse lanciati con successo..."
1499
+ end
1500
+
1501
+ qainit_write_output(projects_text, 'Indirizzi scritti su ')
1502
+ end
1503
+
1504
+ def get_route53_hostname(project)
1505
+ case
1506
+ when project.include?('web')
1507
+ host = "www-#{get_deploy_id}.qa.colaster.com"
1508
+ when project.include?('urania')
1509
+ host = "urania-#{get_deploy_id}.qa.colaster.com"
1510
+ when project.include?('bburago')
1511
+ host = "bburago-#{get_deploy_id}.qa.colaster.com"
1512
+ when project.include?('hal9000')
1513
+ host = "hal9000-#{get_deploy_id}.qa.colaster.com"
1514
+ when project.include?('fidaty')
1515
+ host = "fidaty-#{get_deploy_id}.qa.colaster.com"
1516
+ when project.include?('peano')
1517
+ host = "peano-#{get_deploy_id}.qa.colaster.com"
1518
+ when project.include?('assange')
1519
+ host = "assange-#{get_deploy_id}.qa.colaster.com"
1520
+ when project.include?('borat')
1521
+ host = "backoffice-#{get_deploy_id}.qa.colaster.com"
1522
+ when project.include?('crash')
1523
+ host = "crash-#{get_deploy_id}.qa.colaster.com"
1524
+ when project.include?('ermes')
1525
+ host = "ermes-#{get_deploy_id}.qa.colaster.com"
1526
+ when project.include?('activia')
1527
+ host = "activia-#{get_deploy_id}.qa.colaster.com"
1528
+ when project.include?('skynet')
1529
+ host = "skynet-#{get_deploy_id}.qa.colaster.com"
1530
+ when project.include?('roger')
1531
+ host = "roger-#{get_deploy_id}.qa.colaster.com"
1532
+ when project.include?('leftorium')
1533
+ host = "leftorium-#{get_deploy_id}.qa.colaster.com"
1534
+ when project.include?('rachele')
1535
+ host = "rachele-#{get_deploy_id}.qa.colaster.com"
1536
+ when project.include?('starsky')
1537
+ host = "starsky-#{get_deploy_id}.qa.colaster.com"
1538
+ when project.include?('hutch')
1539
+ host = "hutch-#{get_deploy_id}.qa.colaster.com"
1540
+ when project.include?('maia-app')
1541
+ host = "api-#{get_deploy_id}.qa.colaster.com"
1542
+ when project.include?('maia-intermediari')
1543
+ host = "api-intermediari-#{get_deploy_id}.qa.colaster.com"
1544
+ end
1545
+ host
1546
+ end
1547
+
1548
+ def get_ec2_ip_address()
1549
+ if @ec2_ip_address
1550
+ @ec2_ip_address
1551
+ else
1552
+ resp = describe_stack_resource(get_asg_stack_name, 'ECSAutoScalingGroup')
1553
+ resp = describe_auto_scaling_groups([resp.stack_resource_detail.physical_resource_id], 1)
1554
+ instance_id = resp.auto_scaling_groups[0].instances[0].instance_id
1555
+ resp = describe_instances([instance_id])
1556
+ @ec2_ip_address = resp.reservations[0].instances[0].private_ip_address
1557
+ @ec2_ip_address
1558
+ end
1559
+ end
1560
+
1561
+ def get_alb_host(stack_name)
1562
+ case
1563
+ when stack_name.include?('web')
1564
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1565
+ when stack_name.include?('urania')
1566
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1567
+ when stack_name.include?('backoffice')
1568
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1569
+ when stack_name.include?('bburago')
1570
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1571
+ when stack_name.include?('hal9000')
1572
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1573
+ when stack_name.include?('fidaty')
1574
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1575
+ when stack_name.include?('activia')
1576
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1577
+ when stack_name.include?('skynet')
1578
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1579
+ when stack_name.include?('roger')
1580
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1581
+ when stack_name.include?('alb-http-public')
1582
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1583
+ when stack_name.include?('alb-ws-public')
1584
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1585
+ when stack_name.include?('peano')
1586
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1587
+ when stack_name.include?('leftorium')
1588
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1589
+ when stack_name.include?('assange')
1590
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1591
+ when stack_name.include?('borat')
1592
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1593
+ when stack_name.include?('crash')
1594
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1595
+ when stack_name.include?('rachele')
1596
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1597
+ when stack_name.include?('starsky')
1598
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1599
+ when stack_name.include?('hutch')
1600
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1601
+ when stack_name.include?('maia')
1602
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1603
+ end
1604
+ resp = describe_stack_resource(stack_name, logical_resource_id)
1605
+ resp = describe_load_balancers([resp.stack_resource_detail.physical_resource_id])
1606
+ resp.load_balancers[0].dns_name
1607
+ end
1608
+
1609
+ def update_service_defaults(stack_name)
1610
+ case
1611
+ when stack_name.include?('web')
1612
+ logical_resource_id = 'ECSServiceWebQA'
1613
+ when stack_name.include?('consumer')
1614
+ logical_resource_id = 'ECSServiceConsumerApiQa'
1615
+ when stack_name.include?('urania')
1616
+ logical_resource_id = 'ECSServiceUraniaQA'
1617
+ when stack_name.include?('backoffice')
1618
+ logical_resource_id = 'ECSServiceBackoffice'
1619
+ when stack_name.include?('worker-ermes')
1620
+ logical_resource_id = 'ECSServiceErmesWorker'
1621
+ when stack_name.include?('ermes')
1622
+ logical_resource_id = 'ECSServiceErmesQA'
1623
+ when stack_name.include?('bburago')
1624
+ logical_resource_id = 'ECSServiceBburagoQA'
1625
+ when stack_name.include?('hal9000')
1626
+ logical_resource_id = 'ECSServiceHal9000QA'
1627
+ when stack_name.include?('fidaty')
1628
+ logical_resource_id = 'ECSServiceFidatyQA'
1629
+ when stack_name.include?('skynet')
1630
+ logical_resource_id = 'ECSServiceSkynetQA'
1631
+ when stack_name.include?('roger')
1632
+ logical_resource_id = 'ECSServiceRogerQA'
1633
+ when stack_name.include?('activia')
1634
+ logical_resource_id = 'ECSServiceActiviaQA'
1635
+ when stack_name.include?('peano')
1636
+ logical_resource_id = 'ECSServicePeanoQA'
1637
+ # when stack_name.include?('rogoreport')
1638
+ # logical_resource_id = 'ECSServiceRogoreport'
1639
+ when stack_name.include?('assange')
1640
+ logical_resource_id = 'ECSServiceAssangeQA'
1641
+ when stack_name.include?('borat')
1642
+ logical_resource_id = 'ECSServiceBorat'
1643
+ when stack_name.include?('leftorium')
1644
+ logical_resource_id = 'ECSServiceLeftoriumQA'
1645
+ when stack_name.include?('rachele')
1646
+ logical_resource_id = 'ECSServiceRacheleQA'
1647
+ when stack_name.include?('crash')
1648
+ logical_resource_id = 'ECSServiceCrashQA'
1649
+ when stack_name.include?('starsky')
1650
+ logical_resource_id = 'ECSServiceStarskyQA'
1651
+ when stack_name.include?('hutch')
1652
+ logical_resource_id = 'ECSServiceHutch'
1653
+ when stack_name.include?('maia')
1654
+ logical_resource_id = 'ECSServiceMaia'
1655
+ else
1656
+ raise "Service name non gestito per lo stack #{stack_name}"
1657
+ end
1658
+ resp = describe_stack_resource(stack_name, logical_resource_id)
1659
+ update_ecs_service(get_ecs_cluster_name, resp.stack_resource_detail.physical_resource_id, {minimum_healthy_percent: 0, maximum_percent: 100})
1660
+ end
1661
+
1662
+ def launch_lighthouse_test(url, device)
1663
+ @cloudflare.post("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {type: 'CNAME', name: "www-#{get_deploy_id}", content: url, proxied: true, ttl: 1}) unless get_lighthouse_dns()
1664
+
1665
+ @batch.submit_job({
1666
+ job_name: "lighthouse-#{device}-#{get_deploy_id}",
1667
+ job_queue: "tools-production",
1668
+ job_definition: describe_stack_resource('batch-job-lighthouse-production', 'JobDefinition').stack_resource_detail.physical_resource_id,
1669
+ container_overrides: {
1670
+ environment: [
1671
+ {
1672
+ name: "URL_TO_TEST",
1673
+ value: "https://www-#{get_deploy_id}.prima.it/?superprima"
1674
+ },
1675
+ {
1676
+ name: "DEVICE",
1677
+ value: device
1678
+ },
1679
+ {
1680
+ name: "BRANCH_NAME",
1681
+ value: @projects['prima']['name']
1682
+ },
1683
+ {
1684
+ name: "COMMITTER_EMAIL",
1685
+ value: @projects['prima']['committer']
1686
+ }
1687
+ ]
1688
+ }
1689
+ })
1690
+ end
1691
+
1692
+ def get_lighthouse_dns()
1693
+ dns_records = @cloudflare.get("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {per_page: 100, type: 'CNAME', name: "www-#{get_deploy_id}.prima.it"})
1694
+ if dns_records.body[:result_info][:count] > 0
1695
+ return dns_records.body[:result][0][:id]
1696
+ end
1697
+ false
1698
+ end
1699
+
1700
+ def delete_lighthouse_dns()
1701
+ dns_id = get_lighthouse_dns()
1702
+ @cloudflare.delete("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records/#{dns_id}") if dns_id
1703
+ end
1704
+
1705
+ def launch_bocelli_test(url)
1706
+ @batch.submit_job({
1707
+ job_name: "bocelli-test-#{get_deploy_id}",
1708
+ job_queue: "tools-production",
1709
+ job_definition: describe_stack_resource('batch-job-bocelli-production', 'JobDefinition').stack_resource_detail.physical_resource_id,
1710
+ container_overrides: {
1711
+ environment: [
1712
+ {
1713
+ name: "BATCH_COMMAND",
1714
+ value: "test"
1715
+ },
1716
+ {
1717
+ name: "QA_HOSTNAME",
1718
+ value: url
1719
+ },
1720
+ {
1721
+ name: "BRANCH_NAME",
1722
+ value: @projects['prima']['name']
1723
+ },
1724
+ {
1725
+ name: "COMMITTER_EMAIL",
1726
+ value: @projects['prima']['committer']
1727
+ }
1728
+ ]
1729
+ }
1730
+ })
1731
+ end
1732
+
1733
+ def git_checkout_version(project, revision)
1734
+ Dir.chdir "projects/#{project}"
1735
+ exec_step "git checkout -- . && git checkout #{revision}"
1736
+ Dir.chdir "../../"
1737
+ end
1738
+
1739
+ def create_asg_stack(stack_name, tags = [])
1740
+ stack_body = IO.read('cloudformation/stacks/asg/ecs-asg-allinone.yml')
1741
+ parameters = [
1742
+ {
1743
+ parameter_key: "Environment",
1744
+ parameter_value: "qa"
1745
+ },
1746
+ {
1747
+ parameter_key: "InstanceType",
1748
+ parameter_value: "t3a.xlarge"
1749
+ },
1750
+ {
1751
+ parameter_key: "ECSClusterName",
1752
+ parameter_value: get_ecs_cluster_name
1753
+ },
1754
+ {
1755
+ parameter_key: "AMIID",
1756
+ parameter_value: @ami_id
1757
+ }
1758
+ ]
1759
+ create_stack(stack_name, stack_body, parameters, tags, @cf_role)
1760
+ end
1761
+
1762
+ def create_cluster_stack(stack_name, tags = [])
1763
+ stack_body = IO.read('cloudformation/stacks/ecs-cluster.yml')
1764
+ create_stack(stack_name, stack_body, [], tags)
1765
+ end
1766
+
1767
+ def update_cluster_stack(stack_name, tags = [])
1768
+ stack_body = IO.read('cloudformation/stacks/ecs-cluster.yml')
1769
+ update_stack(stack_name, stack_body, [], tags)
1770
+ end
1771
+
1772
+ def create_alb_stack(stack_name, role, hash, environment = 'qa')
1773
+ stack_body = IO.read('cloudformation/stacks/elb/alb-public-qa.yml')
1774
+ parameters = [
1775
+ {
1776
+ parameter_key: "Environment",
1777
+ parameter_value: environment
1778
+ },
1779
+ {
1780
+ parameter_key: "Role",
1781
+ parameter_value: role
1782
+ },
1783
+ {
1784
+ parameter_key: "EnvHash",
1785
+ parameter_value: hash
1786
+ }
1787
+ ]
1788
+ create_stack(stack_name, stack_body, parameters, [], @cf_role)
1789
+ end
1790
+
1791
+ def import_redis_crash(qa_ip_address)
1792
+ output "Importo chiavi di Redis da staging\n".yellow
1793
+
1794
+ prefixes = ['CODICI', 'fun_with_flags']
1795
+ redis_qa = Redis.new(:url => "redis://#{qa_ip_address}:6379/10")
1796
+ redis_staging = Redis.new(:url => 'redis://staging.cache-1.prima.it:6379/10')
1797
+
1798
+ prefixes.each do |prefix|
1799
+ redis_staging.keys("#{prefix}*").each do |key|
1800
+ next unless redis_qa.keys(key).empty?
1801
+ output "Importo #{key} dal Redis di staging\n".yellow
1802
+ dump_staging = redis_staging.dump key
1803
+ redis_qa.restore key, 0, dump_staging
1804
+ end
1805
+ end
1806
+ end
1807
+
1808
+ def import_dbs(ip_address)
1809
+ overrides = {
1810
+ container_overrides: [
1811
+ {
1812
+ name: 'dbrestore',
1813
+ environment: [
1814
+ {
1815
+ name: 'EC2_IP_ADDRESS',
1816
+ value: ip_address
1817
+ }
1818
+ ]
1819
+ }
1820
+ ]
1821
+ }
1822
+ resp = run_ecs_task(get_ecs_cluster_name, @import_db_task, overrides, 1)
1823
+ return resp
1824
+ end
1825
+
1826
+ def wait_for_db_import(task)
1827
+ output "Attendo che i DB vengano importati...\n".yellow
1828
+ stopped_at = nil
1829
+ sleep 15 # altrimenti non trova il task appena avviato...
1830
+ while stopped_at.nil?
1831
+ if task.tasks[0].nil?
1832
+ pp get_ecs_cluster_name
1833
+ pp task
1834
+ stop_if true, "Task di import DB lanciato, ma risposta vuota!".red
1835
+ end
1836
+ task = describe_ecs_tasks(task.tasks[0].cluster_arn, [task.tasks[0].task_arn])
1837
+ stopped_at = task.tasks[0].stopped_at unless task.tasks[0].nil?
1838
+ sleep_seconds = 10
1839
+ seconds_elapsed = 0
1840
+ while true && stopped_at.nil?
1841
+ break if seconds_elapsed >= sleep_seconds
1842
+ print '.'.yellow; STDOUT.flush
1843
+ sleep 1
1844
+ seconds_elapsed += 1
1845
+ end
1846
+ end
1847
+ print "\n"
1848
+ end
1849
+
1850
+ def get_stacks()
1851
+ envs = {}
1852
+ stack_list = stack_list()
1853
+ stack_list.each do |stack|
1854
+ unless stack.stack_name.match(/spotfleet-allinone-qa-(\w+)$/)
1855
+ env_hash = stack.stack_name.match(/qa-(\w+)$/)[0]
1856
+ envs[env_hash] = stack.tags unless envs.has_key?(env_hash) || stack.tags.empty?
1857
+ end
1858
+ end
1859
+ return stack_list, envs
1860
+ end
1861
+
1862
+ def get_clusters()
1863
+ envs = {}
1864
+ cluster_list = cluster_list()
1865
+ cluster_list.each do |stack|
1866
+ unless stack.stack_name.match(/spotfleet-allinone-qa-(\w+)$/)
1867
+ env_hash = stack.stack_name.match(/qa-(\w+)$/)[0]
1868
+ envs[env_hash] = stack.tags unless envs.has_key?(env_hash) || stack.tags.empty?
1869
+ end
1870
+ end
1871
+ return cluster_list, envs
1872
+ end
1873
+
1874
+ def hostname_pattern_priority()
1875
+ (Time.now.to_i.to_s[-4..-1].to_i + Random.rand(40000)).to_s
1876
+ end
1877
+
1878
+ def launch_mimo(env_hash)
1879
+ resp = describe_stack_resource('batch-job-mimo', 'JobDefinition')
1880
+
1881
+ @batch.submit_job({
1882
+ job_name: "mimo-#{get_deploy_id}", # required
1883
+ job_queue: "tools-production", # required
1884
+ job_definition: resp.stack_resource_detail.physical_resource_id, # required
1885
+ container_overrides: {
1886
+ environment: [
1887
+ {
1888
+ name: 'ENV_HASH',
1889
+ value: env_hash
1890
+ },
1891
+ {
1892
+ name: 'APP_ENV',
1893
+ value: 'qa'
1894
+ },
1895
+ {
1896
+ name: 'CYPRESS_BASE_URL',
1897
+ value: "https://hutch-#{env_hash}.qa.colaster.com"
1898
+ },
1899
+ {
1900
+ name: 'CYPRESS_PEANO_BASE_URL',
1901
+ value: "http://peano-#{env_hash}.qa.colaster.com:10039/quotation"
1902
+ },
1903
+ {
1904
+ name: 'CYPRESS_API_BASE_URL',
1905
+ value: "https://#{get_route53_hostname("starsky")}/graphql"
1906
+ },
1907
+ {
1908
+ name: 'QA_NAME',
1909
+ value: @git_branch
1910
+ }
1911
+ ]
1912
+ }
1913
+ })
1914
+
1915
+ output "Mimo lanciato con successo!\n".green
1916
+ end
1917
+
1918
+ def get_currently_deployed_version(stack_name)
1919
+ parameters = get_stack_parameters(stack_name)
1920
+ currently_deployed_version = nil
1921
+ parameters.each do |parameter|
1922
+ if parameter.parameter_key == "ReleaseVersion"
1923
+ currently_deployed_version = parameter.parameter_value
1924
+ end
1925
+ end
1926
+ currently_deployed_version
1927
+ end
1928
+
1929
+ def get_ami_id(stack_name)
1930
+ get_stack_parameters(stack_name).each do |param|
1931
+ if param.parameter_key == "AMIID"
1932
+ return param.parameter_value
1933
+ end
1934
+ end
1935
+ end
1936
+ end
1937
+
1938
+ def help_content
1939
+ <<-HELP
1940
+
1941
+ twig-buils
1942
+ ===========
1943
+
1944
+ Manage qa cloudformation stack creation
1945
+
1946
+ Synopsis
1947
+ --------
1948
+
1949
+ twig build #command
1950
+
1951
+ Description
1952
+ -----------
1953
+
1954
+ #command #command description
1955
+
1956
+ HELP
1957
+ end
1958
+
1959
+ args = ARGV.dup
1960
+
1961
+ if args.include?('--help')
1962
+ puts help_content
1963
+ exit
1964
+ end
1965
+
1966
+ args.delete('no-gem-update')
1967
+
1968
+ Build.new().execute!(args)