prima-twig 0.62.17 → 0.62.100

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