udn 0.3.23.0.pre → 0.3.23.1
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.
- 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
|