vmc 0.5.0.beta.7 → 0.5.0.beta.10
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1277 -746
- data/Rakefile +22 -23
- data/lib/vmc/cli.rb +21 -27
- data/lib/vmc/cli/app/push.rb +1 -0
- data/lib/vmc/cli/app/push/create.rb +3 -2
- data/lib/vmc/cli/app/push/sync.rb +11 -8
- data/lib/vmc/cli/app/scale.rb +19 -17
- data/lib/vmc/cli/domain/map.rb +55 -0
- data/lib/vmc/cli/domain/unmap.rb +56 -0
- data/lib/vmc/cli/route/map.rb +74 -0
- data/lib/vmc/cli/route/unmap.rb +94 -0
- data/lib/vmc/cli/service/create.rb +4 -1
- data/lib/vmc/cli/start/base.rb +2 -2
- data/lib/vmc/cli/start/login.rb +5 -2
- data/lib/vmc/cli/start/target.rb +4 -3
- data/lib/vmc/cli/user/base.rb +19 -0
- data/lib/vmc/cli/user/passwd.rb +7 -19
- data/lib/vmc/cli/{start → user}/register.rb +12 -23
- data/lib/vmc/constants.rb +1 -1
- data/lib/vmc/test_support.rb +4 -0
- data/lib/vmc/test_support/command_helper.rb +38 -0
- data/{spec/support → lib/vmc/test_support}/common_input_examples.rb +0 -0
- data/lib/vmc/test_support/fake_home_dir.rb +16 -0
- data/lib/vmc/test_support/interact_helper.rb +29 -0
- data/lib/vmc/version.rb +1 -1
- data/spec/features/new_user_flow_spec.rb +43 -51
- data/spec/spec_helper.rb +24 -12
- data/spec/vmc/cli/app/instances_spec.rb +3 -8
- data/spec/vmc/cli/app/push/create_spec.rb +10 -7
- data/spec/vmc/cli/app/push_spec.rb +1 -1
- data/spec/vmc/cli/app/rename_spec.rb +1 -1
- data/spec/vmc/cli/app/scale_spec.rb +81 -0
- data/spec/vmc/cli/app/stats_spec.rb +3 -7
- data/spec/vmc/cli/domain/map_spec.rb +140 -0
- data/spec/vmc/cli/domain/unmap_spec.rb +73 -0
- data/spec/vmc/cli/organization/orgs_spec.rb +13 -16
- data/spec/vmc/cli/organization/rename_spec.rb +1 -1
- data/spec/vmc/cli/route/map_spec.rb +142 -0
- data/spec/vmc/cli/route/unmap_spec.rb +215 -0
- data/spec/vmc/cli/service/rename_spec.rb +1 -1
- data/spec/vmc/cli/space/rename_spec.rb +15 -18
- data/spec/vmc/cli/space/spaces_spec.rb +18 -25
- data/spec/vmc/cli/start/info_spec.rb +44 -46
- data/spec/vmc/cli/start/login_spec.rb +40 -0
- data/spec/vmc/cli/user/create_spec.rb +54 -0
- data/spec/vmc/cli/user/passwd_spec.rb +7 -14
- data/spec/vmc/cli/{start → user}/register_spec.rb +26 -22
- data/spec/vmc/cli_spec.rb +164 -6
- metadata +46 -39
- data/lib/vmc/cli/app/routes.rb +0 -100
- data/lib/vmc/cli/domain/add_domain.rb +0 -25
- data/lib/vmc/cli/domain/create_domain.rb +0 -28
- data/lib/vmc/cli/domain/delete_domain.rb +0 -56
- data/lib/vmc/cli/domain/remove_domain.rb +0 -28
- data/lib/vmc/cli/route/create_route.rb +0 -49
- data/lib/vmc/cli/route/delete.rb +0 -47
- data/spec/support/feature_helpers.rb +0 -16
- data/spec/support/interact_helpers.rb +0 -27
- data/spec/vmc/cli/route/delete_route_spec.rb +0 -162
data/spec/vmc/cli_spec.rb
CHANGED
@@ -2,19 +2,20 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe VMC::CLI do
|
4
4
|
let(:cmd) { Class.new(VMC::CLI).new }
|
5
|
+
let(:cli) { VMC::CLI.new }
|
5
6
|
|
6
7
|
describe '#execute' do
|
7
8
|
let(:inputs) { {} }
|
8
9
|
|
9
10
|
subject do
|
10
|
-
|
11
|
+
capture_output do
|
11
12
|
stub(cmd).input { inputs }
|
12
13
|
cmd.execute(nil, [])
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
17
|
it 'wraps Timeout::Error with a more friendly message' do
|
17
|
-
stub(cmd).precondition { raise CFoundry::Timeout.new(
|
18
|
+
stub(cmd).precondition { raise CFoundry::Timeout.new("GET", "/foo") }
|
18
19
|
|
19
20
|
mock(cmd).err 'GET /foo timed out'
|
20
21
|
subject
|
@@ -42,7 +43,7 @@ describe VMC::CLI do
|
|
42
43
|
describe '#log_error' do
|
43
44
|
subject do
|
44
45
|
cmd.log_error(exception)
|
45
|
-
File.read(VMC::CRASH_FILE)
|
46
|
+
File.read(File.expand_path(VMC::CRASH_FILE))
|
46
47
|
end
|
47
48
|
|
48
49
|
context 'when the exception is a normal error' do
|
@@ -60,10 +61,10 @@ describe VMC::CLI do
|
|
60
61
|
end
|
61
62
|
|
62
63
|
context 'when the exception is an APIError' do
|
63
|
-
let(:request) {
|
64
|
-
let(:response) {
|
64
|
+
let(:request) { { :method => "GET", :url => "http://api.cloudfoundry.com/foo", :headers => {}, :body => nil } }
|
65
|
+
let(:response) { { :status => 404, :body => "bar", :headers => {} } }
|
65
66
|
let(:exception) do
|
66
|
-
error = CFoundry::APIError.new(request, response)
|
67
|
+
error = CFoundry::APIError.new(nil, nil, request, response)
|
67
68
|
error.set_backtrace(["fo/gems/bar", "baz quick"])
|
68
69
|
error
|
69
70
|
end
|
@@ -76,5 +77,162 @@ describe VMC::CLI do
|
|
76
77
|
it { should include "RESPONSE: " }
|
77
78
|
end
|
78
79
|
end
|
80
|
+
|
81
|
+
describe "#client_target" do
|
82
|
+
subject { cli.client_target }
|
83
|
+
|
84
|
+
context "when a ~/.vmc/target exists" do
|
85
|
+
use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
|
86
|
+
|
87
|
+
it "returns the target in that file" do
|
88
|
+
expect(subject).to eq "https://api.some-domain.com"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "when a ~/.vmc_target exists" do
|
93
|
+
use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/old" }
|
94
|
+
|
95
|
+
it "returns the target in that file" do
|
96
|
+
expect(subject).to eq "https://api.some-domain.com"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "when no target file exists" do
|
101
|
+
use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/no_config" }
|
102
|
+
|
103
|
+
it "displays an error to the user" do
|
104
|
+
expect{ subject }.to raise_error(VMC::UserError, /Please select a target/)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "#targets_info" do
|
110
|
+
subject { cli.targets_info }
|
111
|
+
|
112
|
+
context "when a ~/.vmc/tokens.yml exists" do
|
113
|
+
use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
|
114
|
+
|
115
|
+
it "returns the file's contents as a hash" do
|
116
|
+
expect(subject).to eq({
|
117
|
+
"https://api.some-domain.com" => {
|
118
|
+
:token => "bearer some-token",
|
119
|
+
:version => 2
|
120
|
+
}
|
121
|
+
})
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context "when a ~/.vmc_token file exists" do
|
126
|
+
use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/old" }
|
127
|
+
|
128
|
+
it "returns the target in that file" do
|
129
|
+
expect(subject).to eq({
|
130
|
+
"https://api.some-domain.com" => {
|
131
|
+
:token => "bearer some-token"
|
132
|
+
}
|
133
|
+
})
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
context "when no token file exists" do
|
138
|
+
use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/no_config" }
|
139
|
+
|
140
|
+
it "returns an empty hash" do
|
141
|
+
expect(subject).to eq({})
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe "#target_info" do
|
147
|
+
subject { VMC::CLI.new.target_info("https://api.some-domain.com") }
|
148
|
+
|
149
|
+
context "when a ~/.vmc/tokens.yml exists" do
|
150
|
+
use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
|
151
|
+
|
152
|
+
it "returns the info for the given url" do
|
153
|
+
expect(subject).to eq({
|
154
|
+
:token => "bearer some-token",
|
155
|
+
:version => 2
|
156
|
+
})
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context "when a ~/.vmc_token file exists" do
|
161
|
+
use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/old" }
|
162
|
+
|
163
|
+
it "returns the info for the given url" do
|
164
|
+
expect(subject).to eq({
|
165
|
+
:token => "bearer some-token"
|
166
|
+
})
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
context "when no token file exists" do
|
171
|
+
use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/no_config" }
|
172
|
+
|
173
|
+
it "returns an empty hash" do
|
174
|
+
expect(subject).to eq({})
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
describe "methods that update the token info" do
|
180
|
+
let!(:tmpdir) { Dir.mktmpdir }
|
181
|
+
use_fake_home_dir { tmpdir }
|
182
|
+
|
183
|
+
before do
|
184
|
+
stub(cli).targets_info do
|
185
|
+
{
|
186
|
+
"https://api.some-domain.com" => { :token => "bearer token1" },
|
187
|
+
"https://api.some-other-domain.com" => { :token => "bearer token2" }
|
188
|
+
}
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
after { FileUtils.rm_rf tmpdir }
|
193
|
+
|
194
|
+
describe "#save_target_info" do
|
195
|
+
it "adds the given target info, and writes the result to ~/.vmc/tokens.yml" do
|
196
|
+
cli.save_target_info({ :token => "bearer token3" }, "https://api.some-domain.com")
|
197
|
+
YAML.load_file(File.expand_path("~/.vmc/tokens.yml")).should == {
|
198
|
+
"https://api.some-domain.com" => { :token => "bearer token3" },
|
199
|
+
"https://api.some-other-domain.com" => { :token => "bearer token2" }
|
200
|
+
}
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
describe "#remove_target_info" do
|
205
|
+
it "removes the given target, and writes the result to ~/.vmc/tokens.yml" do
|
206
|
+
cli.remove_target_info("https://api.some-domain.com")
|
207
|
+
YAML.load_file(File.expand_path("~/.vmc/tokens.yml")).should == {
|
208
|
+
"https://api.some-other-domain.com" => { :token => "bearer token2" }
|
209
|
+
}
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
describe "#client" do
|
215
|
+
use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
|
216
|
+
before { stub(cli).input { {} } }
|
217
|
+
|
218
|
+
describe "the client's token" do
|
219
|
+
it "constructs an AuthToken object with the data from the tokens.yml file" do
|
220
|
+
expect(cli.client.token).to be_a(CFoundry::AuthToken)
|
221
|
+
expect(cli.client.token.auth_header).to eq("bearer some-token")
|
222
|
+
end
|
223
|
+
|
224
|
+
it "does not assign an AuthToken on the client if there is no token stored" do
|
225
|
+
mock(cli).target_info("some-fake-target") { { :version => 2 } }
|
226
|
+
expect(cli.client("some-fake-target").token).to be_nil
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
describe "the client's version" do
|
231
|
+
it "uses the version stored in the yml file" do
|
232
|
+
|
233
|
+
expect(cli.client.version).to eq(2)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
79
237
|
end
|
80
238
|
|
metadata
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: -3788488616
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
-
|
12
|
-
version: 0.5.0.beta.
|
11
|
+
- 10
|
12
|
+
version: 0.5.0.beta.10
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
|
+
- Cloud Foundry Team
|
15
16
|
- Alex Suraci
|
16
17
|
autorequire:
|
17
18
|
bindir: bin
|
18
19
|
cert_chain: []
|
19
20
|
|
20
|
-
date: 2013-
|
21
|
+
date: 2013-02-05 00:00:00 Z
|
21
22
|
dependencies:
|
22
23
|
- !ruby/object:Gem::Dependency
|
23
24
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
@@ -71,12 +72,12 @@ dependencies:
|
|
71
72
|
requirements:
|
72
73
|
- - ~>
|
73
74
|
- !ruby/object:Gem::Version
|
74
|
-
hash:
|
75
|
+
hash: 39
|
75
76
|
segments:
|
76
77
|
- 0
|
77
78
|
- 4
|
78
|
-
-
|
79
|
-
version: 0.4.
|
79
|
+
- 20
|
80
|
+
version: 0.4.20
|
80
81
|
prerelease: false
|
81
82
|
type: :runtime
|
82
83
|
name: cfoundry
|
@@ -103,12 +104,12 @@ dependencies:
|
|
103
104
|
requirements:
|
104
105
|
- - ~>
|
105
106
|
- !ruby/object:Gem::Version
|
106
|
-
hash:
|
107
|
+
hash: 11
|
107
108
|
segments:
|
108
109
|
- 0
|
109
|
-
-
|
110
|
+
- 5
|
110
111
|
- 0
|
111
|
-
version: 0.
|
112
|
+
version: 0.5.0
|
112
113
|
prerelease: false
|
113
114
|
type: :runtime
|
114
115
|
name: mothership
|
@@ -119,12 +120,12 @@ dependencies:
|
|
119
120
|
requirements:
|
120
121
|
- - ~>
|
121
122
|
- !ruby/object:Gem::Version
|
122
|
-
hash:
|
123
|
+
hash: 11
|
123
124
|
segments:
|
124
125
|
- 0
|
125
|
-
-
|
126
|
-
-
|
127
|
-
version: 0.
|
126
|
+
- 5
|
127
|
+
- 0
|
128
|
+
version: 0.5.0
|
128
129
|
prerelease: false
|
129
130
|
type: :runtime
|
130
131
|
name: manifests-vmc-plugin
|
@@ -135,15 +136,15 @@ dependencies:
|
|
135
136
|
requirements:
|
136
137
|
- - ~>
|
137
138
|
- !ruby/object:Gem::Version
|
138
|
-
hash:
|
139
|
+
hash: 13
|
139
140
|
segments:
|
140
141
|
- 0
|
141
|
-
-
|
142
|
-
-
|
143
|
-
version: 0.
|
142
|
+
- 1
|
143
|
+
- 11
|
144
|
+
version: 0.1.11
|
144
145
|
prerelease: false
|
145
146
|
type: :runtime
|
146
|
-
name: tunnel-
|
147
|
+
name: tunnel-vmc-plugin
|
147
148
|
requirement: *id008
|
148
149
|
- !ruby/object:Gem::Dependency
|
149
150
|
version_requirements: &id009 !ruby/object:Gem::Requirement
|
@@ -207,7 +208,7 @@ dependencies:
|
|
207
208
|
requirement: *id012
|
208
209
|
description:
|
209
210
|
email:
|
210
|
-
-
|
211
|
+
- vcap-dev@googlegroups.com
|
211
212
|
executables:
|
212
213
|
- vmc
|
213
214
|
extensions: []
|
@@ -234,17 +235,14 @@ files:
|
|
234
235
|
- lib/vmc/cli/app/push.rb
|
235
236
|
- lib/vmc/cli/app/rename.rb
|
236
237
|
- lib/vmc/cli/app/restart.rb
|
237
|
-
- lib/vmc/cli/app/routes.rb
|
238
238
|
- lib/vmc/cli/app/scale.rb
|
239
239
|
- lib/vmc/cli/app/start.rb
|
240
240
|
- lib/vmc/cli/app/stats.rb
|
241
241
|
- lib/vmc/cli/app/stop.rb
|
242
|
-
- lib/vmc/cli/domain/add_domain.rb
|
243
242
|
- lib/vmc/cli/domain/base.rb
|
244
|
-
- lib/vmc/cli/domain/create_domain.rb
|
245
|
-
- lib/vmc/cli/domain/delete_domain.rb
|
246
243
|
- lib/vmc/cli/domain/domains.rb
|
247
|
-
- lib/vmc/cli/domain/
|
244
|
+
- lib/vmc/cli/domain/map.rb
|
245
|
+
- lib/vmc/cli/domain/unmap.rb
|
248
246
|
- lib/vmc/cli/help.rb
|
249
247
|
- lib/vmc/cli/interactive.rb
|
250
248
|
- lib/vmc/cli/organization/base.rb
|
@@ -254,9 +252,9 @@ files:
|
|
254
252
|
- lib/vmc/cli/organization/orgs.rb
|
255
253
|
- lib/vmc/cli/organization/rename.rb
|
256
254
|
- lib/vmc/cli/route/base.rb
|
257
|
-
- lib/vmc/cli/route/
|
258
|
-
- lib/vmc/cli/route/delete.rb
|
255
|
+
- lib/vmc/cli/route/map.rb
|
259
256
|
- lib/vmc/cli/route/routes.rb
|
257
|
+
- lib/vmc/cli/route/unmap.rb
|
260
258
|
- lib/vmc/cli/service/base.rb
|
261
259
|
- lib/vmc/cli/service/bind.rb
|
262
260
|
- lib/vmc/cli/service/create.rb
|
@@ -277,7 +275,6 @@ files:
|
|
277
275
|
- lib/vmc/cli/start/info.rb
|
278
276
|
- lib/vmc/cli/start/login.rb
|
279
277
|
- lib/vmc/cli/start/logout.rb
|
280
|
-
- lib/vmc/cli/start/register.rb
|
281
278
|
- lib/vmc/cli/start/target.rb
|
282
279
|
- lib/vmc/cli/start/target_interactions.rb
|
283
280
|
- lib/vmc/cli/start/targets.rb
|
@@ -285,6 +282,7 @@ files:
|
|
285
282
|
- lib/vmc/cli/user/create.rb
|
286
283
|
- lib/vmc/cli/user/delete.rb
|
287
284
|
- lib/vmc/cli/user/passwd.rb
|
285
|
+
- lib/vmc/cli/user/register.rb
|
288
286
|
- lib/vmc/cli/user/users.rb
|
289
287
|
- lib/vmc/cli.rb
|
290
288
|
- lib/vmc/constants.rb
|
@@ -293,25 +291,31 @@ files:
|
|
293
291
|
- lib/vmc/plugin.rb
|
294
292
|
- lib/vmc/spacing.rb
|
295
293
|
- lib/vmc/spec_helper.rb
|
294
|
+
- lib/vmc/test_support/command_helper.rb
|
295
|
+
- lib/vmc/test_support/common_input_examples.rb
|
296
|
+
- lib/vmc/test_support/fake_home_dir.rb
|
297
|
+
- lib/vmc/test_support/interact_helper.rb
|
298
|
+
- lib/vmc/test_support.rb
|
296
299
|
- lib/vmc/version.rb
|
297
300
|
- lib/vmc.rb
|
298
301
|
- spec/assets/hello-sinatra/Gemfile
|
299
302
|
- spec/assets/hello-sinatra/main.rb
|
300
303
|
- spec/features/new_user_flow_spec.rb
|
301
304
|
- spec/spec_helper.rb
|
302
|
-
- spec/support/common_input_examples.rb
|
303
|
-
- spec/support/feature_helpers.rb
|
304
|
-
- spec/support/interact_helpers.rb
|
305
305
|
- spec/vmc/cli/app/base_spec.rb
|
306
306
|
- spec/vmc/cli/app/delete_spec.rb
|
307
307
|
- spec/vmc/cli/app/instances_spec.rb
|
308
308
|
- spec/vmc/cli/app/push/create_spec.rb
|
309
309
|
- spec/vmc/cli/app/push_spec.rb
|
310
310
|
- spec/vmc/cli/app/rename_spec.rb
|
311
|
+
- spec/vmc/cli/app/scale_spec.rb
|
311
312
|
- spec/vmc/cli/app/stats_spec.rb
|
313
|
+
- spec/vmc/cli/domain/map_spec.rb
|
314
|
+
- spec/vmc/cli/domain/unmap_spec.rb
|
312
315
|
- spec/vmc/cli/organization/orgs_spec.rb
|
313
316
|
- spec/vmc/cli/organization/rename_spec.rb
|
314
|
-
- spec/vmc/cli/route/
|
317
|
+
- spec/vmc/cli/route/map_spec.rb
|
318
|
+
- spec/vmc/cli/route/unmap_spec.rb
|
315
319
|
- spec/vmc/cli/service/bind_spec.rb
|
316
320
|
- spec/vmc/cli/service/delete_spec.rb
|
317
321
|
- spec/vmc/cli/service/rename_spec.rb
|
@@ -321,12 +325,13 @@ files:
|
|
321
325
|
- spec/vmc/cli/space/spaces_spec.rb
|
322
326
|
- spec/vmc/cli/start/info_spec.rb
|
323
327
|
- spec/vmc/cli/start/login_spec.rb
|
324
|
-
- spec/vmc/cli/
|
328
|
+
- spec/vmc/cli/user/create_spec.rb
|
325
329
|
- spec/vmc/cli/user/passwd_spec.rb
|
330
|
+
- spec/vmc/cli/user/register_spec.rb
|
326
331
|
- spec/vmc/cli_spec.rb
|
327
332
|
- spec/vmc/detect_spec.rb
|
328
333
|
- bin/vmc
|
329
|
-
homepage: http://
|
334
|
+
homepage: http://github.com/cloudfoundry/vmc
|
330
335
|
licenses: []
|
331
336
|
|
332
337
|
post_install_message:
|
@@ -366,19 +371,20 @@ test_files:
|
|
366
371
|
- spec/assets/hello-sinatra/main.rb
|
367
372
|
- spec/features/new_user_flow_spec.rb
|
368
373
|
- spec/spec_helper.rb
|
369
|
-
- spec/support/common_input_examples.rb
|
370
|
-
- spec/support/feature_helpers.rb
|
371
|
-
- spec/support/interact_helpers.rb
|
372
374
|
- spec/vmc/cli/app/base_spec.rb
|
373
375
|
- spec/vmc/cli/app/delete_spec.rb
|
374
376
|
- spec/vmc/cli/app/instances_spec.rb
|
375
377
|
- spec/vmc/cli/app/push/create_spec.rb
|
376
378
|
- spec/vmc/cli/app/push_spec.rb
|
377
379
|
- spec/vmc/cli/app/rename_spec.rb
|
380
|
+
- spec/vmc/cli/app/scale_spec.rb
|
378
381
|
- spec/vmc/cli/app/stats_spec.rb
|
382
|
+
- spec/vmc/cli/domain/map_spec.rb
|
383
|
+
- spec/vmc/cli/domain/unmap_spec.rb
|
379
384
|
- spec/vmc/cli/organization/orgs_spec.rb
|
380
385
|
- spec/vmc/cli/organization/rename_spec.rb
|
381
|
-
- spec/vmc/cli/route/
|
386
|
+
- spec/vmc/cli/route/map_spec.rb
|
387
|
+
- spec/vmc/cli/route/unmap_spec.rb
|
382
388
|
- spec/vmc/cli/service/bind_spec.rb
|
383
389
|
- spec/vmc/cli/service/delete_spec.rb
|
384
390
|
- spec/vmc/cli/service/rename_spec.rb
|
@@ -388,7 +394,8 @@ test_files:
|
|
388
394
|
- spec/vmc/cli/space/spaces_spec.rb
|
389
395
|
- spec/vmc/cli/start/info_spec.rb
|
390
396
|
- spec/vmc/cli/start/login_spec.rb
|
391
|
-
- spec/vmc/cli/
|
397
|
+
- spec/vmc/cli/user/create_spec.rb
|
392
398
|
- spec/vmc/cli/user/passwd_spec.rb
|
399
|
+
- spec/vmc/cli/user/register_spec.rb
|
393
400
|
- spec/vmc/cli_spec.rb
|
394
401
|
- spec/vmc/detect_spec.rb
|
data/lib/vmc/cli/app/routes.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
require "vmc/cli/app/base"
|
2
|
-
|
3
|
-
# TODO: split up, as the URL interaction will differ (see other TODO)
|
4
|
-
module VMC::App
|
5
|
-
class Routes < Base
|
6
|
-
desc "Add a URL mapping for an app"
|
7
|
-
group :apps, :info, :hidden => true
|
8
|
-
input :app, :desc => "Application to add the URL to", :argument => true,
|
9
|
-
:from_given => by_name(:app)
|
10
|
-
input :url, :desc => "URL to map to the application", :argument => true
|
11
|
-
# TODO: move push's URL interaction here, and have it just invoke
|
12
|
-
def map
|
13
|
-
app = input[:app]
|
14
|
-
|
15
|
-
simple = input[:url].sub(/^https?:\/\/(.*)\/?/i, '\1')
|
16
|
-
|
17
|
-
if v2?
|
18
|
-
host, domain_name = simple.split(".", 2)
|
19
|
-
|
20
|
-
domain =
|
21
|
-
client.current_space.domain_by_name(domain_name, :depth => 0)
|
22
|
-
|
23
|
-
fail "Invalid domain '#{domain_name}'" unless domain
|
24
|
-
|
25
|
-
route = client.routes_by_host(host, :depth => 0).find do |r|
|
26
|
-
r.domain == domain
|
27
|
-
end
|
28
|
-
|
29
|
-
unless route
|
30
|
-
route = client.route
|
31
|
-
|
32
|
-
with_progress("Creating route #{c(simple, :name)}") do
|
33
|
-
route.host = host
|
34
|
-
route.domain = domain
|
35
|
-
route.space = app.space
|
36
|
-
route.create!
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
with_progress("Binding #{c(simple, :name)} to #{c(app.name, :name)}") do
|
41
|
-
app.add_route(route)
|
42
|
-
end
|
43
|
-
else
|
44
|
-
with_progress("Updating #{c(app.name, :name)}") do
|
45
|
-
app.urls << simple
|
46
|
-
app.update!
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
|
52
|
-
desc "Remove a URL mapping from an app"
|
53
|
-
group :apps, :info, :hidden => true
|
54
|
-
input :app, :desc => "Application to remove the URL from",
|
55
|
-
:argument => true, :from_given => by_name(:app)
|
56
|
-
input :url, :desc => "URL to unmap", :argument => :optional
|
57
|
-
def unmap
|
58
|
-
app = input[:app]
|
59
|
-
url = input[:url, app.urls]
|
60
|
-
|
61
|
-
simple = url.sub(/^https?:\/\/(.*)\/?/i, '\1')
|
62
|
-
|
63
|
-
if v2?
|
64
|
-
host, domain_name = simple.split(".", 2)
|
65
|
-
|
66
|
-
domain =
|
67
|
-
client.current_space.domain_by_name(domain_name, :depth => 0)
|
68
|
-
|
69
|
-
fail "Invalid domain '#{domain_name}'" unless domain
|
70
|
-
|
71
|
-
route = app.routes_by_host(host, :depth => 0).find do |r|
|
72
|
-
r.domain == domain
|
73
|
-
end
|
74
|
-
|
75
|
-
fail "Invalid route '#{simple}'" unless route
|
76
|
-
|
77
|
-
with_progress("Removing route #{c(simple, :name)}") do
|
78
|
-
app.remove_route(route)
|
79
|
-
end
|
80
|
-
else
|
81
|
-
with_progress("Updating #{c(app.name, :name)}") do |s|
|
82
|
-
unless app.urls.delete(simple)
|
83
|
-
s.fail do
|
84
|
-
err "URL #{url} is not mapped to this application."
|
85
|
-
return
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
app.update!
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
private
|
95
|
-
|
96
|
-
def ask_url(choices)
|
97
|
-
ask("Which URL?", :choices => choices)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|