prima-twig 0.59.7 → 0.59.123

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,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)