prima-twig 0.5.0 → 0.5.26

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