opennebula-cli 3.8.0.beta1
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/bin/oneacct +113 -0
- data/bin/oneacl +97 -0
- data/bin/onecluster +189 -0
- data/bin/onedatastore +165 -0
- data/bin/onegroup +137 -0
- data/bin/onehost +205 -0
- data/bin/oneimage +311 -0
- data/bin/onetemplate +277 -0
- data/bin/oneuser +404 -0
- data/bin/onevm +532 -0
- data/bin/onevnet +227 -0
- data/lib/cli_helper.rb +294 -0
- data/lib/command_parser.rb +719 -0
- data/lib/one_helper/oneacct_helper.rb +179 -0
- data/lib/one_helper/oneacl_helper.rb +130 -0
- data/lib/one_helper/onecluster_helper.rb +129 -0
- data/lib/one_helper/onedatastore_helper.rb +131 -0
- data/lib/one_helper/onegroup_helper.rb +134 -0
- data/lib/one_helper/onehost_helper.rb +196 -0
- data/lib/one_helper/oneimage_helper.rb +327 -0
- data/lib/one_helper/onequota_helper.rb +256 -0
- data/lib/one_helper/onetemplate_helper.rb +123 -0
- data/lib/one_helper/oneuser_helper.rb +242 -0
- data/lib/one_helper/onevm_helper.rb +266 -0
- data/lib/one_helper/onevnet_helper.rb +156 -0
- data/lib/one_helper.rb +609 -0
- metadata +93 -0
data/bin/onevm
ADDED
@@ -0,0 +1,532 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# -------------------------------------------------------------------------- #
|
4
|
+
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
|
5
|
+
# #
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
7
|
+
# not use this file except in compliance with the License. You may obtain #
|
8
|
+
# a copy of the License at #
|
9
|
+
# #
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0 #
|
11
|
+
# #
|
12
|
+
# Unless required by applicable law or agreed to in writing, software #
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS, #
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
15
|
+
# See the License for the specific language governing permissions and #
|
16
|
+
# limitations under the License. #
|
17
|
+
#--------------------------------------------------------------------------- #
|
18
|
+
|
19
|
+
ONE_LOCATION=ENV["ONE_LOCATION"]
|
20
|
+
|
21
|
+
if !ONE_LOCATION
|
22
|
+
RUBY_LIB_LOCATION="/usr/lib/one/ruby"
|
23
|
+
else
|
24
|
+
RUBY_LIB_LOCATION=ONE_LOCATION+"/lib/ruby"
|
25
|
+
end
|
26
|
+
|
27
|
+
$: << RUBY_LIB_LOCATION
|
28
|
+
$: << RUBY_LIB_LOCATION+"/cli"
|
29
|
+
|
30
|
+
require 'command_parser'
|
31
|
+
require 'one_helper/onevm_helper'
|
32
|
+
|
33
|
+
cmd=CommandParser::CmdParser.new(ARGV) do
|
34
|
+
usage "`onevm` <command> [<args>] [<options>]"
|
35
|
+
version OpenNebulaHelper::ONE_VERSION
|
36
|
+
|
37
|
+
helper = OneVMHelper.new
|
38
|
+
|
39
|
+
|
40
|
+
TYPE={
|
41
|
+
:name => "type",
|
42
|
+
:short => "-t type",
|
43
|
+
:large => "--type type",
|
44
|
+
:format => String,
|
45
|
+
:description => "Type of the new Image"
|
46
|
+
}
|
47
|
+
|
48
|
+
TARGET={
|
49
|
+
:name => "target",
|
50
|
+
:short => "-t type",
|
51
|
+
:large => "--target type",
|
52
|
+
:format => String,
|
53
|
+
:description => "Device where the image will be attached"
|
54
|
+
}
|
55
|
+
|
56
|
+
########################################################################
|
57
|
+
# Global Options
|
58
|
+
########################################################################
|
59
|
+
set :option, CommandParser::OPTIONS
|
60
|
+
|
61
|
+
########################################################################
|
62
|
+
# Formatters for arguments
|
63
|
+
########################################################################
|
64
|
+
set :format, :hostid, OpenNebulaHelper.rname_to_id_desc("HOST") do |arg|
|
65
|
+
OpenNebulaHelper.rname_to_id(arg, "HOST")
|
66
|
+
end
|
67
|
+
|
68
|
+
set :format, :groupid, OpenNebulaHelper.rname_to_id_desc("GROUP") do |arg|
|
69
|
+
OpenNebulaHelper.rname_to_id(arg, "GROUP")
|
70
|
+
end
|
71
|
+
|
72
|
+
set :format, :userid, OpenNebulaHelper.rname_to_id_desc("USER") do |arg|
|
73
|
+
OpenNebulaHelper.rname_to_id(arg, "USER")
|
74
|
+
end
|
75
|
+
|
76
|
+
set :format, :vmid, OneVMHelper.to_id_desc do |arg|
|
77
|
+
helper.to_id(arg)
|
78
|
+
end
|
79
|
+
|
80
|
+
set :format, :vmid_list, OneVMHelper.list_to_id_desc do |arg|
|
81
|
+
helper.list_to_id(arg)
|
82
|
+
end
|
83
|
+
|
84
|
+
set :format, :filterflag, OneVMHelper.filterflag_to_i_desc do |arg|
|
85
|
+
helper.filterflag_to_i(arg)
|
86
|
+
end
|
87
|
+
|
88
|
+
set :format, :diskid, "Integer" do |arg|
|
89
|
+
format_int(arg)
|
90
|
+
end
|
91
|
+
|
92
|
+
########################################################################
|
93
|
+
# Commands
|
94
|
+
########################################################################
|
95
|
+
|
96
|
+
create_desc = <<-EOT.unindent
|
97
|
+
Creates a new VM from the given description instead of using a previously
|
98
|
+
defined template (see 'onetemplate create' and 'onetemplate instantiate').
|
99
|
+
|
100
|
+
Examples:
|
101
|
+
|
102
|
+
- using a template description file:
|
103
|
+
|
104
|
+
onevm create vm_description.tmpl
|
105
|
+
|
106
|
+
- new VM named "arch vm" with a disk and a nic
|
107
|
+
|
108
|
+
onevm create --name "arch vm" --memory 128 --cpu 1 --disk arch \\
|
109
|
+
--network private_lan
|
110
|
+
|
111
|
+
- a vm with two disks
|
112
|
+
|
113
|
+
onevm create --name "test vm" --memory 128 --cpu 1 --disk arch,data
|
114
|
+
|
115
|
+
EOT
|
116
|
+
|
117
|
+
command :create, create_desc, [:file, nil], :options =>
|
118
|
+
[OneVMHelper::MULTIPLE]+OpenNebulaHelper::TEMPLATE_OPTIONS_VM do
|
119
|
+
|
120
|
+
number = options[:multiple] || 1
|
121
|
+
exit_code = nil
|
122
|
+
|
123
|
+
if args[0] && OpenNebulaHelper.create_template_options_used?(options)
|
124
|
+
STDERR.puts "You can not use both template file and template"<<
|
125
|
+
" creation options."
|
126
|
+
next -1
|
127
|
+
end
|
128
|
+
|
129
|
+
begin
|
130
|
+
if args[0]
|
131
|
+
template=File.read(args[0])
|
132
|
+
else
|
133
|
+
res = OpenNebulaHelper.create_template(options)
|
134
|
+
|
135
|
+
if res.first != 0
|
136
|
+
STDERR.puts res.last
|
137
|
+
next -1
|
138
|
+
end
|
139
|
+
|
140
|
+
template = res.last
|
141
|
+
end
|
142
|
+
rescue Exception => e
|
143
|
+
STDERR.puts "Error reading template."
|
144
|
+
next -1
|
145
|
+
end
|
146
|
+
|
147
|
+
number.times do
|
148
|
+
exit_code = helper.create_resource(options) do |vm|
|
149
|
+
error = vm.allocate(template)
|
150
|
+
end
|
151
|
+
|
152
|
+
break if exit_code == -1
|
153
|
+
end
|
154
|
+
|
155
|
+
exit_code
|
156
|
+
end
|
157
|
+
|
158
|
+
delete_desc = <<-EOT.unindent
|
159
|
+
Deletes the given VM
|
160
|
+
|
161
|
+
States: ANY
|
162
|
+
EOT
|
163
|
+
|
164
|
+
command :delete, delete_desc, [:range, :vmid_list] do
|
165
|
+
helper.perform_actions(args[0],options,"deleted") do |vm|
|
166
|
+
vm.finalize
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
hold_desc = <<-EOT.unindent
|
171
|
+
Sets the given VM on hold. A VM on hold is not scheduled until it is
|
172
|
+
released. It can be, however, deployed manually; see 'onevm deploy'
|
173
|
+
|
174
|
+
States: PENDING
|
175
|
+
EOT
|
176
|
+
|
177
|
+
command :hold, hold_desc, [:range,:vmid_list] do
|
178
|
+
helper.perform_actions(args[0],options,"put on hold") do |vm|
|
179
|
+
vm.hold
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
release_desc = <<-EOT.unindent
|
184
|
+
Releases a VM on hold. See 'onevm hold'
|
185
|
+
|
186
|
+
States: HOLD
|
187
|
+
EOT
|
188
|
+
|
189
|
+
command :release, release_desc, [:range,:vmid_list] do
|
190
|
+
helper.perform_actions(args[0],options,"released") do |vm|
|
191
|
+
vm.release
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
saveas_desc = <<-EOT.unindent
|
196
|
+
Sets the specified VM disk to be saved in a new Image. The Image is
|
197
|
+
created immediately, but the contents are saved only if the VM is
|
198
|
+
shut down gracefully (i.e., using 'onevm shutdown' and not
|
199
|
+
'onevm delete')
|
200
|
+
|
201
|
+
States: ANY
|
202
|
+
EOT
|
203
|
+
|
204
|
+
command :saveas, saveas_desc, :vmid, :diskid, :img_name, :options=>[TYPE] do
|
205
|
+
disk_id = args[1].to_i
|
206
|
+
image_name = args[2]
|
207
|
+
image_type = options[:type] || ""
|
208
|
+
|
209
|
+
verbose = "disk #{disk_id} prepared to be saved in " <<
|
210
|
+
"the image #{image_name}"
|
211
|
+
|
212
|
+
helper.perform_action(args[0],options,verbose) do |vm|
|
213
|
+
res = vm.save_as(disk_id, image_name, image_type)
|
214
|
+
|
215
|
+
if !OpenNebula.is_error?(res)
|
216
|
+
puts "Image ID: #{res}"
|
217
|
+
end
|
218
|
+
|
219
|
+
res
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
shutdown_desc = <<-EOT.unindent
|
224
|
+
Shuts down the given VM. The VM life cycle will end.
|
225
|
+
|
226
|
+
States: RUNNING
|
227
|
+
EOT
|
228
|
+
|
229
|
+
command :shutdown, shutdown_desc, [:range,:vmid_list] do
|
230
|
+
helper.perform_actions(args[0],options,"shutting down") do |vm|
|
231
|
+
vm.shutdown
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
poweroff_desc = <<-EOT.unindent
|
236
|
+
Powers off the given VM. The VM will remain in the poweroff state, and
|
237
|
+
can be powered on with the 'onevm restart' command.
|
238
|
+
|
239
|
+
States: RUNNING
|
240
|
+
EOT
|
241
|
+
|
242
|
+
command :poweroff, poweroff_desc, [:range,:vmid_list] do
|
243
|
+
helper.perform_actions(args[0],options,"shutting down") do |vm|
|
244
|
+
vm.poweroff
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
reboot_desc = <<-EOT.unindent
|
249
|
+
Reboots the given VM, this is equivalent to execute the reboot command
|
250
|
+
from the VM console.
|
251
|
+
|
252
|
+
States: RUNNING
|
253
|
+
EOT
|
254
|
+
|
255
|
+
command :reboot, reboot_desc, [:range,:vmid_list] do
|
256
|
+
helper.perform_actions(args[0],options,"rebooting") do |vm|
|
257
|
+
vm.reboot
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
reset_desc = <<-EOT.unindent
|
262
|
+
Resets the given VM
|
263
|
+
|
264
|
+
States: RUNNING
|
265
|
+
EOT
|
266
|
+
|
267
|
+
command :reset, reset_desc, [:range,:vmid_list] do
|
268
|
+
helper.perform_actions(args[0],options,"resetting") do |vm|
|
269
|
+
vm.reset
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
deploy_desc = <<-EOT.unindent
|
274
|
+
Deploys the given VM in the specified Host. This command forces the
|
275
|
+
deployment, in a standard installation the Scheduler is in charge
|
276
|
+
of this decision
|
277
|
+
|
278
|
+
States: PENDING
|
279
|
+
EOT
|
280
|
+
|
281
|
+
command :deploy, deploy_desc, [:range,:vmid_list], :hostid do
|
282
|
+
host_id = args[1]
|
283
|
+
verbose = "deploying in host #{host_id}"
|
284
|
+
|
285
|
+
helper.perform_actions(args[0],options,verbose) do |vm|
|
286
|
+
vm.deploy(host_id)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
livemigrate_desc = <<-EOT.unindent
|
291
|
+
Migrates the given running VM to another Host without downtime
|
292
|
+
|
293
|
+
States: RUNNING
|
294
|
+
EOT
|
295
|
+
|
296
|
+
command :livemigrate, livemigrate_desc, [:range,:vmid_list], :hostid do
|
297
|
+
host_id = args[1]
|
298
|
+
verbose = "live migrating to #{host_id}"
|
299
|
+
|
300
|
+
helper.perform_actions(args[0],options,verbose) do |vm|
|
301
|
+
vm.live_migrate(host_id)
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
migrate_desc = <<-EOT.unindent
|
306
|
+
Saves the given running VM and starts it again in the specified Host
|
307
|
+
|
308
|
+
States: RUNNING
|
309
|
+
EOT
|
310
|
+
|
311
|
+
command :migrate, migrate_desc, [:range,:vmid_list], :hostid do
|
312
|
+
host_id = args[1]
|
313
|
+
verbose = "migrating to #{host_id}"
|
314
|
+
|
315
|
+
helper.perform_actions(args[0],options,verbose) do |vm|
|
316
|
+
vm.migrate(host_id)
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
restart_desc = <<-EOT.unindent
|
321
|
+
Boots the given VM.
|
322
|
+
|
323
|
+
States: UNKNOWN, BOOT, POWEROFF
|
324
|
+
EOT
|
325
|
+
|
326
|
+
command :restart, restart_desc, [:range,:vmid_list] do
|
327
|
+
helper.perform_actions(args[0],options,"restarting") do |vm|
|
328
|
+
vm.restart
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
resubmit_desc = <<-EOT.unindent
|
333
|
+
Resubmits the VM to PENDING state. This is intended for VMs stuck in a
|
334
|
+
transient state. To re-deploy a fresh copy of the same VM, create a
|
335
|
+
Template and instantiate it, see 'onetemplate instantiate'
|
336
|
+
|
337
|
+
States: ANY, except SUSPENDED or DONE
|
338
|
+
EOT
|
339
|
+
|
340
|
+
command :resubmit, resubmit_desc, [:range,:vmid_list] do
|
341
|
+
helper.perform_actions(args[0],options,"resubmiting") do |vm|
|
342
|
+
vm.resubmit
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
cancel_desc = <<-EOT.unindent
|
347
|
+
Cancels the given VM. The process is checked by OpenNebula, so
|
348
|
+
if the process fails the VM remains in running state. If the action
|
349
|
+
succeeds the VMDIR in the remote machine is not deleted
|
350
|
+
|
351
|
+
States: RUNNING
|
352
|
+
EOT
|
353
|
+
|
354
|
+
command :cancel, cancel_desc, [:range,:vmid_list] do
|
355
|
+
helper.perform_actions(args[0],options,"canceling") do |vm|
|
356
|
+
vm.cancel
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
stop_desc = <<-EOT.unindent
|
361
|
+
Stops a running VM. The VM state is saved and transferred back to the
|
362
|
+
front-end along with the disk files
|
363
|
+
|
364
|
+
States: RUNNING
|
365
|
+
EOT
|
366
|
+
|
367
|
+
command :stop, stop_desc, [:range,:vmid_list] do
|
368
|
+
helper.perform_actions(args[0],options,"stopping") do |vm|
|
369
|
+
vm.stop
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
suspend_desc = <<-EOT.unindent
|
374
|
+
Saves a running VM. It is the same as 'onevm stop', but the files
|
375
|
+
are left in the remote machine to later restart the VM there
|
376
|
+
(i.e. the resources are not freed and there is no need to
|
377
|
+
re-schedule the VM).
|
378
|
+
|
379
|
+
States: RUNNING
|
380
|
+
EOT
|
381
|
+
|
382
|
+
command :suspend, suspend_desc, [:range,:vmid_list] do
|
383
|
+
helper.perform_actions(args[0],options,"suspending") do |vm|
|
384
|
+
vm.suspend
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
resume_desc = <<-EOT.unindent
|
389
|
+
Resumes the execution of the a saved VM
|
390
|
+
|
391
|
+
States: STOPPED, SUSPENDED
|
392
|
+
EOT
|
393
|
+
|
394
|
+
command :resume, resume_desc, [:range,:vmid_list] do
|
395
|
+
helper.perform_actions(args[0],options,"resuming") do |vm|
|
396
|
+
vm.resume
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
attachdisk_desc = <<-EOT.unindent
|
401
|
+
Attaches a disk to a running VM
|
402
|
+
|
403
|
+
States: RUNNING
|
404
|
+
EOT
|
405
|
+
|
406
|
+
command :attachdisk, attachdisk_desc, :vmid,
|
407
|
+
:options => [OneVMHelper::FILE, OneVMHelper::IMAGE, TARGET] do
|
408
|
+
|
409
|
+
if options[:file].nil? and options[:image].nil?
|
410
|
+
STDERR.puts "Provide a template file or an image:"
|
411
|
+
STDERR.puts "\t--file <file>"
|
412
|
+
STDERR.puts "\t--image <image>"
|
413
|
+
exit -1
|
414
|
+
end
|
415
|
+
|
416
|
+
if options[:file]
|
417
|
+
template = File.read(options[:file])
|
418
|
+
else
|
419
|
+
image_id = options[:image]
|
420
|
+
target = options[:target]
|
421
|
+
if target
|
422
|
+
template =
|
423
|
+
"DISK = [ IMAGE_ID = #{image_id}, TARGET = #{target} ]"
|
424
|
+
else
|
425
|
+
template =
|
426
|
+
"DISK = [ IMAGE_ID = #{image_id}, DEV_PREFIX = sd ]"
|
427
|
+
end
|
428
|
+
end
|
429
|
+
|
430
|
+
helper.perform_action(args[0],options,"Attach disk") do |vm|
|
431
|
+
vm.attachdisk(template)
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
detachdisk_desc = <<-EOT.unindent
|
436
|
+
Detaches a disk from a running VM
|
437
|
+
|
438
|
+
States: RUNNING
|
439
|
+
EOT
|
440
|
+
|
441
|
+
command :detachdisk, detachdisk_desc, :vmid, :diskid do
|
442
|
+
diskid = args[1].to_i
|
443
|
+
|
444
|
+
helper.perform_action(args[0],options,"Detach disk") do |vm|
|
445
|
+
vm.detachdisk(diskid)
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
chgrp_desc = <<-EOT.unindent
|
450
|
+
Changes the VM group
|
451
|
+
EOT
|
452
|
+
|
453
|
+
command :chgrp, chgrp_desc,[:range, :vmid_list], :groupid do
|
454
|
+
helper.perform_actions(args[0],options,"Group changed") do |vm|
|
455
|
+
vm.chown(-1, args[1].to_i)
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
459
|
+
chown_desc = <<-EOT.unindent
|
460
|
+
Changes the VM owner and group
|
461
|
+
EOT
|
462
|
+
|
463
|
+
command :chown, chown_desc, [:range, :vmid_list], :userid,
|
464
|
+
[:groupid,nil] do
|
465
|
+
gid = args[2].nil? ? -1 : args[2].to_i
|
466
|
+
helper.perform_actions(args[0],options,"Owner/Group changed") do |vm|
|
467
|
+
vm.chown(args[1].to_i, gid)
|
468
|
+
end
|
469
|
+
end
|
470
|
+
|
471
|
+
chmod_desc = <<-EOT.unindent
|
472
|
+
Changes the VM permissions
|
473
|
+
EOT
|
474
|
+
|
475
|
+
command :chmod, chmod_desc, [:range, :vmid_list], :octet do
|
476
|
+
helper.perform_actions(args[0],options, "Permissions changed") do |vm|
|
477
|
+
vm.chmod_octet(args[1])
|
478
|
+
end
|
479
|
+
end
|
480
|
+
|
481
|
+
resched_desc = <<-EOT.unindent
|
482
|
+
Sets the rescheduling flag for the VM.
|
483
|
+
|
484
|
+
States: RUNNING
|
485
|
+
EOT
|
486
|
+
|
487
|
+
command :resched, resched_desc, [:range,:vmid_list] do
|
488
|
+
helper.perform_actions(args[0],options,"Setting resched flag") do |vm|
|
489
|
+
vm.resched
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
unresched_desc = <<-EOT.unindent
|
494
|
+
Clears the rescheduling flag for the VM.
|
495
|
+
|
496
|
+
States: RUNNING
|
497
|
+
EOT
|
498
|
+
|
499
|
+
command :unresched, unresched_desc, [:range,:vmid_list] do
|
500
|
+
helper.perform_actions(args[0],options,"Clearing resched flag") do |vm|
|
501
|
+
vm.unresched
|
502
|
+
end
|
503
|
+
end
|
504
|
+
|
505
|
+
list_desc = <<-EOT.unindent
|
506
|
+
Lists VMs in the pool
|
507
|
+
EOT
|
508
|
+
|
509
|
+
command :list, list_desc, [:filterflag, nil],
|
510
|
+
:options=>CLIHelper::OPTIONS+OpenNebulaHelper::OPTIONS+
|
511
|
+
[OpenNebulaHelper::DESCRIBE] do
|
512
|
+
helper.list_pool(options, false, args[0])
|
513
|
+
end
|
514
|
+
|
515
|
+
show_desc = <<-EOT.unindent
|
516
|
+
Shows information for the given VM
|
517
|
+
EOT
|
518
|
+
|
519
|
+
command :show, show_desc, :vmid,
|
520
|
+
:options=>OpenNebulaHelper::XML do
|
521
|
+
helper.show_resource(args[0],options)
|
522
|
+
end
|
523
|
+
|
524
|
+
top_desc = <<-EOT.unindent
|
525
|
+
Lists Images continuously
|
526
|
+
EOT
|
527
|
+
|
528
|
+
command :top, top_desc, [:filterflag, nil],
|
529
|
+
:options=>CLIHelper::OPTIONS+OpenNebulaHelper::OPTIONS do
|
530
|
+
helper.list_pool(options, true, args[0])
|
531
|
+
end
|
532
|
+
end
|