prima-twig 0.59.7 → 0.59.123

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.
data/bin/twig-build ADDED
@@ -0,0 +1,2022 @@
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
+
363
+ stack_name_otel_agent = "ecs-task-otel-agent-qa-#{deploy_id}"
364
+ stack_body = IO.read('cloudformation/stacks/task/otel-agent.yml')
365
+ parameters = [
366
+ {
367
+ parameter_key: "Environment",
368
+ parameter_value: "qa"
369
+ },
370
+ {
371
+ parameter_key: "ClusterId",
372
+ parameter_value: get_ecs_cluster_name
373
+ },
374
+ {
375
+ parameter_key: "ConfigVersion",
376
+ parameter_value: "test-tracing"
377
+ }
378
+ ]
379
+ create_stack(stack_name_otel_agent, stack_body, parameters, @tags, @cf_role) unless stack_exists?(stack_name_otel_agent)
380
+ end
381
+
382
+ def create_skynet_stack()
383
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/skynet/#{@projects["skynet"]['revision']}-qa.tar.gz")
384
+ stack_name_skynet = get_stack_name("skynet")
385
+ git_checkout_version('skynet', @projects["skynet"]['revision'])
386
+ stack_body = File.read('projects/skynet/deploy/task.yml')
387
+ parameters = [
388
+ {
389
+ parameter_key: "Environment",
390
+ parameter_value: "qa"
391
+ },
392
+ {
393
+ parameter_key: "ReleaseVersion",
394
+ parameter_value: @projects["skynet"]['revision']
395
+ },
396
+ {
397
+ parameter_key: "TaskDesiredCount",
398
+ parameter_value: "1"
399
+ },
400
+ {
401
+ parameter_key: "ECSClusterName",
402
+ parameter_value: get_ecs_cluster_name
403
+ },
404
+ {
405
+ parameter_key: "HostnamePattern",
406
+ parameter_value: "skynet-#{get_deploy_id}.qa.colaster.com"
407
+ },
408
+ {
409
+ parameter_key: "HostnamePatternPriority",
410
+ parameter_value: hostname_pattern_priority
411
+ }
412
+ ]
413
+ if stack_exists?(stack_name_skynet)
414
+ cur_version = get_currently_deployed_version(stack_name_skynet)
415
+ update_stack(stack_name_skynet, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["skynet"]['revision'])
416
+ else
417
+ create_stack(stack_name_skynet, stack_body, parameters, @tags, @cf_role)
418
+ end
419
+ end
420
+
421
+ def create_urania_stack()
422
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/urania/#{@projects["urania"]['revision']}-qa.tar.gz")
423
+ stack_name_urania = get_stack_name("urania")
424
+ git_checkout_version('urania', @projects["urania"]['revision'])
425
+ stack_body = File.read('projects/urania/deploy/task.yml')
426
+ parameters = [
427
+ {
428
+ parameter_key: "Environment",
429
+ parameter_value: "qa"
430
+ },
431
+ {
432
+ parameter_key: "ReleaseVersion",
433
+ parameter_value: @projects["urania"]['revision']
434
+ },
435
+ {
436
+ parameter_key: "TaskDesiredCount",
437
+ parameter_value: "1"
438
+ },
439
+ {
440
+ parameter_key: "ECSClusterName",
441
+ parameter_value: get_ecs_cluster_name
442
+ },
443
+ {
444
+ parameter_key: "HostnamePattern",
445
+ parameter_value: "urania-#{get_deploy_id}.qa.colaster.com"
446
+ },
447
+ {
448
+ parameter_key: "HostnamePatternPriority",
449
+ parameter_value: hostname_pattern_priority
450
+ }
451
+ ]
452
+ if stack_exists?(stack_name_urania)
453
+ cur_version = get_currently_deployed_version(stack_name_urania)
454
+ update_stack(stack_name_urania, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["urania"]['revision'])
455
+ else
456
+ create_stack(stack_name_urania, stack_body, parameters, @tags, @cf_role)
457
+ end
458
+ end
459
+
460
+ def create_ermes_stack()
461
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/ermes/#{@projects["ermes"]['revision']}-qa.tar.gz")
462
+ stack_name_ermes = get_stack_name("ermes")
463
+ git_checkout_version('ermes', @projects["ermes"]['revision'])
464
+ stack_body = File.read('projects/ermes/deploy/task.yml')
465
+ parameters = [
466
+ {
467
+ parameter_key: "Environment",
468
+ parameter_value: "qa"
469
+ },
470
+ {
471
+ parameter_key: "ReleaseVersion",
472
+ parameter_value: "#{@projects['ermes']['revision']}"
473
+ },
474
+ {
475
+ parameter_key: "TaskDesiredCount",
476
+ parameter_value: "1"
477
+ },
478
+ {
479
+ parameter_key: "ECSClusterName",
480
+ parameter_value: get_ecs_cluster_name
481
+ },
482
+ {
483
+ parameter_key: "HostnamePattern",
484
+ parameter_value: "ermes-#{get_deploy_id}.qa.colaster.com"
485
+ },
486
+ {
487
+ parameter_key: "HostnamePatternPriority",
488
+ parameter_value: hostname_pattern_priority
489
+ },
490
+ {
491
+ parameter_key: "WebHost",
492
+ parameter_value: get_route53_hostname('ecs-task-web-qa-notneeded')
493
+ },
494
+ {
495
+ parameter_key: "PeanoHost",
496
+ parameter_value: get_route53_hostname('ecs-task-peano-qa-notneeded')
497
+ }
498
+ ]
499
+ if stack_exists?(stack_name_ermes)
500
+ cur_version = get_currently_deployed_version(stack_name_ermes)
501
+ update_stack(stack_name_ermes, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["ermes"]['revision'])
502
+ else
503
+ create_stack(stack_name_ermes, stack_body, parameters, @tags, @cf_role)
504
+ end
505
+
506
+ stack_name_ermes = get_stack_name("worker-ermes")
507
+ stack_body = File.read('projects/ermes/deploy/task-worker.yml')
508
+ parameters = [
509
+ {
510
+ parameter_key: "Environment",
511
+ parameter_value: "qa"
512
+ },
513
+ {
514
+ parameter_key: "ReleaseVersion",
515
+ parameter_value: "#{@projects['ermes']['revision']}"
516
+ },
517
+ {
518
+ parameter_key: "TaskDesiredCount",
519
+ parameter_value: "1"
520
+ },
521
+ {
522
+ parameter_key: "ECSClusterName",
523
+ parameter_value: get_ecs_cluster_name
524
+ },
525
+ {
526
+ parameter_key: "WebHost",
527
+ parameter_value: get_route53_hostname('ecs-task-web-qa-notneeded')
528
+ },
529
+ {
530
+ parameter_key: "PeanoHost",
531
+ parameter_value: get_route53_hostname('ecs-task-peano-qa-notneeded')
532
+ }
533
+ ]
534
+ if stack_exists?(stack_name_ermes)
535
+ cur_version = get_currently_deployed_version(stack_name_ermes)
536
+ update_stack(stack_name_ermes, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["ermes"]['revision'])
537
+ else
538
+ create_stack(stack_name_ermes, stack_body, parameters, @tags, @cf_role)
539
+ end
540
+ end
541
+
542
+ def create_bburago_stack()
543
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/bburago/#{@projects["bburago"]['revision']}-qa.tar.gz")
544
+
545
+ stack_name_bburago = get_stack_name("bburago")
546
+ git_checkout_version('bburago', @projects["bburago"]['revision'])
547
+ stack_body = File.read('projects/bburago/deploy/task.yml')
548
+ parameters = [
549
+ {
550
+ parameter_key: "Environment",
551
+ parameter_value: "qa"
552
+ },
553
+ {
554
+ parameter_key: "ReleaseVersion",
555
+ parameter_value: @projects["bburago"]['revision']
556
+ },
557
+ {
558
+ parameter_key: "ECSClusterName",
559
+ parameter_value: get_ecs_cluster_name
560
+ },
561
+ {
562
+ parameter_key: "TaskDesiredCount",
563
+ parameter_value: "1"
564
+ },
565
+ {
566
+ parameter_key: "HostnamePattern",
567
+ parameter_value: "bburago-#{get_deploy_id}.qa.colaster.com"
568
+ },
569
+ {
570
+ parameter_key: "HostnamePatternPriority",
571
+ parameter_value: hostname_pattern_priority
572
+ }
573
+ ]
574
+ if stack_exists?(stack_name_bburago)
575
+ cur_version = get_currently_deployed_version(stack_name_bburago)
576
+ update_stack(stack_name_bburago, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["bburago"]['revision'])
577
+ else
578
+ create_stack(stack_name_bburago, stack_body, parameters, @tags, @cf_role)
579
+ end
580
+ end
581
+
582
+ def create_hal9000_stack()
583
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/hal9000/#{@projects["hal9000"]['revision']}-qa.tar.gz")
584
+
585
+ stack_name_hal9000 = get_stack_name("hal9000")
586
+ git_checkout_version('hal9000', @projects["hal9000"]['revision'])
587
+ stack_body = File.read('projects/hal9000/deploy/task.yml')
588
+ parameters = [
589
+ {
590
+ parameter_key: "Environment",
591
+ parameter_value: "qa"
592
+ },
593
+ {
594
+ parameter_key: "ReleaseVersion",
595
+ parameter_value: @projects["hal9000"]['revision']
596
+ },
597
+ {
598
+ parameter_key: "ECSClusterName",
599
+ parameter_value: get_ecs_cluster_name
600
+ },
601
+ {
602
+ parameter_key: "TaskDesiredCount",
603
+ parameter_value: "1"
604
+ },
605
+ {
606
+ parameter_key: "HostnamePattern",
607
+ parameter_value: "hal9000-#{get_deploy_id}.qa.colaster.com"
608
+ },
609
+ {
610
+ parameter_key: "HostnamePatternPriority",
611
+ parameter_value: hostname_pattern_priority
612
+ }
613
+ ]
614
+ if stack_exists?(stack_name_hal9000)
615
+ cur_version = get_currently_deployed_version(stack_name_hal9000)
616
+ update_stack(stack_name_hal9000, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["hal9000"]['revision'])
617
+ else
618
+ create_stack(stack_name_hal9000, stack_body, parameters, @tags, @cf_role)
619
+ end
620
+ end
621
+
622
+ def create_fidaty_stack()
623
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/fidaty/#{@projects["fidaty"]['revision']}-qa.tar.gz")
624
+
625
+ stack_name_fidaty = get_stack_name("fidaty")
626
+ git_checkout_version('fidaty', @projects["fidaty"]['revision'])
627
+ stack_body = File.read('projects/fidaty/deploy/task.yml')
628
+ parameters = [
629
+ {
630
+ parameter_key: "Environment",
631
+ parameter_value: "qa"
632
+ },
633
+ {
634
+ parameter_key: "ReleaseVersion",
635
+ parameter_value: "#{@projects["fidaty"]['revision']}"
636
+ },
637
+ {
638
+ parameter_key: "ECSClusterName",
639
+ parameter_value: get_ecs_cluster_name
640
+ },
641
+ {
642
+ parameter_key: "TaskDesiredCount",
643
+ parameter_value: "1"
644
+ },
645
+ {
646
+ parameter_key: "HostnamePattern",
647
+ parameter_value: "fidaty-#{get_deploy_id}.qa.colaster.com"
648
+ },
649
+ {
650
+ parameter_key: "HostnamePatternPriority",
651
+ parameter_value: hostname_pattern_priority
652
+ },
653
+ {
654
+ parameter_key: "PeanoHost",
655
+ parameter_value: get_route53_hostname("ecs-task-peano-qa-notneeded")
656
+ }
657
+ ]
658
+ if stack_exists?(stack_name_fidaty)
659
+ cur_version = get_currently_deployed_version(stack_name_fidaty)
660
+ update_stack(stack_name_fidaty, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["fidaty"]['revision'])
661
+ else
662
+ create_stack(stack_name_fidaty, stack_body, parameters, @tags, @cf_role)
663
+ end
664
+ end
665
+
666
+ def create_peano_stack()
667
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/peano/#{@projects["peano"]['revision']}-qa.tar.gz")
668
+
669
+ stack_name_peano = get_stack_name("peano")
670
+ git_checkout_version('peano', @projects["peano"]['revision'])
671
+ stack_body = File.read('projects/peano/deploy/task.yml')
672
+ parameters = [
673
+ {
674
+ parameter_key: "Environment",
675
+ parameter_value: "qa"
676
+ },
677
+ {
678
+ parameter_key: "ReleaseVersion",
679
+ parameter_value: "#{@projects['peano']['revision']}"
680
+ },
681
+ {
682
+ parameter_key: "ECSClusterName",
683
+ parameter_value: get_ecs_cluster_name
684
+ },
685
+ {
686
+ parameter_key: "TaskDesiredCount",
687
+ parameter_value: "1"
688
+ },
689
+ {
690
+ parameter_key: "HostnamePattern",
691
+ parameter_value: "peano-#{get_deploy_id}.qa.colaster.com"
692
+ },
693
+ {
694
+ parameter_key: "HostnamePatternPriority",
695
+ parameter_value: hostname_pattern_priority
696
+ },
697
+ {
698
+ parameter_key: "WebHost",
699
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
700
+ }
701
+ ]
702
+ if stack_exists?(stack_name_peano)
703
+ cur_version = get_currently_deployed_version(stack_name_peano)
704
+ update_stack(stack_name_peano, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["peano"]['revision'])
705
+ else
706
+ create_stack(stack_name_peano, stack_body, parameters, @tags, @cf_role)
707
+ end
708
+ end
709
+
710
+ # def create_rogoreport_stack()
711
+ # wait_for_artifact('prima-artifacts-encrypted', "microservices/rogoreport/rogoreport-#{@projects["rogoreport"]['revision']}-qa.tar.gz")
712
+ #
713
+ # stack_name_rogoreport = get_stack_name("rogoreport")
714
+ # git_checkout_version('rogoreport', @projects["rogoreport"]['revision'])
715
+ # stack_body = IO.read('projects/rogoreport/deploy/task.yml')
716
+ # parameters = [
717
+ # {
718
+ # parameter_key: "Environment",
719
+ # parameter_value: "qa"
720
+ # },
721
+ # {
722
+ # parameter_key: "ReleaseVersion",
723
+ # parameter_value: "#{@projects["rogoreport"]['revision']}"
724
+ # },
725
+ # {
726
+ # parameter_key: "ReleaseName",
727
+ # parameter_value: "rogoreport"
728
+ # },
729
+ # {
730
+ # parameter_key: "ECSClusterName",
731
+ # parameter_value: get_ecs_cluster_name
732
+ # }
733
+ # ]
734
+ # if stack_exists?(stack_name_rogoreport)
735
+ # cur_version = get_currently_deployed_version(stack_name_rogoreport)
736
+ # update_stack(stack_name_rogoreport, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["rogoreport"]['revision'])
737
+ # else
738
+ # create_stack(stack_name_rogoreport, stack_body, parameters, @tags, @cf_role)
739
+ # end
740
+ # end
741
+
742
+ def create_assange_stack()
743
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/assange/#{@projects["assange"]['revision']}-qa.tar.gz")
744
+
745
+ stack_name_assange = get_stack_name("assange")
746
+ git_checkout_version('assange', @projects["assange"]['revision'])
747
+ stack_body = IO.read('projects/assange/deploy/task.yml')
748
+ parameters = [
749
+ {
750
+ parameter_key: "Environment",
751
+ parameter_value: "qa"
752
+ },
753
+ {
754
+ parameter_key: "ReleaseVersion",
755
+ parameter_value: "#{@projects["assange"]['revision']}"
756
+ },
757
+ {
758
+ parameter_key: "ECSClusterName",
759
+ parameter_value: get_ecs_cluster_name
760
+ },
761
+ {
762
+ parameter_key: "TaskDesiredCount",
763
+ parameter_value: "1"
764
+ },
765
+ {
766
+ parameter_key: "ALBShortName",
767
+ parameter_value: "assange-qa-#{get_deploy_id}"[0..27]
768
+ },
769
+ {
770
+ parameter_key: "HostnamePattern",
771
+ parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
772
+ },
773
+ {
774
+ parameter_key: "HostnamePatternPriority",
775
+ parameter_value: (hostname_pattern_priority.to_i + 20).to_s
776
+ },
777
+ {
778
+ parameter_key: "EnvHash",
779
+ parameter_value: get_deploy_id
780
+ },
781
+ {
782
+ parameter_key: "WebHost",
783
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
784
+ },
785
+ {
786
+ parameter_key: "AssangeHost",
787
+ parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
788
+ }
789
+ ]
790
+ if stack_exists?(stack_name_assange)
791
+ cur_version = get_currently_deployed_version(stack_name_assange)
792
+ update_stack(stack_name_assange, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["assange"]['revision'])
793
+ else
794
+ create_stack(stack_name_assange, stack_body, parameters, @tags, @cf_role)
795
+ end
796
+
797
+ stack_name_assange_worker = get_stack_name("assange-worker")
798
+ git_checkout_version('assange', @projects["assange"]['revision'])
799
+ stack_body = IO.read('projects/assange/deploy/task-worker.yml')
800
+ parameters = [
801
+ {
802
+ parameter_key: "Environment",
803
+ parameter_value: "qa"
804
+ },
805
+ {
806
+ parameter_key: "ReleaseVersion",
807
+ parameter_value: "#{@projects["assange"]['revision']}"
808
+ },
809
+ {
810
+ parameter_key: "ECSClusterName",
811
+ parameter_value: get_ecs_cluster_name
812
+ },
813
+ {
814
+ parameter_key: "TaskDesiredCount",
815
+ parameter_value: "1"
816
+ },
817
+ {
818
+ parameter_key: "WebHost",
819
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
820
+ },
821
+ {
822
+ parameter_key: "AssangeHost",
823
+ parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
824
+ }
825
+ ]
826
+ if stack_exists?(stack_name_assange_worker)
827
+ cur_version = get_currently_deployed_version(stack_name_assange_worker)
828
+ update_stack(stack_name_assange_worker, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["assange"]['revision'])
829
+ else
830
+ create_stack(stack_name_assange_worker, stack_body, parameters, @tags, @cf_role)
831
+ end
832
+ end
833
+
834
+ def create_leftorium_stack()
835
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/leftorium/#{@projects["leftorium"]['revision']}-qa.tar.gz")
836
+
837
+ stack_name_leftorium = get_stack_name("leftorium")
838
+ git_checkout_version('leftorium', @projects["leftorium"]['revision'])
839
+ stack_body = File.read('projects/leftorium/deploy/task.yml')
840
+ parameters = [
841
+ {
842
+ parameter_key: "Environment",
843
+ parameter_value: "qa"
844
+ },
845
+ {
846
+ parameter_key: "ReleaseVersion",
847
+ parameter_value: "#{@projects["leftorium"]['revision']}"
848
+ },
849
+ {
850
+ parameter_key: "ECSClusterName",
851
+ parameter_value: get_ecs_cluster_name
852
+ },
853
+ {
854
+ parameter_key: "TaskDesiredCount",
855
+ parameter_value: "1"
856
+ },
857
+ {
858
+ parameter_key: "HostnamePattern",
859
+ parameter_value: "leftorium-#{get_deploy_id}.qa.colaster.com"
860
+ },
861
+ {
862
+ parameter_key: "HostnamePatternPriority",
863
+ parameter_value: hostname_pattern_priority
864
+ }
865
+ ]
866
+ if stack_exists?(stack_name_leftorium)
867
+ cur_version = get_currently_deployed_version(stack_name_leftorium)
868
+ update_stack(stack_name_leftorium, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["leftorium"]['revision'])
869
+ else
870
+ create_stack(stack_name_leftorium, stack_body, parameters, @tags, @cf_role)
871
+ end
872
+ end
873
+
874
+ def create_rachele_stack()
875
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/rachele/#{@projects["rachele"]['revision']}-qa.tar.gz")
876
+
877
+ stack_name_rachele = get_stack_name("rachele")
878
+ git_checkout_version('rachele', @projects["rachele"]['revision'])
879
+ stack_body = File.read('projects/rachele/deploy/task.yml')
880
+ parameters = [
881
+ {
882
+ parameter_key: "Environment",
883
+ parameter_value: "qa"
884
+ },
885
+ {
886
+ parameter_key: "ReleaseVersion",
887
+ parameter_value: "#{@projects["rachele"]['revision']}"
888
+ },
889
+ {
890
+ parameter_key: "ECSClusterName",
891
+ parameter_value: get_ecs_cluster_name
892
+ },
893
+ {
894
+ parameter_key: "TaskDesiredCount",
895
+ parameter_value: "1"
896
+ },
897
+ {
898
+ parameter_key: "WebHost",
899
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
900
+ },
901
+ {
902
+ parameter_key: "HostnamePattern",
903
+ parameter_value: "rachele-#{get_deploy_id}.qa.colaster.com"
904
+ },
905
+ {
906
+ parameter_key: "HostnamePatternPriority",
907
+ parameter_value: hostname_pattern_priority
908
+ }
909
+ ]
910
+ if stack_exists?(stack_name_rachele)
911
+ cur_version = get_currently_deployed_version(stack_name_rachele)
912
+ unless cur_version.include?(@projects["rachele"]['revision'])
913
+ delete_stack(stack_name_rachele)
914
+ wait_for_stack_removal(stack_name_rachele)
915
+ create_stack(stack_name_rachele, stack_body, parameters, @tags, @cf_role)
916
+ end
917
+ else
918
+ create_stack(stack_name_rachele, stack_body, parameters, @tags, @cf_role)
919
+ end
920
+ end
921
+
922
+ def create_borat_stack()
923
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/borat/#{@projects["borat"]['revision']}-qa.tar.gz")
924
+
925
+ stack_name_borat = get_stack_name("borat")
926
+ git_checkout_version('borat', @projects["borat"]['revision'])
927
+ stack_body = IO.read('projects/borat/deploy/task.yml')
928
+ parameters = [
929
+ {
930
+ parameter_key: "Environment",
931
+ parameter_value: "qa"
932
+ },
933
+ {
934
+ parameter_key: "ReleaseVersion",
935
+ parameter_value: "#{@projects["borat"]['revision']}"
936
+ },
937
+ {
938
+ parameter_key: "ECSClusterName",
939
+ parameter_value: get_ecs_cluster_name
940
+ },
941
+ {
942
+ parameter_key: "TaskDesiredCount",
943
+ parameter_value: "1"
944
+ },
945
+ {
946
+ parameter_key: "ALBShortName",
947
+ parameter_value: "borat-qa-#{get_deploy_id}"[0..27]
948
+ },
949
+ {
950
+ parameter_key: "HostnamePattern",
951
+ parameter_value: "backoffice-#{get_deploy_id}.qa.colaster.com"
952
+ },
953
+ {
954
+ parameter_key: "HostnamePatternPriority",
955
+ parameter_value: (hostname_pattern_priority.to_i + 30).to_s
956
+ },
957
+ {
958
+ parameter_key: "EnvHash",
959
+ parameter_value: get_deploy_id
960
+ },
961
+ {
962
+ parameter_key: "WsEndpoint",
963
+ parameter_value: "wss://backoffice-#{get_deploy_id}.qa.colaster.com/socket/websocket?vsn=1.0.0"
964
+ },
965
+ {
966
+ parameter_key: "GraphqlEndpoint",
967
+ parameter_value: "https://backoffice-#{get_deploy_id}.qa.colaster.com/graphql"
968
+ },
969
+ {
970
+ parameter_key: "GraphqlInsuranceEndpoint",
971
+ parameter_value: "https://backoffice-#{get_deploy_id}.qa.colaster.com/graphql/insurance"
972
+ },
973
+ {
974
+ parameter_key: "AuthEndpoint",
975
+ parameter_value: "https://backoffice-#{get_deploy_id}.qa.colaster.com/auth"
976
+ },
977
+ {
978
+ parameter_key: "FrontendEndpoint",
979
+ parameter_value: "https://www-#{get_deploy_id}.qa.colaster.com/"
980
+ }
981
+ ]
982
+ if stack_exists?(stack_name_borat)
983
+ cur_version = get_currently_deployed_version(stack_name_borat)
984
+ update_stack(stack_name_borat, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["borat"]['revision'])
985
+ else
986
+ create_stack(stack_name_borat, stack_body, parameters, @tags, @cf_role)
987
+ end
988
+ end
989
+
990
+ def create_crash_stack()
991
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/crash/#{@projects['crash']['revision']}-qa.tar.gz")
992
+
993
+ stack_name_crash = get_stack_name("crash")
994
+ git_checkout_version('crash', @projects['crash']['revision'])
995
+ stack_body = IO.read('projects/crash/deploy/task.yml')
996
+ parameters = [
997
+ {
998
+ parameter_key: 'Environment',
999
+ parameter_value: 'qa'
1000
+ },
1001
+ {
1002
+ parameter_key: 'ReleaseVersion',
1003
+ parameter_value: "#{@projects['crash']['revision']}"
1004
+ },
1005
+ {
1006
+ parameter_key: 'TaskDesiredCount',
1007
+ parameter_value: '1'
1008
+ },
1009
+ {
1010
+ parameter_key: 'ECSClusterName',
1011
+ parameter_value: get_ecs_cluster_name
1012
+ },
1013
+ {
1014
+ parameter_key: 'ALBShortName',
1015
+ parameter_value: "crash-qa-#{get_deploy_id}"[0..27]
1016
+ },
1017
+ {
1018
+ parameter_key: 'HostnamePattern',
1019
+ parameter_value: "crash-#{get_deploy_id}.qa.colaster.com"
1020
+ },
1021
+ {
1022
+ parameter_key: 'HostnamePatternPriority',
1023
+ parameter_value: (hostname_pattern_priority.to_i + 10).to_s
1024
+ },
1025
+ {
1026
+ parameter_key: "EnvHash",
1027
+ parameter_value: get_deploy_id
1028
+ },
1029
+ {
1030
+ parameter_key: "WsEndpoint",
1031
+ parameter_value: "wss://crash-#{get_deploy_id}.qa.colaster.com/socket/websocket?vsn=1.0.0"
1032
+ },
1033
+ {
1034
+ parameter_key: "GraphqlEndpoint",
1035
+ parameter_value: "https://crash-#{get_deploy_id}.qa.colaster.com/graphql"
1036
+ },
1037
+ {
1038
+ parameter_key: "AuthDomain",
1039
+ parameter_value: "https://www-#{get_deploy_id}.qa.colaster.com/"
1040
+ },
1041
+ ]
1042
+ if stack_exists?(stack_name_crash)
1043
+ cur_version = get_currently_deployed_version(stack_name_crash)
1044
+ update_stack(stack_name_crash, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["crash"]['revision'])
1045
+ else
1046
+ create_stack(stack_name_crash, stack_body, parameters, @tags, @cf_role)
1047
+ end
1048
+ end
1049
+
1050
+ def create_starsky_stack()
1051
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/starsky/#{@projects["starsky"]['revision']}-qa.tar.gz")
1052
+
1053
+ git_checkout_version('starsky', @projects["starsky"]['revision'])
1054
+ stack_name_starsky = get_stack_name("starsky")
1055
+ stack_body = IO.read('projects/starsky/deploy/task.yml')
1056
+ parameters = [
1057
+ {
1058
+ parameter_key: "Environment",
1059
+ parameter_value: "qa"
1060
+ },
1061
+ {
1062
+ parameter_key: "ReleaseVersion",
1063
+ parameter_value: "#{@projects["starsky"]['revision']}"
1064
+ },
1065
+ {
1066
+ parameter_key: "TaskDesiredCount",
1067
+ parameter_value: "1"
1068
+ },
1069
+ {
1070
+ parameter_key: "ECSClusterName",
1071
+ parameter_value: get_ecs_cluster_name
1072
+ },
1073
+ {
1074
+ parameter_key: "ALBShortName",
1075
+ parameter_value: "starsky-qa-#{get_deploy_id}"[0..27]
1076
+ },
1077
+ {
1078
+ parameter_key: "EnvHash",
1079
+ parameter_value: get_deploy_id
1080
+ },
1081
+ {
1082
+ parameter_key: "HostnamePattern",
1083
+ parameter_value: "starsky-#{get_deploy_id}.qa.colaster.com"
1084
+ },
1085
+ {
1086
+ parameter_key: "HostnamePatternPriority",
1087
+ parameter_value: (hostname_pattern_priority.to_i + 74).to_s
1088
+ }
1089
+ ]
1090
+ if stack_exists?(stack_name_starsky)
1091
+ cur_version = get_currently_deployed_version(stack_name_starsky)
1092
+ unless cur_version.include?(@projects["starsky"]['revision'])
1093
+ delete_stack(stack_name_starsky)
1094
+ wait_for_stack_removal(stack_name_starsky)
1095
+ create_stack(stack_name_starsky, stack_body, parameters, @tags, @cf_role)
1096
+ end
1097
+ else
1098
+ create_stack(stack_name_starsky, stack_body, parameters, @tags, @cf_role)
1099
+ end
1100
+ end
1101
+
1102
+ def create_activia_stack()
1103
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/activia/#{@projects["activia"]['revision']}-qa.tar.gz")
1104
+
1105
+ stack_name_activia = get_stack_name("activia")
1106
+ git_checkout_version('activia', @projects["activia"]['revision'])
1107
+ stack_body = File.read('projects/activia/deploy/task.yml')
1108
+ parameters = [
1109
+ {
1110
+ parameter_key: "Environment",
1111
+ parameter_value: "qa"
1112
+ },
1113
+ {
1114
+ parameter_key: "ReleaseVersion",
1115
+ parameter_value: "#{@projects["activia"]['revision']}"
1116
+ },
1117
+ {
1118
+ parameter_key: "ECSClusterName",
1119
+ parameter_value: get_ecs_cluster_name
1120
+ },
1121
+ {
1122
+ parameter_key: "TaskDesiredCount",
1123
+ parameter_value: "1"
1124
+ },
1125
+ {
1126
+ parameter_key: "HostnamePattern",
1127
+ parameter_value: "activia-#{get_deploy_id}.qa.colaster.com"
1128
+ },
1129
+ {
1130
+ parameter_key: "HostnamePatternPriority",
1131
+ parameter_value: hostname_pattern_priority
1132
+ },
1133
+ {
1134
+ parameter_key: "WebHost",
1135
+ parameter_value: get_route53_hostname('ecs-task-web-qa-notneeded')
1136
+ },
1137
+ {
1138
+ parameter_key: "PeanoHost",
1139
+ parameter_value: get_route53_hostname('ecs-task-peano-qa-notneeded')
1140
+ }
1141
+ ]
1142
+ if stack_exists?(stack_name_activia)
1143
+ cur_version = get_currently_deployed_version(stack_name_activia)
1144
+ update_stack(stack_name_activia, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["activia"]['revision'])
1145
+ else
1146
+ create_stack(stack_name_activia, stack_body, parameters, @tags, @cf_role)
1147
+ end
1148
+ end
1149
+
1150
+ def create_web_stack()
1151
+ wait_for_artifact('prima-artifacts-encrypted', "prima/#{@projects["prima"]['revision']}.tar.gz")
1152
+ # Waiting for prima healtcheck dependencies
1153
+ wait_for_stack_ready(get_stack_name("skynet")) unless stack_ready?(get_stack_name("skynet"))
1154
+ wait_for_stack_ready(get_stack_name("urania")) unless stack_ready?(get_stack_name("urania"))
1155
+ wait_for_stack_ready(get_stack_name("bburago")) unless stack_ready?(get_stack_name("bburago"))
1156
+ wait_for_stack_ready(get_stack_name("hal9000")) unless stack_ready?(get_stack_name("hal9000"))
1157
+ wait_for_stack_ready(get_stack_name("assange")) unless stack_ready?(get_stack_name("assange"))
1158
+ wait_for_stack_ready(get_stack_name("fidaty")) unless stack_ready?(get_stack_name("fidaty"))
1159
+ wait_for_stack_ready(get_stack_name("leftorium")) unless stack_ready?(get_stack_name("leftorium"))
1160
+ wait_for_stack_ready(get_stack_name("rachele")) unless stack_ready?(get_stack_name("rachele"))
1161
+ stack_name_web = get_stack_name("web")
1162
+ git_checkout_version('prima', @projects["prima"]['revision'])
1163
+ stack_body = IO.read('projects/prima/app/cloudformation/tasks/web.yml')
1164
+ parameters = [
1165
+ {
1166
+ parameter_key: "Environment",
1167
+ parameter_value: "qa"
1168
+ },
1169
+ {
1170
+ parameter_key: "ReleaseVersion",
1171
+ parameter_value: "#{@projects["prima"]['revision']}"
1172
+ },
1173
+ {
1174
+ parameter_key: "TaskDesiredCount",
1175
+ parameter_value: "1"
1176
+ },
1177
+ {
1178
+ parameter_key: "ECSClusterName",
1179
+ parameter_value: get_ecs_cluster_name
1180
+ },
1181
+ {
1182
+ parameter_key: "ALBShortName",
1183
+ parameter_value: "web-qa-#{get_deploy_id}"[0..27]
1184
+ },
1185
+ {
1186
+ parameter_key: "WebQaBaseHostname",
1187
+ parameter_value: "#{get_deploy_id}.qa.colaster.com"
1188
+ },
1189
+ {
1190
+ parameter_key: "HostnamePatternPriority",
1191
+ parameter_value: hostname_pattern_priority
1192
+ },
1193
+ {
1194
+ parameter_key: "HostnamePatternAggregatorPriority",
1195
+ parameter_value: (hostname_pattern_priority.to_i + 1).to_s
1196
+ },
1197
+ {
1198
+ parameter_key: "EnvHash",
1199
+ parameter_value: get_deploy_id
1200
+ },
1201
+ {
1202
+ parameter_key: "AssangeHostname",
1203
+ parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
1204
+ },
1205
+ {
1206
+ parameter_key: "BackofficeHostname",
1207
+ parameter_value: "backoffice-#{get_deploy_id}.qa.colaster.com"
1208
+ },
1209
+ {
1210
+ parameter_key: "WebHostname",
1211
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1212
+ },
1213
+ {
1214
+ parameter_key: "FePrimaDomain",
1215
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1216
+ },
1217
+ {
1218
+ parameter_key: "HostnamePattern",
1219
+ parameter_value: "www-#{get_deploy_id}.*"
1220
+ }
1221
+ ]
1222
+ if stack_exists?(stack_name_web)
1223
+ cur_version = get_currently_deployed_version(stack_name_web)
1224
+ update_stack(stack_name_web, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["prima"]['revision'])
1225
+ else
1226
+ create_stack(stack_name_web, stack_body, parameters, @tags, @cf_role)
1227
+ end
1228
+ end
1229
+
1230
+ def create_consumer_stack()
1231
+ wait_for_artifact('prima-artifacts-encrypted', "prima/#{@projects["prima"]['revision']}.tar.gz")
1232
+ # Waiting for prima healtcheck dependencies
1233
+ wait_for_stack_ready(get_stack_name("skynet")) unless stack_ready?(get_stack_name("skynet"))
1234
+ wait_for_stack_ready(get_stack_name("urania")) unless stack_ready?(get_stack_name("urania"))
1235
+ wait_for_stack_ready(get_stack_name("bburago")) unless stack_ready?(get_stack_name("bburago"))
1236
+ wait_for_stack_ready(get_stack_name("hal9000")) unless stack_ready?(get_stack_name("hal9000"))
1237
+ wait_for_stack_ready(get_stack_name("assange")) unless stack_ready?(get_stack_name("assange"))
1238
+ wait_for_stack_ready(get_stack_name("fidaty")) unless stack_ready?(get_stack_name("fidaty"))
1239
+ wait_for_stack_ready(get_stack_name("leftorium")) unless stack_ready?(get_stack_name("leftorium"))
1240
+ wait_for_stack_ready(get_stack_name("rachele")) unless stack_ready?(get_stack_name("rachele"))
1241
+ stack_name_consumer = get_stack_name("consumer")
1242
+ git_checkout_version('prima', @projects["prima"]['revision'])
1243
+ stack_body = IO.read('projects/prima/app/cloudformation/tasks/consumer.yml')
1244
+ parameters = [
1245
+ {
1246
+ parameter_key: "Environment",
1247
+ parameter_value: "qa"
1248
+ },
1249
+ {
1250
+ parameter_key: "ReleaseVersion",
1251
+ parameter_value: "#{@projects["prima"]['revision']}"
1252
+ },
1253
+ {
1254
+ parameter_key: "ECSClusterName",
1255
+ parameter_value: get_ecs_cluster_name
1256
+ },
1257
+ {
1258
+ parameter_key: "AssangeHostname",
1259
+ parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
1260
+ },
1261
+ {
1262
+ parameter_key: "BackofficeHostname",
1263
+ parameter_value: "backoffice-#{get_deploy_id}.qa.colaster.com"
1264
+ },
1265
+ {
1266
+ parameter_key: "WebHostname",
1267
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1268
+ }
1269
+ ]
1270
+ if stack_exists?(stack_name_consumer)
1271
+ cur_version = get_currently_deployed_version(stack_name_consumer)
1272
+ update_stack(stack_name_consumer, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["prima"]['revision'])
1273
+ else
1274
+ create_stack(stack_name_consumer, stack_body, parameters, @tags, @cf_role)
1275
+ end
1276
+
1277
+ stack_name_consumer_api = get_stack_name("consumer-api")
1278
+ stack_body = IO.read('projects/prima/app/cloudformation/tasks/consumer-api.yml')
1279
+ parameters = [
1280
+ {
1281
+ parameter_key: "Environment",
1282
+ parameter_value: "qa"
1283
+ },
1284
+ {
1285
+ parameter_key: "ReleaseVersion",
1286
+ parameter_value: "#{@projects["prima"]['revision']}"
1287
+ },
1288
+ {
1289
+ parameter_key: "ECSClusterName",
1290
+ parameter_value: get_ecs_cluster_name
1291
+ },
1292
+ {
1293
+ parameter_key: "AssangeHostname",
1294
+ parameter_value: "assange-#{get_deploy_id}.qa.colaster.com"
1295
+ },
1296
+ {
1297
+ parameter_key: "BackofficeHostname",
1298
+ parameter_value: "backoffice-#{get_deploy_id}.qa.colaster.com"
1299
+ },
1300
+ {
1301
+ parameter_key: "WebHostname",
1302
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1303
+ },
1304
+ {
1305
+ parameter_key: "FePrimaDomain",
1306
+ parameter_value: "www-#{get_deploy_id}.qa.colaster.com"
1307
+ },
1308
+ {
1309
+ parameter_key: "HostnamePattern",
1310
+ parameter_value: "consumer-#{get_deploy_id}.qa.colaster.com"
1311
+ },
1312
+ {
1313
+ parameter_key: "WebQaBaseHostname",
1314
+ parameter_value: "#{get_deploy_id}.qa.colaster.com"
1315
+ }
1316
+ ]
1317
+ if stack_exists?(stack_name_consumer_api)
1318
+ cur_version = get_currently_deployed_version(stack_name_consumer_api)
1319
+ update_stack(stack_name_consumer_api, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["prima"]['revision'])
1320
+ else
1321
+ create_stack(stack_name_consumer_api, stack_body, parameters, @tags, @cf_role)
1322
+ end
1323
+ end
1324
+
1325
+ def create_roger_stack()
1326
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/roger/#{@projects["roger"]['revision']}-qa.tar.gz")
1327
+ wait_for_stack_ready(get_stack_name("consumer")) unless stack_ready?(get_stack_name("consumer"))
1328
+ stack_name_roger = "ecs-task-roger-qa-#{get_deploy_id}"
1329
+ git_checkout_version('roger', @projects["roger"]['revision'])
1330
+ stack_body = File.read('projects/roger/deploy/task.yml')
1331
+ parameters = [
1332
+ {
1333
+ parameter_key: "Environment",
1334
+ parameter_value: "qa"
1335
+ },
1336
+ {
1337
+ parameter_key: "ReleaseVersion",
1338
+ parameter_value: @projects["roger"]['revision']
1339
+ },
1340
+ {
1341
+ parameter_key: "ECSClusterName",
1342
+ parameter_value: get_ecs_cluster_name
1343
+ },
1344
+ {
1345
+ parameter_key: "TaskDesiredCount",
1346
+ parameter_value: '1'
1347
+ }
1348
+ ]
1349
+ if stack_exists?(stack_name_roger)
1350
+ cur_version = get_currently_deployed_version(stack_name_roger)
1351
+ update_stack(stack_name_roger, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["roger"]['revision'])
1352
+ else
1353
+ create_stack(stack_name_roger, stack_body, parameters, @tags, @cf_role)
1354
+ end
1355
+ end
1356
+
1357
+ def create_hutch_stack()
1358
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/hutch/#{@projects["hutch"]['revision']}-#{get_deploy_id[0..7]}-qa.tar.gz")
1359
+ wait_for_stack_ready(get_stack_name("starsky")) unless stack_ready?(get_stack_name("starsky"))
1360
+
1361
+ stack_name_hutch = get_stack_name("hutch")
1362
+ git_checkout_version('hutch', @projects["hutch"]['revision'])
1363
+ stack_body = File.read('projects/hutch/deploy/task.yml')
1364
+ parameters = [
1365
+ {
1366
+ parameter_key: "Environment",
1367
+ parameter_value: "qa"
1368
+ },
1369
+ {
1370
+ parameter_key: "ReleaseVersion",
1371
+ parameter_value: "#{@projects["hutch"]['revision']}-#{get_deploy_id[0..7]}"
1372
+ },
1373
+ {
1374
+ parameter_key: "ALBShortName",
1375
+ parameter_value: "hutch-qa-#{get_deploy_id}"[0..27]
1376
+ },
1377
+ {
1378
+ parameter_key: "ECSClusterName",
1379
+ parameter_value: get_ecs_cluster_name
1380
+ },
1381
+ {
1382
+ parameter_key: "EnvHash",
1383
+ parameter_value: get_deploy_id
1384
+ },
1385
+ {
1386
+ parameter_key: "HostnamePattern",
1387
+ parameter_value: "hutch-#{get_deploy_id}.qa.colaster.com"
1388
+ },
1389
+ {
1390
+ parameter_key: "HostnamePatternPriority",
1391
+ parameter_value: (hostname_pattern_priority.to_i + 254).to_s
1392
+ },
1393
+ {
1394
+ parameter_key: "ApiUrl",
1395
+ parameter_value: "https://#{get_route53_hostname('maia-intermediari')}"
1396
+ }
1397
+ ]
1398
+ if stack_exists?(stack_name_hutch)
1399
+ cur_version = get_currently_deployed_version(stack_name_hutch)
1400
+ update_stack(stack_name_hutch, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["hutch"]['revision'])
1401
+ else
1402
+ create_stack(stack_name_hutch, stack_body, parameters, @tags, @cf_role)
1403
+ end
1404
+ end
1405
+
1406
+ def create_maia_stack()
1407
+ wait_for_artifact('prima-artifacts-encrypted', "microservices/maia/#{@projects["maia"]['revision']}-qa.tar.gz")
1408
+ stack_name_maia = get_stack_name("maia")
1409
+ git_checkout_version('maia', @projects["maia"]['revision'])
1410
+ stack_body = File.read('projects/maia/deploy/task.yml')
1411
+ parameters = [
1412
+ {
1413
+ parameter_key: "Environment",
1414
+ parameter_value: "qa"
1415
+ },
1416
+ {
1417
+ parameter_key: "ReleaseVersion",
1418
+ parameter_value: "#{@projects["maia"]['revision']}"
1419
+ },
1420
+ {
1421
+ parameter_key: "ALBShortName",
1422
+ parameter_value: "maia-qa-#{get_deploy_id}"[0..15]
1423
+ },
1424
+ {
1425
+ parameter_key: "ECSClusterName",
1426
+ parameter_value: get_ecs_cluster_name
1427
+ },
1428
+ {
1429
+ parameter_key: "EnvHash",
1430
+ parameter_value: get_deploy_id
1431
+ },
1432
+ {
1433
+ parameter_key: "HostnamePatternPublic",
1434
+ parameter_value: "api*-#{get_deploy_id}.qa.colaster.com"
1435
+ },
1436
+ {
1437
+ parameter_key: "HostnamePatternPriority",
1438
+ parameter_value: (hostname_pattern_priority.to_i + 128).to_s
1439
+ },
1440
+ {
1441
+ parameter_key: "ProxyHostnameIntermediari",
1442
+ parameter_value: "api-intermediari-#{get_deploy_id}.qa.colaster.com"
1443
+ },
1444
+ {
1445
+ parameter_key: "ProxyHostnameApp",
1446
+ parameter_value: "api-#{get_deploy_id}.qa.colaster.com"
1447
+ }
1448
+ ]
1449
+ if stack_exists?(stack_name_maia)
1450
+ cur_version = get_currently_deployed_version(stack_name_maia)
1451
+ update_stack(stack_name_maia, stack_body, parameters, @tags, @cf_role) unless cur_version.include?(@projects["maia"]['revision'])
1452
+ else
1453
+ create_stack(stack_name_maia, stack_body, parameters, @tags, @cf_role)
1454
+ end
1455
+ end
1456
+
1457
+ def create_rogoreport_stack()
1458
+ true
1459
+ end
1460
+
1461
+ def complete_qa_setup!()
1462
+ wait_for_stack_ready(get_stack_name("web")) unless stack_ready?(get_stack_name("web"))
1463
+ wait_for_stack_ready(get_stack_name("consumer")) unless stack_ready?(get_stack_name("consumer"))
1464
+ wait_for_stack_ready(get_stack_name("worker-ermes")) unless stack_ready?(get_stack_name("worker-ermes"))
1465
+ wait_for_stack_ready(get_stack_name("ermes")) unless stack_ready?(get_stack_name("ermes"))
1466
+ wait_for_stack_ready(get_stack_name("peano")) unless stack_ready?(get_stack_name("peano"))
1467
+ # wait_for_stack_ready(get_stack_name("rogoreport")) unless stack_ready?(get_stack_name("rogoreport"))
1468
+ wait_for_stack_ready(get_stack_name("borat")) unless stack_ready?(get_stack_name("borat"))
1469
+ wait_for_stack_ready(get_stack_name("activia")) unless stack_ready?(get_stack_name("activia"))
1470
+ wait_for_stack_ready(get_stack_name("maia")) unless stack_ready?(get_stack_name("maia"))
1471
+ wait_for_stack_ready(get_stack_name("crash")) unless stack_ready?(get_stack_name("crash"))
1472
+ wait_for_stack_ready(get_stack_name("hutch")) unless stack_ready?(get_stack_name("hutch"))
1473
+
1474
+ update_service_defaults(get_stack_name("web"))
1475
+ update_service_defaults(get_stack_name("consumer-api"))
1476
+ update_service_defaults(get_stack_name("urania"))
1477
+ update_service_defaults(get_stack_name("worker-ermes"))
1478
+ update_service_defaults(get_stack_name("ermes"))
1479
+ update_service_defaults(get_stack_name("bburago"))
1480
+ update_service_defaults(get_stack_name("hal9000"))
1481
+ update_service_defaults(get_stack_name("fidaty"))
1482
+ update_service_defaults(get_stack_name("peano"))
1483
+ # update_service_defaults(get_stack_name("rogoreport"))
1484
+ update_service_defaults(get_stack_name("assange"))
1485
+ update_service_defaults(get_stack_name("borat"))
1486
+ update_service_defaults(get_stack_name("activia"))
1487
+ update_service_defaults(get_stack_name("skynet"))
1488
+ update_service_defaults(get_stack_name("leftorium"))
1489
+ update_service_defaults(get_stack_name("rachele"))
1490
+ update_service_defaults(get_stack_name("maia"))
1491
+ update_service_defaults(get_stack_name("starsky"))
1492
+ update_service_defaults(get_stack_name("hutch"))
1493
+ update_service_defaults(get_stack_name("crash"))
1494
+
1495
+ activia_hostname = get_route53_hostname("activia")
1496
+ assange_hostname = get_route53_hostname("assange")
1497
+ bburago_hostname = get_route53_hostname("bburago")
1498
+ borat_hostname = get_route53_hostname("borat")
1499
+ ermes_hostname = get_route53_hostname("ermes")
1500
+ fidaty_hostname = get_route53_hostname("fidaty")
1501
+ hal9000_hostname = get_route53_hostname("hal9000")
1502
+ prima_hostname = get_route53_hostname("web")
1503
+ peano_hostname = get_route53_hostname("peano")
1504
+ skynet_hostname = get_route53_hostname("skynet")
1505
+ urania_hostname = get_route53_hostname("urania")
1506
+ roger_hostname = get_route53_hostname("roger")
1507
+ leftorium_hostname = get_route53_hostname("leftorium")
1508
+ rachele_hostname = get_route53_hostname("rachele")
1509
+ maia_app_hostname = get_route53_hostname("maia-app")
1510
+ maia_intermediari_hostname = get_route53_hostname("maia-intermediari")
1511
+ crash_hostname = get_route53_hostname("crash")
1512
+ starsky_hostname = get_route53_hostname("starsky")
1513
+ hutch_hostname = get_route53_hostname("hutch")
1514
+
1515
+ launch_mimo(get_deploy_id)
1516
+
1517
+ projects_text = "
1518
+ > Prima url: https://#{prima_hostname}
1519
+ > Backoffice (Borat) url: https://#{borat_hostname}
1520
+ > Urania url: http://#{urania_hostname}:81
1521
+ > Bburago url: http://#{bburago_hostname}:83
1522
+ > Ermes url: http://#{ermes_hostname}:10002
1523
+ > Hal9000 url: http://#{hal9000_hostname}:10031
1524
+ > Fidaty url: http://#{fidaty_hostname}:10021
1525
+ > Peano url: http://#{peano_hostname}:10039
1526
+ > Assange url: https://#{assange_hostname}
1527
+ > Activia url: http://#{activia_hostname}:10041
1528
+ > Skynet url: http://#{skynet_hostname}:8050
1529
+ > Roger url: http://#{roger_hostname}:10051
1530
+ > Leftorium url: http://#{leftorium_hostname}:10061
1531
+ > Rachele url: http://#{rachele_hostname}:10040
1532
+ > Maia App url: https://#{maia_app_hostname}
1533
+ > Maia Intermediari url: https://#{maia_intermediari_hostname}
1534
+ > Crash url: https://#{crash_hostname}
1535
+ > Starsky url: https://#{starsky_hostname}
1536
+ > Hutch url: https://#{hutch_hostname}
1537
+ > RabbitMQ url: http://#{get_ec2_ip_address}:15672
1538
+ > Elasticsearch url: http://#{get_ec2_ip_address}:9200
1539
+ > Git branch: #{@git_branch}
1540
+ > SSH connection: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no githubUsername@#{get_ec2_ip_address}\n"
1541
+ output projects_text.cyan
1542
+ output "Deploy effettuato, everything is awesome!\n".green
1543
+
1544
+ if @projects['prima']['name'] != 'master' then
1545
+ output "Lancio il batch job per la visual regression..."
1546
+ launch_bocelli_test(prima_hostname)
1547
+ output "Visual regression lanciata con successo!"
1548
+
1549
+ output "Lancio i test con Lighthouse..."
1550
+ launch_lighthouse_test(prima_hostname, "mobile")
1551
+ launch_lighthouse_test(prima_hostname, "desktop")
1552
+ output "Test con Lighthouse lanciati con successo..."
1553
+ end
1554
+
1555
+ qainit_write_output(projects_text, 'Indirizzi scritti su ')
1556
+ end
1557
+
1558
+ def get_route53_hostname(project)
1559
+ case
1560
+ when project.include?('web')
1561
+ host = "www-#{get_deploy_id}.qa.colaster.com"
1562
+ when project.include?('urania')
1563
+ host = "urania-#{get_deploy_id}.qa.colaster.com"
1564
+ when project.include?('bburago')
1565
+ host = "bburago-#{get_deploy_id}.qa.colaster.com"
1566
+ when project.include?('hal9000')
1567
+ host = "hal9000-#{get_deploy_id}.qa.colaster.com"
1568
+ when project.include?('fidaty')
1569
+ host = "fidaty-#{get_deploy_id}.qa.colaster.com"
1570
+ when project.include?('peano')
1571
+ host = "peano-#{get_deploy_id}.qa.colaster.com"
1572
+ when project.include?('assange')
1573
+ host = "assange-#{get_deploy_id}.qa.colaster.com"
1574
+ when project.include?('borat')
1575
+ host = "backoffice-#{get_deploy_id}.qa.colaster.com"
1576
+ when project.include?('crash')
1577
+ host = "crash-#{get_deploy_id}.qa.colaster.com"
1578
+ when project.include?('ermes')
1579
+ host = "ermes-#{get_deploy_id}.qa.colaster.com"
1580
+ when project.include?('activia')
1581
+ host = "activia-#{get_deploy_id}.qa.colaster.com"
1582
+ when project.include?('skynet')
1583
+ host = "skynet-#{get_deploy_id}.qa.colaster.com"
1584
+ when project.include?('roger')
1585
+ host = "roger-#{get_deploy_id}.qa.colaster.com"
1586
+ when project.include?('leftorium')
1587
+ host = "leftorium-#{get_deploy_id}.qa.colaster.com"
1588
+ when project.include?('rachele')
1589
+ host = "rachele-#{get_deploy_id}.qa.colaster.com"
1590
+ when project.include?('starsky')
1591
+ host = "starsky-#{get_deploy_id}.qa.colaster.com"
1592
+ when project.include?('hutch')
1593
+ host = "hutch-#{get_deploy_id}.qa.colaster.com"
1594
+ when project.include?('maia-app')
1595
+ host = "api-#{get_deploy_id}.qa.colaster.com"
1596
+ when project.include?('maia-intermediari')
1597
+ host = "api-intermediari-#{get_deploy_id}.qa.colaster.com"
1598
+ end
1599
+ host
1600
+ end
1601
+
1602
+ def get_ec2_ip_address()
1603
+ if @ec2_ip_address
1604
+ @ec2_ip_address
1605
+ else
1606
+ resp = describe_stack_resource(get_asg_stack_name, 'ECSAutoScalingGroup')
1607
+ resp = describe_auto_scaling_groups([resp.stack_resource_detail.physical_resource_id], 1)
1608
+ instance_id = resp.auto_scaling_groups[0].instances[0].instance_id
1609
+ resp = describe_instances([instance_id])
1610
+ @ec2_ip_address = resp.reservations[0].instances[0].private_ip_address
1611
+ @ec2_ip_address
1612
+ end
1613
+ end
1614
+
1615
+ def get_alb_host(stack_name)
1616
+ case
1617
+ when stack_name.include?('web')
1618
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1619
+ when stack_name.include?('urania')
1620
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1621
+ when stack_name.include?('backoffice')
1622
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1623
+ when stack_name.include?('bburago')
1624
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1625
+ when stack_name.include?('hal9000')
1626
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1627
+ when stack_name.include?('fidaty')
1628
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1629
+ when stack_name.include?('activia')
1630
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1631
+ when stack_name.include?('skynet')
1632
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1633
+ when stack_name.include?('roger')
1634
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1635
+ when stack_name.include?('alb-http-public')
1636
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1637
+ when stack_name.include?('alb-ws-public')
1638
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1639
+ when stack_name.include?('peano')
1640
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1641
+ when stack_name.include?('leftorium')
1642
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1643
+ when stack_name.include?('assange')
1644
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1645
+ when stack_name.include?('borat')
1646
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1647
+ when stack_name.include?('crash')
1648
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1649
+ when stack_name.include?('rachele')
1650
+ logical_resource_id = 'EcsApplicationLoadBalancerInternal'
1651
+ when stack_name.include?('starsky')
1652
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1653
+ when stack_name.include?('hutch')
1654
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1655
+ when stack_name.include?('maia')
1656
+ logical_resource_id = 'EcsApplicationLoadBalancerPublic'
1657
+ end
1658
+ resp = describe_stack_resource(stack_name, logical_resource_id)
1659
+ resp = describe_load_balancers([resp.stack_resource_detail.physical_resource_id])
1660
+ resp.load_balancers[0].dns_name
1661
+ end
1662
+
1663
+ def update_service_defaults(stack_name)
1664
+ case
1665
+ when stack_name.include?('web')
1666
+ logical_resource_id = 'ECSServiceWebQA'
1667
+ when stack_name.include?('consumer')
1668
+ logical_resource_id = 'ECSServiceConsumerApiQa'
1669
+ when stack_name.include?('urania')
1670
+ logical_resource_id = 'ECSServiceUraniaQA'
1671
+ when stack_name.include?('backoffice')
1672
+ logical_resource_id = 'ECSServiceBackoffice'
1673
+ when stack_name.include?('worker-ermes')
1674
+ logical_resource_id = 'ECSServiceErmesWorker'
1675
+ when stack_name.include?('ermes')
1676
+ logical_resource_id = 'ECSServiceErmesQA'
1677
+ when stack_name.include?('bburago')
1678
+ logical_resource_id = 'ECSServiceBburagoQA'
1679
+ when stack_name.include?('hal9000')
1680
+ logical_resource_id = 'ECSServiceHal9000QA'
1681
+ when stack_name.include?('fidaty')
1682
+ logical_resource_id = 'ECSServiceFidatyQA'
1683
+ when stack_name.include?('skynet')
1684
+ logical_resource_id = 'ECSServiceSkynetQA'
1685
+ when stack_name.include?('roger')
1686
+ logical_resource_id = 'ECSServiceRogerQA'
1687
+ when stack_name.include?('activia')
1688
+ logical_resource_id = 'ECSServiceActiviaQA'
1689
+ when stack_name.include?('peano')
1690
+ logical_resource_id = 'ECSServicePeanoQA'
1691
+ # when stack_name.include?('rogoreport')
1692
+ # logical_resource_id = 'ECSServiceRogoreport'
1693
+ when stack_name.include?('assange')
1694
+ logical_resource_id = 'ECSServiceAssangeQA'
1695
+ when stack_name.include?('borat')
1696
+ logical_resource_id = 'ECSServiceBorat'
1697
+ when stack_name.include?('leftorium')
1698
+ logical_resource_id = 'ECSServiceLeftoriumQA'
1699
+ when stack_name.include?('rachele')
1700
+ logical_resource_id = 'ECSServiceRacheleQA'
1701
+ when stack_name.include?('crash')
1702
+ logical_resource_id = 'ECSServiceCrashQA'
1703
+ when stack_name.include?('starsky')
1704
+ logical_resource_id = 'ECSServiceStarskyQA'
1705
+ when stack_name.include?('hutch')
1706
+ logical_resource_id = 'ECSServiceHutch'
1707
+ when stack_name.include?('maia')
1708
+ logical_resource_id = 'ECSServiceMaia'
1709
+ else
1710
+ raise "Service name non gestito per lo stack #{stack_name}"
1711
+ end
1712
+ resp = describe_stack_resource(stack_name, logical_resource_id)
1713
+ update_ecs_service(get_ecs_cluster_name, resp.stack_resource_detail.physical_resource_id, {minimum_healthy_percent: 0, maximum_percent: 100})
1714
+ end
1715
+
1716
+ def launch_lighthouse_test(url, device)
1717
+ @cloudflare.post("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {type: 'CNAME', name: "www-#{get_deploy_id}", content: url, proxied: true, ttl: 1}) unless get_lighthouse_dns()
1718
+
1719
+ @batch.submit_job({
1720
+ job_name: "lighthouse-#{device}-#{get_deploy_id}",
1721
+ job_queue: "tools-production",
1722
+ job_definition: describe_stack_resource('batch-job-lighthouse-production', 'JobDefinition').stack_resource_detail.physical_resource_id,
1723
+ container_overrides: {
1724
+ environment: [
1725
+ {
1726
+ name: "URL_TO_TEST",
1727
+ value: "https://www-#{get_deploy_id}.prima.it/?superprima"
1728
+ },
1729
+ {
1730
+ name: "DEVICE",
1731
+ value: device
1732
+ },
1733
+ {
1734
+ name: "BRANCH_NAME",
1735
+ value: @projects['prima']['name']
1736
+ },
1737
+ {
1738
+ name: "COMMITTER_EMAIL",
1739
+ value: @projects['prima']['committer']
1740
+ }
1741
+ ]
1742
+ }
1743
+ })
1744
+ end
1745
+
1746
+ def get_lighthouse_dns()
1747
+ dns_records = @cloudflare.get("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {per_page: 100, type: 'CNAME', name: "www-#{get_deploy_id}.prima.it"})
1748
+ if dns_records.body[:result_info][:count] > 0
1749
+ return dns_records.body[:result][0][:id]
1750
+ end
1751
+ false
1752
+ end
1753
+
1754
+ def delete_lighthouse_dns()
1755
+ dns_id = get_lighthouse_dns()
1756
+ @cloudflare.delete("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records/#{dns_id}") if dns_id
1757
+ end
1758
+
1759
+ def launch_bocelli_test(url)
1760
+ @batch.submit_job({
1761
+ job_name: "bocelli-test-#{get_deploy_id}",
1762
+ job_queue: "tools-production",
1763
+ job_definition: describe_stack_resource('batch-job-bocelli-production', 'JobDefinition').stack_resource_detail.physical_resource_id,
1764
+ container_overrides: {
1765
+ environment: [
1766
+ {
1767
+ name: "BATCH_COMMAND",
1768
+ value: "test"
1769
+ },
1770
+ {
1771
+ name: "QA_HOSTNAME",
1772
+ value: url
1773
+ },
1774
+ {
1775
+ name: "BRANCH_NAME",
1776
+ value: @projects['prima']['name']
1777
+ },
1778
+ {
1779
+ name: "COMMITTER_EMAIL",
1780
+ value: @projects['prima']['committer']
1781
+ }
1782
+ ]
1783
+ }
1784
+ })
1785
+ end
1786
+
1787
+ def git_checkout_version(project, revision)
1788
+ Dir.chdir "projects/#{project}"
1789
+ exec_step "git checkout -- . && git checkout #{revision}"
1790
+ Dir.chdir "../../"
1791
+ end
1792
+
1793
+ def create_asg_stack(stack_name, tags = [])
1794
+ stack_body = IO.read('cloudformation/stacks/asg/ecs-asg-allinone.yml')
1795
+ parameters = [
1796
+ {
1797
+ parameter_key: "Environment",
1798
+ parameter_value: "qa"
1799
+ },
1800
+ {
1801
+ parameter_key: "InstanceType",
1802
+ parameter_value: "t3a.xlarge"
1803
+ },
1804
+ {
1805
+ parameter_key: "ECSClusterName",
1806
+ parameter_value: get_ecs_cluster_name
1807
+ },
1808
+ {
1809
+ parameter_key: "AMIID",
1810
+ parameter_value: @ami_id
1811
+ }
1812
+ ]
1813
+ create_stack(stack_name, stack_body, parameters, tags, @cf_role)
1814
+ end
1815
+
1816
+ def create_cluster_stack(stack_name, tags = [])
1817
+ stack_body = IO.read('cloudformation/stacks/ecs-cluster.yml')
1818
+ create_stack(stack_name, stack_body, [], tags)
1819
+ end
1820
+
1821
+ def update_cluster_stack(stack_name, tags = [])
1822
+ stack_body = IO.read('cloudformation/stacks/ecs-cluster.yml')
1823
+ update_stack(stack_name, stack_body, [], tags)
1824
+ end
1825
+
1826
+ def create_alb_stack(stack_name, role, hash, environment = 'qa')
1827
+ stack_body = IO.read('cloudformation/stacks/elb/alb-public-qa.yml')
1828
+ parameters = [
1829
+ {
1830
+ parameter_key: "Environment",
1831
+ parameter_value: environment
1832
+ },
1833
+ {
1834
+ parameter_key: "Role",
1835
+ parameter_value: role
1836
+ },
1837
+ {
1838
+ parameter_key: "EnvHash",
1839
+ parameter_value: hash
1840
+ }
1841
+ ]
1842
+ create_stack(stack_name, stack_body, parameters, [], @cf_role)
1843
+ end
1844
+
1845
+ def import_redis_crash(qa_ip_address)
1846
+ output "Importo chiavi di Redis da staging\n".yellow
1847
+
1848
+ prefixes = ['CODICI', 'fun_with_flags']
1849
+ redis_qa = Redis.new(:url => "redis://#{qa_ip_address}:6379/10")
1850
+ redis_staging = Redis.new(:url => 'redis://staging.cache-1.prima.it:6379/10')
1851
+
1852
+ prefixes.each do |prefix|
1853
+ redis_staging.keys("#{prefix}*").each do |key|
1854
+ next unless redis_qa.keys(key).empty?
1855
+ output "Importo #{key} dal Redis di staging\n".yellow
1856
+ dump_staging = redis_staging.dump key
1857
+ redis_qa.restore key, 0, dump_staging
1858
+ end
1859
+ end
1860
+ end
1861
+
1862
+ def import_dbs(ip_address)
1863
+ overrides = {
1864
+ container_overrides: [
1865
+ {
1866
+ name: 'dbrestore',
1867
+ environment: [
1868
+ {
1869
+ name: 'EC2_IP_ADDRESS',
1870
+ value: ip_address
1871
+ }
1872
+ ]
1873
+ }
1874
+ ]
1875
+ }
1876
+ resp = run_ecs_task(get_ecs_cluster_name, @import_db_task, overrides, 1)
1877
+ return resp
1878
+ end
1879
+
1880
+ def wait_for_db_import(task)
1881
+ output "Attendo che i DB vengano importati...\n".yellow
1882
+ stopped_at = nil
1883
+ sleep 15 # altrimenti non trova il task appena avviato...
1884
+ while stopped_at.nil?
1885
+ if task.tasks[0].nil?
1886
+ pp get_ecs_cluster_name
1887
+ pp task
1888
+ stop_if true, "Task di import DB lanciato, ma risposta vuota!".red
1889
+ end
1890
+ task = describe_ecs_tasks(task.tasks[0].cluster_arn, [task.tasks[0].task_arn])
1891
+ stopped_at = task.tasks[0].stopped_at unless task.tasks[0].nil?
1892
+ sleep_seconds = 10
1893
+ seconds_elapsed = 0
1894
+ while true && stopped_at.nil?
1895
+ break if seconds_elapsed >= sleep_seconds
1896
+ print '.'.yellow; STDOUT.flush
1897
+ sleep 1
1898
+ seconds_elapsed += 1
1899
+ end
1900
+ end
1901
+ print "\n"
1902
+ end
1903
+
1904
+ def get_stacks()
1905
+ envs = {}
1906
+ stack_list = stack_list()
1907
+ stack_list.each do |stack|
1908
+ unless stack.stack_name.match(/spotfleet-allinone-qa-(\w+)$/)
1909
+ env_hash = stack.stack_name.match(/qa-(\w+)$/)[0]
1910
+ envs[env_hash] = stack.tags unless envs.has_key?(env_hash) || stack.tags.empty?
1911
+ end
1912
+ end
1913
+ return stack_list, envs
1914
+ end
1915
+
1916
+ def get_clusters()
1917
+ envs = {}
1918
+ cluster_list = cluster_list()
1919
+ cluster_list.each do |stack|
1920
+ unless stack.stack_name.match(/spotfleet-allinone-qa-(\w+)$/)
1921
+ env_hash = stack.stack_name.match(/qa-(\w+)$/)[0]
1922
+ envs[env_hash] = stack.tags unless envs.has_key?(env_hash) || stack.tags.empty?
1923
+ end
1924
+ end
1925
+ return cluster_list, envs
1926
+ end
1927
+
1928
+ def hostname_pattern_priority()
1929
+ (Time.now.to_i.to_s[-4..-1].to_i + Random.rand(40000)).to_s
1930
+ end
1931
+
1932
+ def launch_mimo(env_hash)
1933
+ resp = describe_stack_resource('batch-job-mimo', 'JobDefinition')
1934
+
1935
+ @batch.submit_job({
1936
+ job_name: "mimo-#{get_deploy_id}", # required
1937
+ job_queue: "tools-production", # required
1938
+ job_definition: resp.stack_resource_detail.physical_resource_id, # required
1939
+ container_overrides: {
1940
+ environment: [
1941
+ {
1942
+ name: 'ENV_HASH',
1943
+ value: env_hash
1944
+ },
1945
+ {
1946
+ name: 'APP_ENV',
1947
+ value: 'qa'
1948
+ },
1949
+ {
1950
+ name: 'CYPRESS_BASE_URL',
1951
+ value: "https://hutch-#{env_hash}.qa.colaster.com"
1952
+ },
1953
+ {
1954
+ name: 'CYPRESS_PEANO_BASE_URL',
1955
+ value: "http://peano-#{env_hash}.qa.colaster.com:10039/quotation"
1956
+ },
1957
+ {
1958
+ name: 'CYPRESS_API_BASE_URL',
1959
+ value: "https://#{get_route53_hostname("starsky")}/graphql"
1960
+ },
1961
+ {
1962
+ name: 'QA_NAME',
1963
+ value: @git_branch
1964
+ }
1965
+ ]
1966
+ }
1967
+ })
1968
+
1969
+ output "Mimo lanciato con successo!\n".green
1970
+ end
1971
+
1972
+ def get_currently_deployed_version(stack_name)
1973
+ parameters = get_stack_parameters(stack_name)
1974
+ currently_deployed_version = nil
1975
+ parameters.each do |parameter|
1976
+ if parameter.parameter_key == "ReleaseVersion"
1977
+ currently_deployed_version = parameter.parameter_value
1978
+ end
1979
+ end
1980
+ currently_deployed_version
1981
+ end
1982
+
1983
+ def get_ami_id(stack_name)
1984
+ get_stack_parameters(stack_name).each do |param|
1985
+ if param.parameter_key == "AMIID"
1986
+ return param.parameter_value
1987
+ end
1988
+ end
1989
+ end
1990
+ end
1991
+
1992
+ def help_content
1993
+ <<-HELP
1994
+
1995
+ twig-buils
1996
+ ===========
1997
+
1998
+ Manage qa cloudformation stack creation
1999
+
2000
+ Synopsis
2001
+ --------
2002
+
2003
+ twig build #command
2004
+
2005
+ Description
2006
+ -----------
2007
+
2008
+ #command #command description
2009
+
2010
+ HELP
2011
+ end
2012
+
2013
+ args = ARGV.dup
2014
+
2015
+ if args.include?('--help')
2016
+ puts help_content
2017
+ exit
2018
+ end
2019
+
2020
+ args.delete('no-gem-update')
2021
+
2022
+ Build.new().execute!(args)