engineyard 1.2.1 → 1.2.2

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.
@@ -1,10 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- begin
3
- require File.expand_path('../../../.bundle/environment', __FILE__)
4
- rescue LoadError
5
- ENV['BUNDLE_GEMFILE'] = File.expand_path('../../../Gemfile', __FILE__)
6
- require "rubygems"; require "bundler"; Bundler.setup
7
- end
2
+
3
+ require 'rubygems'
4
+ require 'bundler/setup'
8
5
 
9
6
  $LOAD_PATH.unshift File.expand_path("../../../lib", __FILE__)
10
- load File.expand_path('../../../bin/ey', __FILE__)
7
+ load File.expand_path('../../../bin/ey', __FILE__)
@@ -10,7 +10,7 @@ class FakeAwsm < Sinatra::Base
10
10
  # every request. It makes sense; you hardly ever want to keep
11
11
  # state in your application object (accidentally or otherwise),
12
12
  # but in this situation that's exactly what we want to do.
13
- @@scenario = Scenario::Empty # have to start somewhere
13
+ @@cloud_mock = Scenario::Base # have to start somewhere
14
14
  end
15
15
 
16
16
  before { content_type "application/json" }
@@ -23,7 +23,7 @@ class FakeAwsm < Sinatra::Base
23
23
  put "/scenario" do
24
24
  new_scenario = case params[:scenario]
25
25
  when "empty"
26
- Scenario::Empty
26
+ Scenario::Base
27
27
  when "one app, one environment, not linked"
28
28
  Scenario::UnlinkedApp
29
29
  when "two apps"
@@ -38,24 +38,26 @@ class FakeAwsm < Sinatra::Base
38
38
  Scenario::OneAppManyEnvs
39
39
  when "one app, many similarly-named environments"
40
40
  Scenario::OneAppManySimilarlyNamedEnvs
41
+ when "two apps, same git uri"
42
+ Scenario::TwoAppsSameGitUri
41
43
  else
42
44
  status(400)
43
45
  return {"ok" => "false", "message" => "wtf is the #{params[:scenario]} scenario?"}.to_json
44
46
  end
45
- @@scenario = new_scenario.new(params[:remote])
47
+ @@cloud_mock = CloudMock.new(new_scenario.new(params[:remote]))
46
48
  {"ok" => "true"}.to_json
47
49
  end
48
50
 
49
51
  get "/api/v2/apps" do
50
- {"apps" => @@scenario.apps}.to_json
52
+ {"apps" => @@cloud_mock.apps}.to_json
51
53
  end
52
54
 
53
55
  get "/api/v2/environments" do
54
- {"environments" => @@scenario.environments}.to_json
56
+ {"environments" => @@cloud_mock.environments}.to_json
55
57
  end
56
58
 
57
59
  get "/api/v2/environments/:env_id/logs" do
58
- {"logs" => @@scenario.logs(params[:env_id])}.to_json
60
+ {"logs" => @@cloud_mock.logs(params[:env_id].to_i)}.to_json
59
61
  end
60
62
 
61
63
  get "/api/v2/environments/:env_id/recipes" do
@@ -118,56 +120,106 @@ private
118
120
  params[:password] == "test"
119
121
  end
120
122
 
121
- module Scenario
122
- class Empty
123
- attr_reader :git_remote
123
+ class CloudMock
124
+ def initialize(initial_conditions)
125
+ @apps, @envs, @keys, @app_joins, @key_joins = [], [], [], [], []
126
+ @next_id = 1
124
127
 
125
- def initialize(git_remote)
126
- @git_remote = git_remote
128
+ initial_conditions.starting_apps.each {|a| add_app(a) }
129
+ initial_conditions.starting_environments.each {|e| add_environment(e) }
130
+ initial_conditions.starting_app_joins.each {|(app_id, env_id)| link_app(app_id, env_id) }
131
+ end
132
+
133
+ def add_app(app)
134
+ app["id"] ||= next_id
135
+ @apps << app
136
+ app
137
+ end
138
+
139
+ def add_environment(env)
140
+ env["id"] ||= next_id
141
+
142
+ unless env.has_key?("app_master")
143
+ master = env["instances"].find{ |i| %w[solo app_master].include?(i["role"]) }
144
+ env.merge!("app_master" => master)
127
145
  end
128
146
 
129
- def apps
130
- []
147
+ @envs << env
148
+ env
149
+ end
150
+
151
+ def link_app(app_id, env_id)
152
+ @apps.find {|a| a["id"] == app_id } or raise "No such app id:#{app_id}"
153
+ @envs.find {|e| e["id"] == env_id } or raise "No such environment id:#{env_id}"
154
+ @app_joins << [app_id, env_id]
155
+ @app_joins.uniq!
156
+ end
157
+
158
+ def apps
159
+ @apps.dup.map do |app|
160
+ app.merge("environments" => joined_envs(app))
131
161
  end
162
+ end
132
163
 
133
- def environments
134
- []
164
+ def logs(env_id)
165
+ [{
166
+ "id" => env_id,
167
+ "role" => "app_master",
168
+ "main" => "MAIN LOG OUTPUT",
169
+ "custom" => "CUSTOM LOG OUTPUT"
170
+ }]
171
+ end
172
+
173
+ def environments
174
+ @envs.dup.map do |env|
175
+ env.merge("apps" => joined_apps(env))
135
176
  end
136
- end # Empty
177
+ end
137
178
 
138
- class UnlinkedApp < Empty
139
- def apps
140
- [{
141
- "name" => "rails232app",
142
- "environments" => [],
143
- "repository_uri" => git_remote}]
179
+ private
180
+
181
+ def next_id
182
+ id = @next_id
183
+ @next_id += 1
184
+ id
185
+ end
186
+
187
+ def joined_envs(app)
188
+ related_objects(app, @envs, @app_joins)
189
+ end
190
+
191
+ def joined_apps(env)
192
+ related_objects(env, @apps, @app_joins.map {|j| j.reverse})
193
+ end
194
+
195
+ def related_objects(obj, candidates, relation)
196
+ candidate_table = candidates.inject({}) do |table, candidate|
197
+ table.merge(candidate["id"] => candidate)
144
198
  end
145
199
 
146
- def environments
147
- [{
148
- "ssh_username" => "turkey",
149
- "instances" => [{
150
- "status" => "running",
151
- "id" => 27220,
152
- "amazon_id" => 'i-ddbbdd92',
153
- "role" => "solo",
154
- "public_hostname" => "app_master_hostname.compute-1.amazonaws.com"}],
155
- "name" => "giblets",
156
- "apps" => [],
157
- "instances_count" => 1,
158
- "stack_name" => "nginx_mongrel",
159
- "id" => 200,
160
- "framework_env" => "production",
161
- "app_master" => {
162
- "status" => "running",
163
- "id" => 27220,
164
- "amazon_id" => 'i-ddbbdd92',
165
- "role" => "solo",
166
- "public_hostname" => "app_master_hostname.compute-1.amazonaws.com"}}]
200
+ relation.find_all do |(obj_id, candidate_id)|
201
+ obj["id"] == obj_id
202
+ end.map do |(obj_id, candidate_id)|
203
+ candidate_table[candidate_id]
204
+ end
205
+ end
206
+ end
207
+
208
+ module Scenario
209
+ class Base
210
+ attr_accessor :git_remote
211
+
212
+ def initialize(git_remote)
213
+ self.git_remote = git_remote
167
214
  end
168
- end # UnlinkedApp
169
215
 
170
- class LinkedApp < Empty
216
+ def starting_apps() [] end
217
+ def starting_environments() [] end
218
+ def starting_app_joins() [] end
219
+
220
+ end
221
+
222
+ class LinkedApp < Base
171
223
  def _instances
172
224
  [{
173
225
  "id" => 27220,
@@ -222,140 +274,103 @@ private
222
274
  end
223
275
  private :_instances
224
276
 
225
- def apps
226
- [{"name" => "rails232app",
227
- "environments" => [{"ssh_username" => "turkey",
228
- "instances" => _instances,
229
- "name" => "giblets",
230
- "apps" => [{"name" => "rails232app",
231
- "repository_uri" => git_remote}],
232
- "instances_count" => 1,
233
- "stack_name" => "nginx_mongrel",
234
- "id" => 200,
235
- "framework_env" => "production",
236
- "app_master" => _instances.first}],
277
+ def starting_apps
278
+ [{
279
+ "id" => 1001,
280
+ "name" => "rails232app",
237
281
  "repository_uri" => git_remote}]
238
282
  end
239
283
 
240
- def environments
284
+ def starting_environments
241
285
  [{
286
+ "id" => 200,
242
287
  "ssh_username" => "turkey",
243
288
  "instances" => _instances,
244
289
  "name" => "giblets",
245
- "apps" => [{
246
- "name" => "rails232app",
247
- "repository_uri" => git_remote}],
290
+ "instances_count" => 4,
291
+ "stack_name" => "nginx_mongrel",
292
+ "framework_env" => "production"}]
293
+ end
294
+
295
+ def starting_app_joins
296
+ [[1001, 200]]
297
+ end
298
+
299
+ end # LinkedApp
300
+
301
+ class UnlinkedApp < Base
302
+ def starting_apps
303
+ [{
304
+ "id" => 1001,
305
+ "name" => "rails232app",
306
+ "repository_uri" => git_remote}]
307
+ end
308
+
309
+ def starting_environments
310
+ [{
311
+ "ssh_username" => "turkey",
312
+ "instances" => [{
313
+ "status" => "running",
314
+ "id" => 27220,
315
+ "amazon_id" => 'i-ddbbdd92',
316
+ "role" => "solo",
317
+ "public_hostname" => "ec2-174-129-198-124.compute-1.amazonaws.com"}],
318
+ "name" => "giblets",
248
319
  "instances_count" => 1,
249
320
  "stack_name" => "nginx_mongrel",
250
321
  "id" => 200,
251
- "framework_env" => "production",
252
- "app_master" => _instances[0]}]
322
+ "framework_env" => "production"}]
253
323
  end
324
+ end # UnlinkedApp
254
325
 
255
- def logs(env_id)
326
+ class LinkedAppNotRunning < Base
327
+ def starting_apps
256
328
  [{
257
- "id" => env_id,
258
- "role" => "app_master",
259
- "main" => "MAIN LOG OUTPUT",
260
- "custom" => "CUSTOM LOG OUTPUT"
261
- }]
262
- end
263
- end # LinkedApp
264
-
265
- class LinkedAppNotRunning < Empty
266
- def apps
267
- [{"name" => "rails232app",
268
- "environments" => [{"ssh_username" => "turkey",
269
- "instances" => [],
270
- "name" => "giblets",
271
- "apps" => [{"name" => "rails232app",
272
- "repository_uri" => git_remote}],
273
- "instances_count" => 0,
274
- "stack_name" => "nginx_mongrel",
275
- "id" => 200,
276
- "framework_env" => "production",
277
- "app_master" => {}}],
329
+ "id" => 1001,
330
+ "name" => "rails232app",
278
331
  "repository_uri" => git_remote}]
279
332
  end
280
333
 
281
- def environments
334
+ def starting_environments
282
335
  [{
283
336
  "ssh_username" => "turkey",
284
337
  "instances" => [],
285
338
  "name" => "giblets",
286
- "apps" => [{
287
- "name" => "rails232app",
288
- "repository_uri" => git_remote}],
289
339
  "instances_count" => 0,
290
340
  "stack_name" => "nginx_mongrel",
291
341
  "id" => 200,
292
- "framework_env" => "production",
293
- "app_master" => {}}]
342
+ "framework_env" => "production"}]
294
343
  end
295
344
 
296
- def logs(env_id)
297
- []
345
+ def starting_app_joins
346
+ [[1001, 200]]
298
347
  end
299
348
  end # LinkedAppNotRunning
300
349
 
301
350
  class LinkedAppRedMaster < LinkedApp
302
- def apps
303
- apps = super
304
- apps[0]["environments"][0]["instances"][0]["status"] = "error"
305
- apps[0]["environments"][0]["app_master"]["status"] = "error"
306
- apps
307
- end
308
-
309
- def environments
351
+ def starting_environments
310
352
  envs = super
311
353
  envs[0]["instances"][0]["status"] = "error"
312
- envs[0]["app_master"]["status"] = "error"
313
354
  envs
314
355
  end
315
356
  end
316
357
 
317
- class OneAppManyEnvs < Empty
318
- def apps
319
- apps = [{
358
+ class OneAppManyEnvs < Base
359
+ def starting_apps
360
+ [{
361
+ "id" => 1001,
320
362
  "name" => "rails232app",
321
- "repository_uri" => git_remote
322
- }]
323
-
324
- [{"name" => "rails232app",
325
- "environments" => [{
326
- "ssh_username" => "turkey",
327
- "instances" => [{
328
- "status" => "running",
329
- "id" => 27220,
330
- "amazon_id" => 'i-ddbbdd92',
331
- "role" => "solo",
332
- "public_hostname" => "app_master_hostname.compute-1.amazonaws.com"}],
333
- "name" => "giblets",
334
- "apps" => apps,
335
- "instances_count" => 1,
336
- "stack_name" => "nginx_mongrel",
337
- "id" => 200,
338
- "framework_env" => "production",
339
- "app_master" => {
340
- "status" => "running",
341
- "id" => 27220,
342
- "amazon_id" => 'i-ddbbdd92',
343
- "role" => "solo",
344
- "public_hostname" => "app_master_hostname.compute-1.amazonaws.com"}
345
- }, {
346
- "ssh_username" => "ham",
347
- "instances" => [],
348
- "name" => "bakon",
349
- "apps" => apps,
350
- "instances_count" => 0,
351
- "stack_name" => "nginx_passenger",
352
- "id" => 8371,
353
- "app_master" => nil,
354
- }],
355
363
  "repository_uri" => git_remote}]
356
364
  end
357
365
 
358
- def environments
366
+ def starting_app_joins
367
+ [
368
+ [1001, 200],
369
+ [1001, 202],
370
+ ]
371
+ end
372
+
373
+ def starting_environments
359
374
  [{
360
375
  "ssh_username" => "turkey",
361
376
  "instances" => [{
@@ -365,44 +380,29 @@ private
365
380
  "role" => "solo",
366
381
  "public_hostname" => "app_master_hostname.compute-1.amazonaws.com"}],
367
382
  "name" => "giblets",
368
- "apps" => [{
369
- "name" => "rails232app",
370
- "repository_uri" => git_remote}],
371
383
  "instances_count" => 1,
372
384
  "stack_name" => "nginx_mongrel",
373
385
  "id" => 200,
374
386
  "framework_env" => "production",
375
- "app_master" => {
376
- "status" => "running",
377
- "id" => 27220,
378
- "amazon_id" => 'i-ddbbdd92',
379
- "role" => "solo",
380
- "public_hostname" => "app_master_hostname.compute-1.amazonaws.com"}
381
387
  }, {
382
388
  "ssh_username" => "ham",
383
389
  "instances" => [],
384
390
  "name" => "bakon",
385
- "apps" => [{
386
- "name" => "rails232app",
387
- "repository_uri" => git_remote}],
388
391
  "instances_count" => 0,
389
392
  "stack_name" => "nginx_passenger",
390
- "id" => 8371,
391
- "app_master" => nil,
393
+ "id" => 202,
392
394
  }, {
393
395
  "ssh_username" => "hamburger",
394
396
  "instances" => [],
395
397
  "name" => "beef",
396
- "apps" => [],
397
398
  "instances_count" => 0,
398
399
  "stack_name" => "nginx_passenger",
399
- "id" => 8372,
400
- "app_master" => nil,
400
+ "id" => 206,
401
401
  }]
402
402
  end
403
403
  end # OneAppTwoEnvs
404
404
 
405
- class TwoApps < Empty
405
+ class TwoApps < Base
406
406
  def railsapp_master
407
407
  {
408
408
  "status" => "running",
@@ -427,149 +427,66 @@ private
427
427
  end
428
428
  private :keycollector_master
429
429
 
430
- def apps
430
+ def starting_apps
431
431
  [{
432
432
  "id" => 3202,
433
433
  "name" => "keycollector",
434
434
  "repository_uri" => "git@github.com:smerritt/keycollector.git",
435
- "instances_count" => 0,
436
- "ssh_username" => "deploy",
437
- "environments" => [{
438
- "apps" => [{
439
- "name" => "keycollector",
440
- "repository_uri" => "git@github.com:smerritt/keycollector.git",
441
- "id" => 3202}],
442
- "name" => "keycollector_production",
443
- "app_master" => keycollector_master,
444
- "instances" => [keycollector_master],
445
- "id" => 4359,
446
- "framework_env" => "production",
447
- "stack_name" => "nginx_mongrel"}],
448
435
  }, {
449
- "name" => "rails232app",
450
- "repository_uri" => "git://github.com/smerritt/rails232app.git",
451
436
  "id" => 6125,
452
- "environments" => [{
453
- "apps" => [{
454
- "name" => "rails232app",
455
- "repository_uri" => "git://github.com/smerritt/rails232app.git",
456
- "id" => 6125}],
457
- "instances_count" => 1,
458
- "ssh_username" => "turkey",
459
- "name" => "giblets",
460
- "app_master" => railsapp_master,
461
- "instances" => [railsapp_master],
462
- "framework_env" => "production",
463
- "id" => 200,
464
- "stack_name" => "nginx_unicorn"}],
465
- }]
437
+ "name" => "rails232app",
438
+ "repository_uri" => "git://github.com/smerritt/rails232app.git"}]
439
+ end
440
+
441
+ def starting_app_joins
442
+ [
443
+ [6125, 200],
444
+ [3202, 439],
445
+ ]
466
446
  end
467
447
 
468
- def environments
448
+ def starting_environments
469
449
  [{
470
450
  "id" => 200,
471
451
  "name" => "giblets",
452
+ "framework_env" => "staging",
472
453
  "ssh_username" => "turkey",
473
454
  "instances_count" => 1,
474
455
  "instances" => [railsapp_master],
475
- "app_master" => railsapp_master,
476
456
  "stack_name" => "nginx_unicorn",
477
- "apps" => [{
478
- "name" => "rails232app",
479
- "repository_uri" => "git://github.com/smerritt/rails232app.git",
480
- "id" => 6125}],
481
457
  }, {
482
- "id" => 4359,
458
+ "id" => 439,
483
459
  "framework_env" => "production",
484
460
  "name" => "keycollector_production",
485
461
  "ssh_username" => "deploy",
486
462
  "stack_name" => "nginx_mongrel",
487
463
  "instances_count" => 1,
488
464
  "instances" => [keycollector_master],
489
- "app_master" => keycollector_master,
490
- "apps" => [{
491
- "name" => "keycollector",
492
- "repository_uri" => "git@github.com:smerritt/keycollector.git",
493
- "id" => 3202}],
494
465
  }]
495
466
  end
496
467
  end # TwoApps
497
468
 
498
- class OneAppManySimilarlyNamedEnvs < Empty
499
- def apps
500
- apps = [{
501
- "name" => "rails232app",
502
- "repository_uri" => git_remote
503
- }]
469
+ class TwoAppsSameGitUri < TwoApps
470
+ def starting_apps
471
+ apps = super
472
+ apps.each do |app|
473
+ app["repository_uri"] = "git://github.com/engineyard/dup.git"
474
+ end
475
+ apps
476
+ end
477
+ end # TwoAppsSameGitUri
504
478
 
505
- [{"name" => "rails232app",
506
- "environments" => [{
507
- "ssh_username" => "turkey",
508
- "instances" => [{
509
- "status" => "running",
510
- "id" => 27220,
511
- "amazon_id" => 'i-ddbbdd92',
512
- "role" => "solo",
513
- "public_hostname" => "app_master_hostname.compute-1.amazonaws.com"}],
514
- "name" => "railsapp_production",
515
- "apps" => apps,
516
- "instances_count" => 1,
517
- "stack_name" => "nginx_mongrel",
518
- "framework_env" => "production",
519
- "id" => 200,
520
- "app_master" => {
521
- "status" => "running",
522
- "id" => 27220,
523
- "amazon_id" => 'i-ddbbdd92',
524
- "role" => "solo",
525
- "public_hostname" => "app_master_hostname.compute-1.amazonaws.com",
526
- },
527
- }, {
528
- "ssh_username" => "ham",
529
- "instances" => [{
530
- "public_hostname" => '127.3.2.1',
531
- "status" => "running",
532
- "id" => 63066,
533
- "role" => "solo",
534
- }],
535
- "name" => "railsapp_staging",
536
- "apps" => apps,
537
- "instances_count" => 1,
538
- "stack_name" => "nginx_passenger",
539
- "id" => 8371,
540
- "framework_env" => "production",
541
- "app_master" => {
542
- "public_hostname" => '127.3.2.1',
543
- "status" => "running",
544
- "id" => 63066,
545
- "role" => "solo",
546
- },
547
- }, {
548
- "ssh_username" => "ham",
549
- "instances" => [{
550
- "status" => "running",
551
- "id" => 59395,
552
- "role" => "solo",
553
- "public_hostname" => "app_master_hostname.compute-1.amazonaws.com",
554
- }],
555
- "name" => "railsapp_staging_2",
556
- "apps" => apps,
557
- "instances_count" => 1,
558
- "stack_name" => "nginx_passenger",
559
- "id" => 8371,
560
- "framework_env" => "production",
561
- "app_master" => {
562
- "public_hostname" => '127.44.55.66',
563
- "status" => "running",
564
- "id" => 59395,
565
- "role" => "solo",
566
- },
567
- }],
479
+ class OneAppManySimilarlyNamedEnvs < Base
480
+ def starting_apps
481
+ [{
482
+ "id" => 1001,
483
+ "name" => "rails232app",
568
484
  "repository_uri" => git_remote}]
569
485
  end
570
486
 
571
- def environments
487
+ def starting_environments
572
488
  [{
489
+ "id" => 200,
573
490
  "ssh_username" => "turkey",
574
491
  "instances" => [{
575
492
  "status" => "running",
@@ -578,77 +495,44 @@ private
578
495
  "role" => "solo",
579
496
  "public_hostname" => "app_master_hostname.compute-1.amazonaws.com"}],
580
497
  "name" => "railsapp_production",
581
- "apps" => [{
582
- "name" => "rails232app",
583
- "repository_uri" => git_remote}],
584
498
  "instances_count" => 1,
585
499
  "stack_name" => "nginx_mongrel",
586
- "id" => 200,
587
500
  "framework_env" => "production",
588
- "app_master" => {
589
- "public_hostname" => "app_master_hostname.compute-1.amazonaws.com",
590
- "status" => "running",
591
- "id" => 27220,
592
- "amazon_id" => 'i-ddbbdd92',
593
- "role" => "solo"},
594
501
  }, {
502
+ "id" => 202,
595
503
  "ssh_username" => "ham",
596
504
  "instances" => [{
597
505
  "public_hostname" => '127.3.2.1',
598
506
  "status" => "running",
599
507
  "id" => 63066,
600
- "amazon_id" => 'i-09fec72a',
601
508
  "role" => "solo",
602
509
  }],
603
510
  "name" => "railsapp_staging",
604
- "apps" => [{
605
- "name" => "rails232app",
606
- "repository_uri" => git_remote}],
607
511
  "instances_count" => 1,
608
512
  "stack_name" => "nginx_passenger",
609
- "id" => 8371,
610
513
  "framework_env" => "production",
611
- "app_master" => {
612
- "public_hostname" => '127.3.2.1',
613
- "status" => "running",
614
- "id" => 63066,
615
- "amazon_id" => 'i-09fec72a',
616
- "role" => "solo",
617
- },
618
514
  }, {
619
- "ssh_username" => "chicken",
515
+ "ssh_username" => "ham",
620
516
  "instances" => [{
621
- "public_hostname" => '127.44.55.66',
622
517
  "status" => "running",
623
518
  "id" => 59395,
624
- "amazon_id" => 'i-1aa1e271',
625
519
  "role" => "solo",
520
+ "public_hostname" => "ec2-174-129-198-124.compute-1.amazonaws.com",
626
521
  }],
627
522
  "name" => "railsapp_staging_2",
628
- "apps" => [{
629
- "name" => "rails232app",
630
- "repository_uri" => git_remote}],
631
523
  "instances_count" => 1,
632
524
  "stack_name" => "nginx_passenger",
633
- "id" => 8371,
525
+ "id" => 204,
634
526
  "framework_env" => "production",
635
- "app_master" => {
636
- "public_hostname" => '127.44.55.66',
637
- "status" => "running",
638
- "id" => 59395,
639
- "amazon_id" => 'i-1aa1e271',
640
- "role" => "solo",
641
- },
642
527
  }]
643
528
  end
644
529
 
645
- def logs(env_id)
646
- [{
647
- "id" => env_id,
648
- "role" => "app_master",
649
- "main" => "MAIN LOG OUTPUT",
650
- "custom" => "CUSTOM LOG OUTPUT"
651
- }]
530
+ def starting_app_joins
531
+ [
532
+ [1001, 200],
533
+ [1001, 202],
534
+ [1001, 204],
535
+ ]
652
536
  end
653
537
  end # OneAppManySimilarlyNamedEnvs
654
538
  end