udn 0.3.23.0.pre → 0.3.23.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +14 -12
- data/lib/cli/commands/apps.rb +3 -3
- data/lib/cli/commands/misc.rb +1 -1
- data/lib/cli/commands/services.rb +25 -25
- data/lib/cli/config.rb +1 -1
- data/lib/cli/runner.rb +51 -53
- data/lib/cli/services_helper.rb +12 -4
- data/lib/cli/usage.rb +5 -6
- data/lib/cli/version.rb +1 -1
- data/lib/vmc/client.rb +36 -51
- data/lib/vmc/const.rb +1 -1
- data/lib/vmc/micro/switcher/base.rb +1 -1
- metadata +5 -5
data/README.md
CHANGED
@@ -1,14 +1,21 @@
|
|
1
|
-
#
|
1
|
+
# UDN
|
2
2
|
|
3
|
-
|
3
|
+
UDN is the command line interface to Cloudn PaaS.
|
4
|
+
This command is based on vmc.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
$ sudo gem install udn
|
9
|
+
|
10
|
+
## Usage
|
4
11
|
|
5
12
|
_Copyright 2010-2012, VMware, Inc. Licensed under the
|
6
13
|
MIT license, please see the LICENSE file. All rights reserved._
|
7
14
|
|
8
|
-
Usage:
|
9
|
-
Try '
|
15
|
+
Usage: udn [options] command [<args>] [command_options]
|
16
|
+
Try 'udn help [command]' or 'udn help options' for more information.
|
10
17
|
|
11
|
-
Currently available
|
18
|
+
Currently available udn commands are:
|
12
19
|
|
13
20
|
Getting Started
|
14
21
|
target [url] Reports current target or sets a new target
|
@@ -103,11 +110,6 @@ MIT license, please see the LICENSE file. All rights reserved._
|
|
103
110
|
|
104
111
|
## Simple Story (for Ruby apps)
|
105
112
|
|
106
|
-
|
107
|
-
vmc login
|
113
|
+
udn login
|
108
114
|
bundle package
|
109
|
-
|
110
|
-
|
111
|
-
## File a Bug
|
112
|
-
|
113
|
-
To file a bug against Cloud Foundry Open Source and its components, sign up and use our bug tracking system: [http://cloudfoundry.atlassian.net](http://cloudfoundry.atlassian.net)
|
115
|
+
udn push
|
data/lib/cli/commands/apps.rb
CHANGED
@@ -49,7 +49,7 @@ module VMC::Cli::Command
|
|
49
49
|
|
50
50
|
def console(appname, interactive=true)
|
51
51
|
unless defined? Caldecott
|
52
|
-
display "To use `
|
52
|
+
display "To use `udn rails-console', you must first install Caldecott:"
|
53
53
|
display ""
|
54
54
|
display "\tgem install caldecott"
|
55
55
|
display ""
|
@@ -356,7 +356,7 @@ module VMC::Cli::Command
|
|
356
356
|
display 'OK'.green
|
357
357
|
restart appname if app[:state] == 'STARTED'
|
358
358
|
else
|
359
|
-
display '
|
359
|
+
display "Can't find specific environments: #{variable}".red
|
360
360
|
end
|
361
361
|
end
|
362
362
|
|
@@ -816,7 +816,7 @@ module VMC::Cli::Command
|
|
816
816
|
display "\nApplication '#{appname}' cannot start in '#{@options[:debug]}' mode"
|
817
817
|
|
818
818
|
if push
|
819
|
-
display "Try '
|
819
|
+
display "Try 'udn start' with one of the following modes: #{modes.inspect}"
|
820
820
|
else
|
821
821
|
display "Available modes: #{modes.inspect}"
|
822
822
|
end
|
data/lib/cli/commands/misc.rb
CHANGED
@@ -6,8 +6,11 @@ module VMC::Cli::Command
|
|
6
6
|
include VMC::Cli::ServicesHelper
|
7
7
|
include VMC::Cli::TunnelHelper
|
8
8
|
|
9
|
+
CLOUDN_RDB = "cloudn_rdb"
|
10
|
+
|
9
11
|
def services
|
10
12
|
ss = client.services_info
|
13
|
+
css = client.cloudn_services_info
|
11
14
|
ps = client.services
|
12
15
|
ps.sort! {|a, b| a[:name] <=> b[:name] }
|
13
16
|
|
@@ -16,6 +19,7 @@ module VMC::Cli::Command
|
|
16
19
|
return display JSON.pretty_generate(services)
|
17
20
|
end
|
18
21
|
display_system_services(ss)
|
22
|
+
display_cloudn_services(css)
|
19
23
|
display_provisioned_services(ps)
|
20
24
|
end
|
21
25
|
|
@@ -98,7 +102,7 @@ module VMC::Cli::Command
|
|
98
102
|
|
99
103
|
def tunnel(service=nil, client_name=nil)
|
100
104
|
unless defined? Caldecott
|
101
|
-
display "To use `
|
105
|
+
display "To use `udn tunnel', you must first install Caldecott:"
|
102
106
|
display ""
|
103
107
|
display "\tgem install caldecott"
|
104
108
|
display ""
|
@@ -179,36 +183,32 @@ module VMC::Cli::Command
|
|
179
183
|
else
|
180
184
|
wait_for_tunnel_start(port)
|
181
185
|
unless start_local_prog(clients, client_name, conn_info, port)
|
182
|
-
err
|
186
|
+
err '\'#{client_name}\' execution failed; is it in your PATH?'
|
183
187
|
end
|
184
188
|
end
|
185
189
|
end
|
186
190
|
|
187
|
-
def register_service(service=nil,
|
191
|
+
def register_service(service=nil, service_instance=nil)
|
188
192
|
service = ask_service unless service
|
189
|
-
|
190
|
-
|
191
|
-
name = @options[:name] unless name
|
192
|
-
unless name
|
193
|
-
name = random_service_name(service)
|
194
|
-
picked_name = true
|
195
|
-
end
|
193
|
+
service_instance = ask_service_instance(service) unless service_instance
|
196
194
|
|
197
195
|
options = {}
|
198
|
-
if service ==
|
199
|
-
options = ask_cloudn_rdb(
|
196
|
+
if service == CLOUDN_RDB
|
197
|
+
options = ask_cloudn_rdb(service_instance, options)
|
200
198
|
end
|
201
199
|
|
202
|
-
|
200
|
+
name = "#{service_instance}-#{options[:database]}"
|
201
|
+
|
202
|
+
register_service_banner(service, service_instance, name, options)
|
203
203
|
end
|
204
204
|
|
205
205
|
def ask_service
|
206
|
-
services = client.
|
207
|
-
err 'No
|
206
|
+
services = client.cloudn_services_info
|
207
|
+
err 'No cloudn services available to register' if services.empty?
|
208
208
|
service = ask(
|
209
209
|
"Which service would you like to register?",
|
210
210
|
{ :indexed => true,
|
211
|
-
:choices =>
|
211
|
+
:choices =>
|
212
212
|
services.values.collect { |type|
|
213
213
|
type.keys.collect(&:to_s)
|
214
214
|
}.flatten
|
@@ -216,29 +216,29 @@ module VMC::Cli::Command
|
|
216
216
|
)
|
217
217
|
end
|
218
218
|
|
219
|
-
def
|
220
|
-
|
219
|
+
def ask_service_instance(service)
|
220
|
+
service_instances = client.cloudn_service_instances(service).collect {|item|
|
221
221
|
item[:name]
|
222
222
|
}
|
223
|
-
err "No instance in your #{service}" if
|
223
|
+
err "No instance in your #{service}" if service_instances.empty?
|
224
224
|
|
225
|
-
|
225
|
+
service_instance = ask(
|
226
226
|
"Which instance would you like to register?",
|
227
227
|
{ :indexed => true,
|
228
|
-
:choices =>
|
228
|
+
:choices => service_instances
|
229
229
|
}
|
230
230
|
)
|
231
231
|
end
|
232
232
|
|
233
|
-
def ask_cloudn_rdb(
|
233
|
+
def ask_cloudn_rdb(service_instance, options)
|
234
234
|
options[:credentials] = {}
|
235
235
|
options[:credentials][:MasterUsername] = @options[:MasterUsername] || ask("Master Username")
|
236
|
-
options[:credentials][:MasterUserPassword] = @options[:MasterUserPassword] || ask("Master Password")
|
236
|
+
options[:credentials][:MasterUserPassword] = @options[:MasterUserPassword] || ask("Master Password", :echo => "*")
|
237
237
|
|
238
|
-
databases = client.rdb_databases(
|
238
|
+
databases = client.rdb_databases(CLOUDN_RDB, service_instance, options[:credentials])
|
239
239
|
err "No database in your Cloudn RDB instance" unless databases[:properties][:databases][:unregistered]
|
240
240
|
if @options[:DBName]
|
241
|
-
err "No such unregistered database in your Cloudn RDB instance" unless
|
241
|
+
err "No such unregistered database in your Cloudn RDB instance" unless databases[:properties][:databases][:unregistered].include?(@options[:DBName])
|
242
242
|
options[:database] = @options[:DBName]
|
243
243
|
else
|
244
244
|
options[:database] = ask(
|
data/lib/cli/config.rb
CHANGED
data/lib/cli/runner.rb
CHANGED
@@ -168,11 +168,11 @@ class VMC::Cli::Runner
|
|
168
168
|
case verb
|
169
169
|
|
170
170
|
when 'version'
|
171
|
-
usage('
|
171
|
+
usage('udn version')
|
172
172
|
set_cmd(:misc, :version)
|
173
173
|
|
174
174
|
when 'target'
|
175
|
-
usage('
|
175
|
+
usage('udn target [url] [--url]')
|
176
176
|
if @args.size == 1
|
177
177
|
set_cmd(:misc, :set_target, 1)
|
178
178
|
else
|
@@ -180,31 +180,31 @@ class VMC::Cli::Runner
|
|
180
180
|
end
|
181
181
|
|
182
182
|
when 'targets'
|
183
|
-
usage('
|
183
|
+
usage('udn targets')
|
184
184
|
set_cmd(:misc, :targets)
|
185
185
|
|
186
186
|
when 'tokens'
|
187
|
-
usage('
|
187
|
+
usage('udn tokens')
|
188
188
|
set_cmd(:misc, :tokens)
|
189
189
|
|
190
190
|
when 'info'
|
191
|
-
usage('
|
191
|
+
usage('udn info')
|
192
192
|
set_cmd(:misc, :info)
|
193
193
|
|
194
194
|
when 'runtimes'
|
195
|
-
usage('
|
195
|
+
usage('udn runtimes')
|
196
196
|
set_cmd(:misc, :runtimes)
|
197
197
|
|
198
198
|
when 'frameworks'
|
199
|
-
usage('
|
199
|
+
usage('udn frameworks')
|
200
200
|
set_cmd(:misc, :frameworks)
|
201
201
|
|
202
202
|
when 'user'
|
203
|
-
usage('
|
203
|
+
usage('udn user')
|
204
204
|
set_cmd(:user, :info)
|
205
205
|
|
206
206
|
when 'login'
|
207
|
-
usage('
|
207
|
+
usage('udn login [email] [--email EMAIL] [--passwd PASS]')
|
208
208
|
if @args.size == 1
|
209
209
|
set_cmd(:user, :login, 1)
|
210
210
|
else
|
@@ -212,11 +212,11 @@ class VMC::Cli::Runner
|
|
212
212
|
end
|
213
213
|
|
214
214
|
when 'logout'
|
215
|
-
usage('
|
215
|
+
usage('udn logout')
|
216
216
|
set_cmd(:user, :logout)
|
217
217
|
|
218
218
|
when 'passwd'
|
219
|
-
usage('
|
219
|
+
usage('udn passwd')
|
220
220
|
if @args.size == 1
|
221
221
|
set_cmd(:user, :change_password, 1)
|
222
222
|
else
|
@@ -224,7 +224,7 @@ class VMC::Cli::Runner
|
|
224
224
|
end
|
225
225
|
|
226
226
|
when 'add-user', 'add_user', 'create_user', 'create-user', 'register'
|
227
|
-
usage('
|
227
|
+
usage('udn add-user [user] [--email EMAIL] [--passwd PASS]')
|
228
228
|
if @args.size == 1
|
229
229
|
set_cmd(:admin, :add_user, 1)
|
230
230
|
else
|
@@ -232,35 +232,35 @@ class VMC::Cli::Runner
|
|
232
232
|
end
|
233
233
|
|
234
234
|
when 'delete-user', 'delete_user', 'unregister'
|
235
|
-
usage('
|
235
|
+
usage('udn delete-user <user>')
|
236
236
|
set_cmd(:admin, :delete_user, 1)
|
237
237
|
|
238
238
|
when 'users'
|
239
|
-
usage('
|
239
|
+
usage('udn users')
|
240
240
|
set_cmd(:admin, :users)
|
241
241
|
|
242
242
|
when 'apps'
|
243
|
-
usage('
|
243
|
+
usage('udn apps')
|
244
244
|
set_cmd(:apps, :apps)
|
245
245
|
|
246
246
|
when 'list'
|
247
|
-
usage('
|
247
|
+
usage('udn list')
|
248
248
|
set_cmd(:apps, :list)
|
249
249
|
|
250
250
|
when 'start'
|
251
|
-
usage('
|
251
|
+
usage('udn start <appname>')
|
252
252
|
set_cmd(:apps, :start, @args.size == 1 ? 1 : 0)
|
253
253
|
|
254
254
|
when 'stop'
|
255
|
-
usage('
|
255
|
+
usage('udn stop <appname>')
|
256
256
|
set_cmd(:apps, :stop, @args.size == 1 ? 1 : 0)
|
257
257
|
|
258
258
|
when 'restart'
|
259
|
-
usage('
|
259
|
+
usage('udn restart <appname>')
|
260
260
|
set_cmd(:apps, :restart, @args.size == 1 ? 1 : 0)
|
261
261
|
|
262
262
|
when 'mem'
|
263
|
-
usage('
|
263
|
+
usage('udn mem <appname> [memsize]')
|
264
264
|
if @args.size == 2
|
265
265
|
set_cmd(:apps, :mem, 2)
|
266
266
|
else
|
@@ -268,19 +268,19 @@ class VMC::Cli::Runner
|
|
268
268
|
end
|
269
269
|
|
270
270
|
when 'stats'
|
271
|
-
usage('
|
271
|
+
usage('udn stats <appname>')
|
272
272
|
set_cmd(:apps, :stats, @args.size == 1 ? 1 : 0)
|
273
273
|
|
274
274
|
when 'map'
|
275
|
-
usage('
|
275
|
+
usage('udn map <appname> <url>')
|
276
276
|
set_cmd(:apps, :map, 2)
|
277
277
|
|
278
278
|
when 'unmap'
|
279
|
-
usage('
|
279
|
+
usage('udn unmap <appname> <url>')
|
280
280
|
set_cmd(:apps, :unmap, 2)
|
281
281
|
|
282
282
|
when 'delete'
|
283
|
-
usage('
|
283
|
+
usage('udn delete <appname>')
|
284
284
|
if @options[:all] && @args.size == 0
|
285
285
|
set_cmd(:apps, :delete)
|
286
286
|
else
|
@@ -288,7 +288,7 @@ class VMC::Cli::Runner
|
|
288
288
|
end
|
289
289
|
|
290
290
|
when 'files'
|
291
|
-
usage('
|
291
|
+
usage('udn files <appname> [path] [--instance N] [--all] [--prefix]')
|
292
292
|
if @args.size == 1
|
293
293
|
set_cmd(:apps, :files, 1)
|
294
294
|
else
|
@@ -296,28 +296,28 @@ class VMC::Cli::Runner
|
|
296
296
|
end
|
297
297
|
|
298
298
|
when 'logs'
|
299
|
-
usage('
|
299
|
+
usage('udn logs <appname> [--instance N] [--all] [--prefix]')
|
300
300
|
set_cmd(:apps, :logs, 1)
|
301
301
|
|
302
302
|
when 'instances', 'scale'
|
303
303
|
if @args.size > 1
|
304
|
-
usage('
|
304
|
+
usage('udn instances <appname> <num|delta>')
|
305
305
|
set_cmd(:apps, :instances, 2)
|
306
306
|
else
|
307
|
-
usage('
|
307
|
+
usage('udn instances <appname>')
|
308
308
|
set_cmd(:apps, :instances, 1)
|
309
309
|
end
|
310
310
|
|
311
311
|
when 'crashes'
|
312
|
-
usage('
|
312
|
+
usage('udn crashes <appname>')
|
313
313
|
set_cmd(:apps, :crashes, 1)
|
314
314
|
|
315
315
|
when 'crashlogs'
|
316
|
-
usage('
|
316
|
+
usage('udn crashlogs <appname>')
|
317
317
|
set_cmd(:apps, :crashlogs, 1)
|
318
318
|
|
319
319
|
when 'push'
|
320
|
-
usage('
|
320
|
+
usage('udn push [appname] [--path PATH] [--url URL] [--instances N] [--mem] [--runtime RUNTIME] [--no-start]')
|
321
321
|
if @args.size == 1
|
322
322
|
set_cmd(:apps, :push, 1)
|
323
323
|
else
|
@@ -325,19 +325,19 @@ class VMC::Cli::Runner
|
|
325
325
|
end
|
326
326
|
|
327
327
|
when 'update'
|
328
|
-
usage('
|
328
|
+
usage('udn update <appname> [--path PATH]')
|
329
329
|
set_cmd(:apps, :update, @args.size == 1 ? 1 : 0)
|
330
330
|
|
331
331
|
when 'services'
|
332
|
-
usage('
|
332
|
+
usage('udn services')
|
333
333
|
set_cmd(:services, :services)
|
334
334
|
|
335
335
|
when 'env'
|
336
|
-
usage('
|
336
|
+
usage('udn env <appname>')
|
337
337
|
set_cmd(:apps, :environment, 1)
|
338
338
|
|
339
339
|
when 'env-add'
|
340
|
-
usage('
|
340
|
+
usage('udn env-add <appname> <variable[=]value>')
|
341
341
|
if @args.size == 2
|
342
342
|
set_cmd(:apps, :environment_add, 2)
|
343
343
|
elsif @args.size == 3
|
@@ -345,11 +345,11 @@ class VMC::Cli::Runner
|
|
345
345
|
end
|
346
346
|
|
347
347
|
when 'env-del'
|
348
|
-
usage('
|
348
|
+
usage('udn env-del <appname> <variable>')
|
349
349
|
set_cmd(:apps, :environment_del, 2)
|
350
350
|
|
351
351
|
when 'create-service', 'create_service'
|
352
|
-
usage('
|
352
|
+
usage('udn create-service [service] [servicename] [plan] [appname] [--name servicename] [--bind appname] [--plan plan]')
|
353
353
|
set_cmd(:services, :create_service) if @args.size == 0
|
354
354
|
set_cmd(:services, :create_service, 1) if @args.size == 1
|
355
355
|
set_cmd(:services, :create_service, 2) if @args.size == 2
|
@@ -357,15 +357,13 @@ class VMC::Cli::Runner
|
|
357
357
|
set_cmd(:services, :create_service, 4) if @args.size == 4
|
358
358
|
|
359
359
|
when 'register-service', 'register_service'
|
360
|
-
usage('
|
360
|
+
usage( 'register-service [type] [instanceid] [--MasterUsername masterusername] [--MasterUserPassword masteruserpassword] [--DBName DBName]')
|
361
361
|
set_cmd(:services, :register_service) if @args.size == 0
|
362
362
|
set_cmd(:services, :register_service, 1) if @args.size == 1
|
363
363
|
set_cmd(:services, :register_service, 2) if @args.size == 2
|
364
|
-
set_cmd(:services, :register_service, 3) if @args.size == 3
|
365
|
-
set_cmd(:services, :register_service, 4) if @args.size == 4
|
366
364
|
|
367
365
|
when 'delete-service', 'delete_service'
|
368
|
-
usage('
|
366
|
+
usage('udn delete-service <service>')
|
369
367
|
if @args.size == 1
|
370
368
|
set_cmd(:services, :delete_service, 1)
|
371
369
|
else
|
@@ -373,23 +371,23 @@ class VMC::Cli::Runner
|
|
373
371
|
end
|
374
372
|
|
375
373
|
when 'bind-service', 'bind_service'
|
376
|
-
usage('
|
374
|
+
usage('udn bind-service <servicename> <appname>')
|
377
375
|
set_cmd(:services, :bind_service, 2)
|
378
376
|
|
379
377
|
when 'unbind-service', 'unbind_service'
|
380
|
-
usage('
|
378
|
+
usage('udn unbind-service <servicename> <appname>')
|
381
379
|
set_cmd(:services, :unbind_service, 2)
|
382
380
|
|
383
381
|
when 'clone-services'
|
384
|
-
usage('
|
382
|
+
usage('udn clone-services <src-app> <dest-app>')
|
385
383
|
set_cmd(:services, :clone_services, 2)
|
386
384
|
|
387
385
|
when 'aliases'
|
388
|
-
usage('
|
386
|
+
usage('udn aliases')
|
389
387
|
set_cmd(:misc, :aliases)
|
390
388
|
|
391
389
|
when 'alias'
|
392
|
-
usage('
|
390
|
+
usage('udn alias <alias[=]command>')
|
393
391
|
if @args.size == 1
|
394
392
|
set_cmd(:misc, :alias, 1)
|
395
393
|
elsif @args.size == 2
|
@@ -397,21 +395,21 @@ class VMC::Cli::Runner
|
|
397
395
|
end
|
398
396
|
|
399
397
|
when 'unalias'
|
400
|
-
usage('
|
398
|
+
usage('udn unalias <alias>')
|
401
399
|
set_cmd(:misc, :unalias, 1)
|
402
400
|
|
403
401
|
when 'tunnel'
|
404
|
-
usage('
|
402
|
+
usage('udn tunnel [servicename] [clientcmd] [--port port]')
|
405
403
|
set_cmd(:services, :tunnel, 0) if @args.size == 0
|
406
404
|
set_cmd(:services, :tunnel, 1) if @args.size == 1
|
407
405
|
set_cmd(:services, :tunnel, 2) if @args.size == 2
|
408
406
|
|
409
407
|
when 'rails-console'
|
410
|
-
usage('
|
408
|
+
usage('udn rails-console <appname>')
|
411
409
|
set_cmd(:apps, :console, 1)
|
412
410
|
|
413
411
|
when 'micro'
|
414
|
-
usage('
|
412
|
+
usage('udn micro <online|offline|status> [--password password] [--save] [--vmx file] [--vmrun executable]')
|
415
413
|
if %w[online offline status].include?(@args[0])
|
416
414
|
set_cmd(:micro, @args[0].to_sym, 1)
|
417
415
|
end
|
@@ -431,16 +429,16 @@ class VMC::Cli::Runner
|
|
431
429
|
parse_options!
|
432
430
|
|
433
431
|
when 'manifest'
|
434
|
-
usage('
|
432
|
+
usage('udn manifest')
|
435
433
|
set_cmd(:manifest, :edit)
|
436
434
|
|
437
435
|
when 'extend-manifest'
|
438
|
-
usage('
|
436
|
+
usage('udn extend-manifest')
|
439
437
|
set_cmd(:manifest, :extend, 1)
|
440
438
|
|
441
439
|
else
|
442
440
|
if verb
|
443
|
-
display "
|
441
|
+
display "udn: Unknown command [#{verb}]"
|
444
442
|
display basic_usage
|
445
443
|
exit(false)
|
446
444
|
end
|
data/lib/cli/services_helper.rb
CHANGED
@@ -3,11 +3,19 @@ module VMC::Cli
|
|
3
3
|
module ServicesHelper
|
4
4
|
def display_system_services(services=nil)
|
5
5
|
services ||= client.services_info
|
6
|
-
|
7
6
|
display "\n============== System Services ==============\n\n"
|
8
|
-
|
9
7
|
return display "No system services available" if services.empty?
|
8
|
+
display_services_table(services)
|
9
|
+
end
|
10
10
|
|
11
|
+
def display_cloudn_services(services=nil)
|
12
|
+
services ||= client.cloudn_services_info
|
13
|
+
display "\n============== Cloudn Services ==============\n\n"
|
14
|
+
return display "No cloudn services available" if services.empty?
|
15
|
+
display_services_table(services)
|
16
|
+
end
|
17
|
+
|
18
|
+
def display_services_table(services)
|
11
19
|
displayed_services = []
|
12
20
|
services.each do |service_type, value|
|
13
21
|
value.each do |vendor, version|
|
@@ -73,8 +81,8 @@ module VMC::Cli
|
|
73
81
|
display 'OK'.green
|
74
82
|
end
|
75
83
|
|
76
|
-
def register_service_banner(service, instance, name, options
|
77
|
-
sn = " [#{name}]"
|
84
|
+
def register_service_banner(service, instance, name, options)
|
85
|
+
sn = " [#{name}]"
|
78
86
|
display "Register Service#{sn}: ", false
|
79
87
|
client.register_service(service, instance, name, options)
|
80
88
|
display 'OK'.green
|
data/lib/cli/usage.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
class VMC::Cli::Runner
|
2
2
|
|
3
3
|
def basic_usage
|
4
|
-
"Usage:
|
5
|
-
"Try '
|
4
|
+
"Usage: udn [options] command [<args>] [command_options]\n" +
|
5
|
+
"Try 'udn help [command]' or 'udn help options' for more information."
|
6
6
|
end
|
7
7
|
|
8
8
|
def display_usage
|
@@ -22,7 +22,7 @@ class VMC::Cli::Runner
|
|
22
22
|
|
23
23
|
#{basic_usage}
|
24
24
|
|
25
|
-
Currently available
|
25
|
+
Currently available udn commands are:
|
26
26
|
|
27
27
|
Getting Started
|
28
28
|
target [url] Reports current target or sets a new target
|
@@ -81,9 +81,8 @@ Currently available vmc commands are:
|
|
81
81
|
clone-services <src-app> <dest-app> Clone service bindings from <src-app> application to <dest-app>
|
82
82
|
tunnel <servicename> [--port] Create a local tunnel to a service
|
83
83
|
tunnel <servicename> <clientcmd> Create a local tunnel to a service and start a local client
|
84
|
-
register-service <
|
85
|
-
register-service <
|
86
|
-
register-service <external> <type> <credential> Register a external service and assign it <type> with <credentials>
|
84
|
+
register-service <type> Register a cloudn service and assign it <type> (e.g. Cloudn RDB)
|
85
|
+
register-service <type> <credential> Register a cloudn service and assign it <type> with <credentials>
|
87
86
|
|
88
87
|
Administration
|
89
88
|
user Display user account information
|
data/lib/cli/version.rb
CHANGED
data/lib/vmc/client.rb
CHANGED
@@ -167,42 +167,6 @@ class VMC::Client
|
|
167
167
|
json_get(VMC::SERVICES_PATH)
|
168
168
|
end
|
169
169
|
|
170
|
-
def create_service(service, name, plan=nil)
|
171
|
-
check_login_status
|
172
|
-
services = services_info
|
173
|
-
services ||= []
|
174
|
-
service_hash = nil
|
175
|
-
|
176
|
-
service = service.to_s
|
177
|
-
service_plans = []
|
178
|
-
default_plan = nil
|
179
|
-
|
180
|
-
# FIXME!
|
181
|
-
services.each do |service_type, value|
|
182
|
-
value.each do |vendor, version|
|
183
|
-
version.each do |version_str, service_descr|
|
184
|
-
if service == service_descr[:vendor]
|
185
|
-
service_plans = service_descr[:tiers].keys.map{|plan_name| plan_name.to_s} if service_descr[:tiers]
|
186
|
-
default_plan = service_descr[:default_plan]
|
187
|
-
service_hash = {
|
188
|
-
:type => service_descr[:type], :tier => 'free',
|
189
|
-
:vendor => service, :version => version_str
|
190
|
-
}
|
191
|
-
break
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
raise TargetError, "Service [#{service}] is not a valid service choice" unless service_hash
|
198
|
-
plan = default_plan || 'free' if plan.nil? || plan.empty?
|
199
|
-
service_hash[:tier] = plan
|
200
|
-
raise TargetError, "Please specify a plan in (#{service_plans.join(', ')})" if service_plans.size > 0 && (! service_plans.include? plan)
|
201
|
-
service_hash[:name] = name
|
202
|
-
json_post(path(VMC::SERVICES_PATH), service_hash)
|
203
|
-
end
|
204
|
-
|
205
|
-
|
206
170
|
def create_service(service, name, plan=nil)
|
207
171
|
check_login_status
|
208
172
|
services = services_info
|
@@ -264,17 +228,36 @@ class VMC::Client
|
|
264
228
|
end
|
265
229
|
|
266
230
|
######################################################
|
267
|
-
#
|
231
|
+
# Access Logs
|
268
232
|
######################################################
|
269
233
|
|
270
|
-
def
|
234
|
+
def get_accesslog_list(name)
|
271
235
|
check_login_status
|
272
|
-
json_get(path(VMC::
|
236
|
+
json_get(path(VMC::APPS_PATH, name, "accesslogs.json"))
|
273
237
|
end
|
274
238
|
|
275
|
-
def
|
239
|
+
def get_accesslog(name, date)
|
276
240
|
check_login_status
|
277
|
-
|
241
|
+
begin
|
242
|
+
Date.strptime(date, "%Y-%m-%d")
|
243
|
+
rescue
|
244
|
+
raise TargetError, "Invalid date format"
|
245
|
+
end
|
246
|
+
json_get(path(VMC::APPS_PATH, name, "accesslogs", date))
|
247
|
+
end
|
248
|
+
|
249
|
+
######################################################
|
250
|
+
# Cloudn Services
|
251
|
+
######################################################
|
252
|
+
|
253
|
+
def cloudn_services_info
|
254
|
+
check_login_status
|
255
|
+
json_get(path(VMC::CLOUDN_SERVICES_PATH))
|
256
|
+
end
|
257
|
+
|
258
|
+
def register_service(service, service_instance, name, options)
|
259
|
+
check_login_status
|
260
|
+
services = cloudn_services_info.values.collect { |type|
|
278
261
|
type.keys.collect(&:to_s)
|
279
262
|
}.flatten
|
280
263
|
services ||= []
|
@@ -289,18 +272,20 @@ class VMC::Client
|
|
289
272
|
:options => options,
|
290
273
|
}
|
291
274
|
|
292
|
-
json_post(path(VMC::
|
275
|
+
json_post(path(VMC::CLOUDN_SERVICES_PATH, service, service_instance), service_hash)
|
293
276
|
end
|
294
277
|
|
295
|
-
def
|
278
|
+
def cloudn_service_instances(service)
|
296
279
|
check_login_status
|
297
|
-
json_get(path(VMC::
|
280
|
+
json_get(path(VMC::CLOUDN_SERVICES_PATH, service))
|
298
281
|
end
|
299
282
|
|
300
|
-
def rdb_databases(service,
|
283
|
+
def rdb_databases(service, service_instance, credentials)
|
301
284
|
check_login_status
|
302
|
-
|
303
|
-
|
285
|
+
headers = {
|
286
|
+
'X-CLOUDN-SERVICE-AUTHENTICATION' => "#{credentials[:MasterUsername]}:#{credentials[:MasterUserPassword]}",
|
287
|
+
}
|
288
|
+
json_get(path(VMC::CLOUDN_SERVICES_PATH, service, service_instance), nil, headers)
|
304
289
|
end
|
305
290
|
|
306
291
|
######################################################
|
@@ -411,12 +396,12 @@ class VMC::Client
|
|
411
396
|
self.class.path(*args, &blk)
|
412
397
|
end
|
413
398
|
|
414
|
-
def json_get(url, params = nil)
|
399
|
+
def json_get(url, params = nil, headers = {})
|
415
400
|
if params
|
416
401
|
param = params.map {|key, value| key.to_s + "=" + value}.join("&")
|
417
402
|
url = url + "?" + param
|
418
403
|
end
|
419
|
-
status, body, headers = http_get(url, 'application/json')
|
404
|
+
status, body, headers = http_get(url, 'application/json', headers)
|
420
405
|
json_parse(body)
|
421
406
|
rescue JSON::ParserError
|
422
407
|
raise BadResponse, "Can't parse response into JSON", body
|
@@ -440,8 +425,8 @@ class VMC::Client
|
|
440
425
|
|
441
426
|
# HTTP helpers
|
442
427
|
|
443
|
-
def http_get(path, content_type=nil)
|
444
|
-
request(:get, path, content_type)
|
428
|
+
def http_get(path, content_type=nil, headers={})
|
429
|
+
request(:get, path, content_type, nil, headers)
|
445
430
|
end
|
446
431
|
|
447
432
|
def http_post(path, body, content_type=nil)
|
data/lib/vmc/const.rb
CHANGED
@@ -11,7 +11,7 @@ module VMC
|
|
11
11
|
# General Paths
|
12
12
|
INFO_PATH = 'info'
|
13
13
|
GLOBAL_SERVICES_PATH = ['info', 'services']
|
14
|
-
|
14
|
+
CLOUDN_SERVICES_PATH = ['cloudn_services']
|
15
15
|
GLOBAL_RUNTIMES_PATH = ['info', 'runtimes']
|
16
16
|
RESOURCES_PATH = 'resources'
|
17
17
|
|
@@ -18,7 +18,7 @@ module VMC::Micro::Switcher
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
err "Micro Cloud Foundry VM initial setup needs to be completed before using '
|
21
|
+
err "Micro Cloud Foundry VM initial setup needs to be completed before using 'udn micro'" unless @vmrun.ready?
|
22
22
|
end
|
23
23
|
|
24
24
|
def offline
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: udn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.23.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.23.1
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- NTT Communications
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json_pure
|
@@ -297,9 +297,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
297
297
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
298
298
|
none: false
|
299
299
|
requirements:
|
300
|
-
- - ! '
|
300
|
+
- - ! '>='
|
301
301
|
- !ruby/object:Gem::Version
|
302
|
-
version:
|
302
|
+
version: '0'
|
303
303
|
requirements: []
|
304
304
|
rubyforge_project:
|
305
305
|
rubygems_version: 1.8.23
|