engineyard 2.2.1 → 2.3.0
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 +8 -8
- data/README.md +75 -18
- data/lib/engineyard.rb +6 -6
- data/lib/engineyard/cli.rb +131 -11
- data/lib/engineyard/cli/ui.rb +42 -0
- data/lib/engineyard/config.rb +39 -105
- data/lib/engineyard/deploy_config.rb +19 -16
- data/lib/engineyard/error.rb +1 -1
- data/lib/engineyard/serverside_runner.rb +1 -1
- data/lib/engineyard/templates.rb +6 -0
- data/lib/engineyard/templates/ey.yml.erb +193 -0
- data/lib/engineyard/templates/ey_yml.rb +119 -0
- data/lib/engineyard/version.rb +2 -2
- data/spec/engineyard/deploy_config_spec.rb +33 -67
- data/spec/ey/deploy_spec.rb +54 -94
- data/spec/ey/init_spec.rb +123 -0
- data/spec/ey/rebuild_spec.rb +1 -1
- data/spec/ey/servers_spec.rb +143 -0
- data/spec/ey/timeout_deploy_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -7
- data/spec/support/helpers.rb +43 -1
- data/spec/support/shared_behavior.rb +4 -1
- metadata +19 -11
- data/lib/engineyard/deploy_config/migrate.rb +0 -129
data/spec/ey/deploy_spec.rb
CHANGED
@@ -37,7 +37,7 @@ describe "ey deploy" do
|
|
37
37
|
cmd << "--account" << opts[:account] if opts[:account]
|
38
38
|
cmd << "--ref" << opts[:ref] if opts[:ref]
|
39
39
|
cmd << "--migrate" if opts[:migrate]
|
40
|
-
cmd << opts[:migrate] if opts[:migrate].respond_to?(:
|
40
|
+
cmd << opts[:migrate] if opts[:migrate].respond_to?(:to_str)
|
41
41
|
cmd << "--no-migrate" if opts[:migrate] == nil
|
42
42
|
cmd << "--verbose" if opts[:verbose]
|
43
43
|
cmd
|
@@ -108,12 +108,7 @@ describe "ey deploy" do
|
|
108
108
|
login_scenario "one app, one environment"
|
109
109
|
end
|
110
110
|
|
111
|
-
|
112
|
-
fast_ey %w[deploy --no-migrate]
|
113
|
-
@ssh_commands.last.should =~ %r{/usr/local/ey_resin/ruby/bin/engineyard-serverside}
|
114
|
-
end
|
115
|
-
|
116
|
-
context "without migrate sepecified, interactively reads migration command" do
|
111
|
+
context "no ey.yml" do
|
117
112
|
def clean_ey_yml
|
118
113
|
File.unlink 'ey.yml' if File.exist?('ey.yml')
|
119
114
|
FileUtils.rm_r 'config' if FileTest.exist?('config')
|
@@ -122,48 +117,16 @@ describe "ey deploy" do
|
|
122
117
|
before { clean_ey_yml }
|
123
118
|
after { clean_ey_yml }
|
124
119
|
|
125
|
-
it "
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
ey_yml.should_not be_exist
|
130
|
-
ey(%w[deploy]) do |input|
|
131
|
-
input.puts('')
|
132
|
-
input.puts('')
|
133
|
-
end
|
134
|
-
@ssh_commands.last.should =~ /engineyard-serverside.*deploy/
|
135
|
-
@ssh_commands.last.should =~ /--migrate 'rake db:migrate'/
|
136
|
-
File.exist?('ey.yml').should be_false
|
137
|
-
ey_yml.should be_exist
|
138
|
-
env_conf = read_yaml(ey_yml.to_s)['defaults']
|
139
|
-
env_conf['migrate'].should == true
|
140
|
-
env_conf['migration_command'].should == 'rake db:migrate'
|
120
|
+
it "tells you to run ey init" do
|
121
|
+
fast_failing_ey %w[deploy]
|
122
|
+
@err.should match(/ey init/)
|
123
|
+
@ssh_commands.should be_empty
|
141
124
|
end
|
142
125
|
|
143
|
-
it "
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
input.puts("y")
|
148
|
-
input.puts("ruby migrate")
|
149
|
-
end
|
150
|
-
@ssh_commands.last.should =~ /engineyard-serverside.*deploy/
|
151
|
-
@ssh_commands.last.should =~ /--migrate 'ruby migrate'/
|
152
|
-
File.exist?('ey.yml').should be_true
|
153
|
-
env_conf = read_yaml('ey.yml')['defaults']
|
154
|
-
env_conf['migrate'].should == true
|
155
|
-
env_conf['migration_command'].should == 'ruby migrate'
|
156
|
-
end
|
157
|
-
|
158
|
-
it "doesn't ask for the command if you say no" do
|
159
|
-
File.exist?('ey.yml').should be_false
|
160
|
-
ey(%w[deploy], :hide_err => true) do |input|
|
161
|
-
input.puts("no")
|
162
|
-
end
|
163
|
-
@ssh_commands.last.should =~ /engineyard-serverside.*deploy/
|
164
|
-
@ssh_commands.last.should_not =~ /--migrate/
|
165
|
-
File.exist?('ey.yml').should be_true
|
166
|
-
read_yaml('ey.yml')['defaults']['migrate'].should == false
|
126
|
+
it "tells you to run ey init" do
|
127
|
+
fast_failing_ey %w[deploy --migrate]
|
128
|
+
@err.should match(/ey init/)
|
129
|
+
@ssh_commands.should be_empty
|
167
130
|
end
|
168
131
|
end
|
169
132
|
|
@@ -173,40 +136,48 @@ describe "ey deploy" do
|
|
173
136
|
@ssh_commands.last.should_not =~ /--migrate/
|
174
137
|
end
|
175
138
|
|
176
|
-
it "
|
177
|
-
fast_ey
|
178
|
-
@ssh_commands.last.should match(/--migrate '
|
139
|
+
it "runs the migrate command when one is given" do
|
140
|
+
fast_ey ['deploy', '--migrate', 'thor fancy:migrate']
|
141
|
+
@ssh_commands.last.should match(/--migrate 'thor fancy:migrate'/)
|
179
142
|
end
|
180
143
|
|
181
|
-
context "
|
182
|
-
before { write_yaml({"defaults" => {
|
144
|
+
context "ey.yml migrate only" do
|
145
|
+
before { write_yaml({"defaults" => {"migrate" => true}}, 'ey.yml') }
|
183
146
|
after { File.unlink 'ey.yml' }
|
184
147
|
|
185
|
-
it "
|
186
|
-
|
187
|
-
@
|
188
|
-
read_yaml('ey.yml')['defaults']['migrate'].should == true
|
148
|
+
it "tells you to run ey init" do
|
149
|
+
fast_failing_ey %w[deploy]
|
150
|
+
@err.should match(/ey init/)
|
189
151
|
end
|
190
152
|
end
|
191
153
|
|
192
|
-
context "
|
154
|
+
context "ey.yml migration_command only" do
|
155
|
+
before { write_yaml({"defaults" => {"migration_command" => "thor fancy:migrate"}}, 'ey.yml') }
|
156
|
+
after { File.unlink 'ey.yml' }
|
157
|
+
|
158
|
+
it "tells you to run ey init" do
|
159
|
+
fast_failing_ey %w[deploy]
|
160
|
+
@err.should match(/ey init/)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
context "ey.yml with environment specific options overriding the defaults" do
|
193
165
|
before do
|
194
166
|
write_yaml({
|
195
|
-
"defaults" => { "migration_command" => "rake plain:migrate"},
|
167
|
+
"defaults" => { "migrate" => true, "migration_command" => "rake plain:migrate"},
|
196
168
|
"environments" => {"giblets" => { "migration_command" => 'thor fancy:migrate' }}
|
197
169
|
}, 'ey.yml')
|
198
170
|
end
|
199
171
|
after { File.unlink 'ey.yml' }
|
200
172
|
|
201
|
-
it "migrates with the custom command
|
173
|
+
it "migrates with the custom command" do
|
202
174
|
fast_ey %w[deploy]
|
203
175
|
@ssh_commands.last.should =~ /--migrate 'thor fancy:migrate'/
|
204
|
-
read_yaml('ey.yml')['defaults']['migrate'].should == true
|
205
176
|
end
|
206
177
|
end
|
207
178
|
|
208
179
|
context "disabled in ey.yml" do
|
209
|
-
before { write_yaml({"
|
180
|
+
before { write_yaml({"defaults" => {"migrate" => false}}, 'ey.yml') }
|
210
181
|
after { File.unlink 'ey.yml' }
|
211
182
|
|
212
183
|
it "does not migrate by default" do
|
@@ -220,25 +191,14 @@ describe "ey deploy" do
|
|
220
191
|
@ssh_commands.last.should =~ /--migrate 'rake fancy:migrate'/
|
221
192
|
end
|
222
193
|
|
223
|
-
it "
|
224
|
-
|
225
|
-
@
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
context "explicitly enabled in ey.yml (the default)" do
|
230
|
-
before { write_yaml({"environments" => {"giblets" => {"migrate" => true}}}, 'ey.yml') }
|
231
|
-
after { File.unlink 'ey.yml' }
|
232
|
-
|
233
|
-
it "migrates with the default (and writes the default to ey.yml)" do
|
234
|
-
fast_ey %w[deploy]
|
235
|
-
@ssh_commands.last.should match(/--migrate 'rake db:migrate'/)
|
236
|
-
read_yaml('ey.yml')['defaults']['migration_command'].should == 'rake db:migrate'
|
194
|
+
it "tells you to initialize ey.yml when --migrate is specified with no value" do
|
195
|
+
fast_failing_ey %w[deploy --migrate]
|
196
|
+
@err.should match(/ey init/)
|
237
197
|
end
|
238
198
|
end
|
239
199
|
|
240
200
|
context "customized and disabled in ey.yml" do
|
241
|
-
before { write_yaml({"
|
201
|
+
before { write_yaml({"defaults" => { "migrate" => false, "migration_command" => "thor fancy:migrate" }}, 'ey.yml') }
|
242
202
|
after { File.unlink 'ey.yml' }
|
243
203
|
|
244
204
|
it "does not migrate by default" do
|
@@ -298,21 +258,6 @@ describe "ey deploy" do
|
|
298
258
|
end
|
299
259
|
end
|
300
260
|
|
301
|
-
context "when there is extra configuration" do
|
302
|
-
before(:each) do
|
303
|
-
write_yaml({"environments" => {"giblets" => {"bert" => "ernie"}}}, 'ey.yml')
|
304
|
-
end
|
305
|
-
|
306
|
-
after(:each) do
|
307
|
-
File.unlink("ey.yml")
|
308
|
-
end
|
309
|
-
|
310
|
-
it "no longer gets passed along to engineyard-serverside (since serverside will read it on its own)" do
|
311
|
-
fast_ey %w[deploy --no-migrate]
|
312
|
-
@ssh_commands.last.should_not =~ /"bert":"ernie"/
|
313
|
-
end
|
314
|
-
end
|
315
|
-
|
316
261
|
context "with a configured default branch" do
|
317
262
|
before(:each) do
|
318
263
|
write_yaml({"environments" => {"giblets" => {"branch" => "master", "migrate" => false}}}, 'ey.yml')
|
@@ -344,6 +289,21 @@ describe "ey deploy" do
|
|
344
289
|
end
|
345
290
|
end
|
346
291
|
|
292
|
+
context "when there is extra configuration" do
|
293
|
+
before(:each) do
|
294
|
+
write_yaml({"environments" => {"giblets" => {"migrate" => true, "migration_command" => "rake", "bert" => "ernie"}}}, 'ey.yml')
|
295
|
+
end
|
296
|
+
|
297
|
+
after(:each) do
|
298
|
+
File.unlink("ey.yml")
|
299
|
+
end
|
300
|
+
|
301
|
+
it "no longer gets passed along to engineyard-serverside (since serverside will read it on its own)" do
|
302
|
+
fast_ey %w[deploy --no-migrate]
|
303
|
+
@ssh_commands.last.should_not =~ /"bert":"ernie"/
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
347
307
|
context "specifying an environment" do
|
348
308
|
before(:all) do
|
349
309
|
login_scenario "one app, many similarly-named environments"
|
@@ -386,7 +346,7 @@ describe "ey deploy" do
|
|
386
346
|
|
387
347
|
context "when ey.yml is present" do
|
388
348
|
before do
|
389
|
-
write_yaml({"environments" => {"giblets" => {"beer" => "stout", "migrate" => true}}}, 'ey.yml')
|
349
|
+
write_yaml({"environments" => {"giblets" => {"beer" => "stout", "migrate" => true, "migration_command" => "rake"}}}, 'ey.yml')
|
390
350
|
end
|
391
351
|
|
392
352
|
after { File.unlink("ey.yml") }
|
@@ -416,7 +376,7 @@ describe "ey deploy" do
|
|
416
376
|
fast_ey %w[deploy --app rails232app --ref master --migrate]
|
417
377
|
@ssh_commands.last.should match(/--app rails232app/)
|
418
378
|
@ssh_commands.last.should match(/--ref resolved-master/)
|
419
|
-
@ssh_commands.last.should match(/--migrate 'rake db:migrate'/)
|
379
|
+
@ssh_commands.last.should match(/--migrate 'rake db:migrate --trace'/)
|
420
380
|
end
|
421
381
|
|
422
382
|
it "requires that you specify a ref when specifying the application" do
|
@@ -464,7 +424,7 @@ describe "ey deploy" do
|
|
464
424
|
end
|
465
425
|
|
466
426
|
it "passes along the repository URL to engineyard-serverside" do
|
467
|
-
@deploy_command.should =~ /--
|
427
|
+
@deploy_command.should =~ /--git user@git.host:path\/to\/repo.git/
|
468
428
|
end
|
469
429
|
|
470
430
|
it "passes along the web server stack to engineyard-serverside" do
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "ey init" do
|
4
|
+
given "integration"
|
5
|
+
|
6
|
+
let(:default_migration_command) { "rake db:migrate --trace" }
|
7
|
+
|
8
|
+
before do
|
9
|
+
login_scenario "one app, one environment"
|
10
|
+
end
|
11
|
+
|
12
|
+
before { clean_ey_yml }
|
13
|
+
after { clean_ey_yml }
|
14
|
+
|
15
|
+
context "with no ey.yml file" do
|
16
|
+
it "writes the file" do
|
17
|
+
fast_ey %w[init]
|
18
|
+
|
19
|
+
expect(ey_yml).to exist
|
20
|
+
expect_config('migrate').to eq(false)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "with existing ey.yml file" do
|
25
|
+
let(:existing) {
|
26
|
+
{
|
27
|
+
"defaults" => {
|
28
|
+
"migrate" => false,
|
29
|
+
"migration_command" => "thor fancy:migrate",
|
30
|
+
"precompile_assets" => false,
|
31
|
+
"precompile_assets_task" => "assets:precompile",
|
32
|
+
},
|
33
|
+
"environments" => {
|
34
|
+
"my_env" => {
|
35
|
+
"default" => true,
|
36
|
+
"migrate" => true,
|
37
|
+
"migration_command" => default_migration_command,
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
before do
|
44
|
+
write_yaml(existing, 'ey.yml')
|
45
|
+
end
|
46
|
+
|
47
|
+
it "reinitializes the file" do
|
48
|
+
fast_ey %w[init]
|
49
|
+
|
50
|
+
expect_config('defaults','migration_command').to eq("thor fancy:migrate")
|
51
|
+
expect_config('defaults','migrate').to eq(false)
|
52
|
+
expect_config('defaults','precompile_assets').to eq(false)
|
53
|
+
|
54
|
+
expect_config('environments','my_env','default').to eq(true)
|
55
|
+
expect_config('environments','my_env','migrate').to eq(true)
|
56
|
+
expect_config('environments','my_env','migration_command').to eq(default_migration_command)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "makes a backup when overwriting an existing file" do
|
60
|
+
fast_ey %w[init]
|
61
|
+
data = read_yaml('ey.yml.backup')
|
62
|
+
expect(data['defaults']['migration_command']).to eq('thor fancy:migrate')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "smart defaults" do
|
67
|
+
describe "migrate" do
|
68
|
+
let(:db) { Pathname.new('db') }
|
69
|
+
let(:db_migrate) { db.join('migrate') }
|
70
|
+
|
71
|
+
context "with db/migrate directory" do
|
72
|
+
before { db_migrate.mkpath }
|
73
|
+
after { db.rmtree }
|
74
|
+
|
75
|
+
it "sets migrate to true and uses default migration command" do
|
76
|
+
fast_ey %w[init]
|
77
|
+
|
78
|
+
expect_config('migrate').to eq(true)
|
79
|
+
expect_config('migration_command').to eq(default_migration_command)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "without db/migrate directory" do
|
84
|
+
it "sets migrate to false and doesn't write migration_command" do
|
85
|
+
expect(db_migrate).to_not exist
|
86
|
+
|
87
|
+
fast_ey %w[init]
|
88
|
+
|
89
|
+
expect_config('migrate').to eq(false)
|
90
|
+
expect_config('migration_command').to be_nil
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context "precompile_assets" do
|
96
|
+
let(:app) { Pathname.new('app') }
|
97
|
+
let(:assets) { app.join('assets') }
|
98
|
+
|
99
|
+
context "with app/assets directory" do
|
100
|
+
before { assets.mkpath }
|
101
|
+
after { app.rmtree }
|
102
|
+
|
103
|
+
it "sets precompile_assets to true and doesn't write precompile_assets_task" do
|
104
|
+
fast_ey %w[init]
|
105
|
+
|
106
|
+
expect_config('precompile_assets').to eq(true)
|
107
|
+
expect_config('precompile_assets_task').to be_nil
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "without app/assets directory" do
|
112
|
+
it "sets precompile_assets to false and does not set an precompile_assets_task" do
|
113
|
+
expect(assets).to_not exist
|
114
|
+
|
115
|
+
fast_ey %w[init]
|
116
|
+
|
117
|
+
expect_config('precompile_assets').to eq(false)
|
118
|
+
expect_config('precompile_assets_task').to be_nil
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/spec/ey/rebuild_spec.rb
CHANGED
@@ -11,7 +11,7 @@ describe "ey rebuild" do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def verify_ran(scenario)
|
14
|
-
@out.should =~ /Updating instances on
|
14
|
+
@out.should =~ /Updating instances on #{scenario[:account]} \/ #{scenario[:environment]}/
|
15
15
|
end
|
16
16
|
|
17
17
|
include_examples "it takes an environment name and an account name"
|
@@ -0,0 +1,143 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "ey servers" do
|
4
|
+
|
5
|
+
given "integration"
|
6
|
+
|
7
|
+
def command_to_run(opts)
|
8
|
+
cmd = ["servers"]
|
9
|
+
cmd << "--environment" << opts[:environment] if opts[:environment]
|
10
|
+
cmd << "--account" << opts[:account] if opts[:account]
|
11
|
+
cmd
|
12
|
+
end
|
13
|
+
|
14
|
+
def verify_ran(scenario)
|
15
|
+
@out.should match(/#{scenario[:environment]}/) if scenario[:environment]
|
16
|
+
@out.should match(/#{scenario[:account]}/) if scenario[:account]
|
17
|
+
end
|
18
|
+
|
19
|
+
include_examples "it takes an environment name and an account name"
|
20
|
+
|
21
|
+
context "with no servers" do
|
22
|
+
before do
|
23
|
+
login_scenario "empty"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "prints error when no application found" do
|
27
|
+
fast_failing_ey %w[servers]
|
28
|
+
@err.should =~ /No application found/
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "with 1 server" do
|
33
|
+
before(:all) do
|
34
|
+
login_scenario "one app, many environments"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "lists the servers with specified env" do
|
38
|
+
fast_ey %w[servers -e giblets]
|
39
|
+
@out.should =~ /main \/ giblets/
|
40
|
+
@out.should include('1 server ')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "with servers" do
|
45
|
+
before(:all) do
|
46
|
+
login_scenario "two accounts, two apps, two environments, ambiguous"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "lists the servers with specified env" do
|
50
|
+
fast_ey %w[servers -c main -e giblets]
|
51
|
+
@out.should include("# 7 servers on main / giblets")
|
52
|
+
@out.should include("app_master_hostname.compute-1.amazonaws.com \ti-ddbbdd92\tapp_master")
|
53
|
+
@out.should include("app_hostname.compute-1.amazonaws.com \ti-d2e3f1b9\tapp")
|
54
|
+
@out.should include("db_master_hostname.compute-1.amazonaws.com \ti-d4cdddbf\tdb_master")
|
55
|
+
@out.should include("db_slave_1_hostname.compute-1.amazonaws.com \ti-asdfasdfaj\tdb_slave \tSlave I")
|
56
|
+
@out.should include("db_slave_2_hostname.compute-1.amazonaws.com \ti-asdfasdfaj\tdb_slave")
|
57
|
+
@out.should include("util_fluffy_hostname.compute-1.amazonaws.com\ti-80e3f1eb\tutil \tfluffy")
|
58
|
+
@out.should include("util_rocky_hostname.compute-1.amazonaws.com \ti-80etf1eb\tutil \trocky")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "lists the servers with specified env with users" do
|
62
|
+
fast_ey %w[servers -c main -e giblets -u]
|
63
|
+
@out.should include("# 7 servers on main / giblets")
|
64
|
+
@out.should include("turkey@app_master_hostname.compute-1.amazonaws.com \ti-ddbbdd92\tapp_master")
|
65
|
+
@out.should include("turkey@app_hostname.compute-1.amazonaws.com \ti-d2e3f1b9\tapp")
|
66
|
+
@out.should include("turkey@db_master_hostname.compute-1.amazonaws.com \ti-d4cdddbf\tdb_master")
|
67
|
+
@out.should include("turkey@db_slave_1_hostname.compute-1.amazonaws.com \ti-asdfasdfaj\tdb_slave \tSlave I")
|
68
|
+
@out.should include("turkey@db_slave_2_hostname.compute-1.amazonaws.com \ti-asdfasdfaj\tdb_slave")
|
69
|
+
@out.should include("turkey@util_fluffy_hostname.compute-1.amazonaws.com\ti-80e3f1eb\tutil \tfluffy")
|
70
|
+
@out.should include("turkey@util_rocky_hostname.compute-1.amazonaws.com \ti-80etf1eb\tutil \trocky")
|
71
|
+
end
|
72
|
+
|
73
|
+
it "lists simple format servers" do
|
74
|
+
fast_ey %w[servers -c main -e giblets -qs], :debug => false
|
75
|
+
@out.split(/\n/).map {|x| x.split(/\t/) }.should == [
|
76
|
+
['app_master_hostname.compute-1.amazonaws.com', 'i-ddbbdd92', 'app_master' ],
|
77
|
+
['app_hostname.compute-1.amazonaws.com', 'i-d2e3f1b9', 'app' ],
|
78
|
+
['db_master_hostname.compute-1.amazonaws.com', 'i-d4cdddbf', 'db_master' ],
|
79
|
+
['db_slave_1_hostname.compute-1.amazonaws.com', 'i-asdfasdfaj', 'db_slave', 'Slave I'],
|
80
|
+
['db_slave_2_hostname.compute-1.amazonaws.com', 'i-asdfasdfaj', 'db_slave' ],
|
81
|
+
['util_fluffy_hostname.compute-1.amazonaws.com', 'i-80e3f1eb', 'util', 'fluffy' ],
|
82
|
+
['util_rocky_hostname.compute-1.amazonaws.com', 'i-80etf1eb', 'util', 'rocky' ],
|
83
|
+
]
|
84
|
+
end
|
85
|
+
|
86
|
+
it "lists simple format servers with users" do
|
87
|
+
fast_ey %w[servers -c main -e giblets -qsu], :debug => false
|
88
|
+
@out.split(/\n/).map {|x| x.split(/\t/) }.should == [
|
89
|
+
['turkey@app_master_hostname.compute-1.amazonaws.com', 'i-ddbbdd92', 'app_master' ],
|
90
|
+
['turkey@app_hostname.compute-1.amazonaws.com', 'i-d2e3f1b9', 'app' ],
|
91
|
+
['turkey@db_master_hostname.compute-1.amazonaws.com', 'i-d4cdddbf', 'db_master' ],
|
92
|
+
['turkey@db_slave_1_hostname.compute-1.amazonaws.com', 'i-asdfasdfaj', 'db_slave', 'Slave I'],
|
93
|
+
['turkey@db_slave_2_hostname.compute-1.amazonaws.com', 'i-asdfasdfaj', 'db_slave' ],
|
94
|
+
['turkey@util_fluffy_hostname.compute-1.amazonaws.com', 'i-80e3f1eb', 'util', 'fluffy' ],
|
95
|
+
['turkey@util_rocky_hostname.compute-1.amazonaws.com', 'i-80etf1eb', 'util', 'rocky' ],
|
96
|
+
]
|
97
|
+
end
|
98
|
+
|
99
|
+
it "lists host only" do
|
100
|
+
fast_ey %w[servers -c main -e giblets -qS], :debug => false
|
101
|
+
@out.split(/\n/).should == [
|
102
|
+
'app_master_hostname.compute-1.amazonaws.com',
|
103
|
+
'app_hostname.compute-1.amazonaws.com',
|
104
|
+
'db_master_hostname.compute-1.amazonaws.com',
|
105
|
+
'db_slave_1_hostname.compute-1.amazonaws.com',
|
106
|
+
'db_slave_2_hostname.compute-1.amazonaws.com',
|
107
|
+
'util_fluffy_hostname.compute-1.amazonaws.com',
|
108
|
+
'util_rocky_hostname.compute-1.amazonaws.com',
|
109
|
+
]
|
110
|
+
end
|
111
|
+
|
112
|
+
it "lists host only with users" do
|
113
|
+
fast_ey %w[servers -c main -e giblets -qSu], :debug => false
|
114
|
+
@out.split(/\n/).should == [
|
115
|
+
'turkey@app_master_hostname.compute-1.amazonaws.com',
|
116
|
+
'turkey@app_hostname.compute-1.amazonaws.com',
|
117
|
+
'turkey@db_master_hostname.compute-1.amazonaws.com',
|
118
|
+
'turkey@db_slave_1_hostname.compute-1.amazonaws.com',
|
119
|
+
'turkey@db_slave_2_hostname.compute-1.amazonaws.com',
|
120
|
+
'turkey@util_fluffy_hostname.compute-1.amazonaws.com',
|
121
|
+
'turkey@util_rocky_hostname.compute-1.amazonaws.com',
|
122
|
+
]
|
123
|
+
end
|
124
|
+
|
125
|
+
it "finds no servers with gibberish " do
|
126
|
+
fast_failing_ey %w[servers --account main --environment gibberish]
|
127
|
+
@err.should include('No environment found matching "gibberish"')
|
128
|
+
end
|
129
|
+
|
130
|
+
it "finds no servers with gibberish account" do
|
131
|
+
fast_failing_ey %w[servers --account gibberish --environment giblets]
|
132
|
+
@err.should include('No account found matching "gibberish"')
|
133
|
+
end
|
134
|
+
|
135
|
+
it "reports failure to find a git repo when not in one" do
|
136
|
+
Dir.chdir(Dir.tmpdir) do
|
137
|
+
fast_failing_ey %w[servers]
|
138
|
+
@err.should =~ /fatal: Not a git repository \(or any of the parent directories\): .*#{Regexp.escape(Dir.tmpdir)}/
|
139
|
+
@out.should_not =~ /no application configured/
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|