opennebula-cli 4.10.2 → 4.11.80.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/oneacct +16 -2
- data/bin/onedatastore +20 -0
- data/bin/onegroup +27 -42
- data/bin/onesecgroup +198 -0
- data/bin/oneshowback +178 -0
- data/bin/onetemplate +4 -1
- data/bin/onevcenter +81 -0
- data/bin/onevdc +280 -0
- data/bin/onevnet +14 -2
- data/lib/cli_helper.rb +1 -1
- data/lib/one_helper.rb +0 -9
- data/lib/one_helper/oneacct_helper.rb +74 -6
- data/lib/one_helper/oneacl_helper.rb +8 -4
- data/lib/one_helper/onedatastore_helper.rb +10 -3
- data/lib/one_helper/onegroup_helper.rb +13 -19
- data/lib/one_helper/onehost_helper.rb +10 -0
- data/lib/one_helper/onesecgroup_helper.rb +155 -0
- data/lib/one_helper/onevdc_helper.rb +144 -0
- data/lib/one_helper/onevm_helper.rb +93 -50
- data/lib/one_helper/onevnet_helper.rb +20 -20
- metadata +16 -7
data/bin/onetemplate
CHANGED
@@ -171,7 +171,10 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
171
171
|
|
172
172
|
instantiate_desc = <<-EOT.unindent
|
173
173
|
Creates a new VM instance from the given Template. This VM can be
|
174
|
-
managed with the 'onevm' command
|
174
|
+
managed with the 'onevm' command.
|
175
|
+
|
176
|
+
The source Template can be modified adding or replacing attributes with
|
177
|
+
the optional file argument, or with the options.
|
175
178
|
EOT
|
176
179
|
|
177
180
|
command :instantiate, instantiate_desc, :templateid, [:file, nil],
|
data/bin/onevcenter
CHANGED
@@ -215,6 +215,87 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
215
215
|
exit 0
|
216
216
|
end
|
217
217
|
|
218
|
+
vms_desc = <<-EOT.unindent
|
219
|
+
Import vCenter running Virtual Machines into OpenNebula
|
220
|
+
EOT
|
221
|
+
|
222
|
+
command :vms, vms_desc, :options=>[ VCENTER, USER, PASS ] do
|
223
|
+
if options[:vuser].nil? ||
|
224
|
+
options[:vpass].nil? ||
|
225
|
+
options[:vcenter].nil?
|
226
|
+
STDERR.puts "vCenter connection parameters are mandatory to import"\
|
227
|
+
" VM templates:\n"\
|
228
|
+
"\t --vcenter vCenter hostname\n"\
|
229
|
+
"\t --vuser username to login in vcenter\n"\
|
230
|
+
"\t --vpass password for the user"
|
231
|
+
exit -1
|
232
|
+
end
|
233
|
+
|
234
|
+
begin
|
235
|
+
STDOUT.print "\nConnecting to vCenter: #{options[:vcenter]}..."
|
236
|
+
|
237
|
+
vc = VCenterDriver::VIClient.new_connection(
|
238
|
+
:user => options[:vuser],
|
239
|
+
:password => options[:vpass],
|
240
|
+
:host => options[:vcenter])
|
241
|
+
|
242
|
+
STDOUT.print "done!\n\n"
|
243
|
+
|
244
|
+
STDOUT.print "Looking for running Virtual Machines..."
|
245
|
+
|
246
|
+
rs = vc.running_vms
|
247
|
+
|
248
|
+
STDOUT.print "done!\n"
|
249
|
+
|
250
|
+
rs.each {|dc, tmps|
|
251
|
+
STDOUT.print "\nDo you want to process datacenter #{dc} [y/n]? "
|
252
|
+
|
253
|
+
next if STDIN.gets.strip.downcase != 'y'
|
254
|
+
|
255
|
+
if tmps.empty?
|
256
|
+
STDOUT.print " No new running Virtual Machines found in"\
|
257
|
+
" #{dc}...\n\n"
|
258
|
+
next
|
259
|
+
end
|
260
|
+
|
261
|
+
tmps.each{ |v|
|
262
|
+
STDOUT.print "\n * Running Virtual Machine found:\n"\
|
263
|
+
" - Name : #{v[:name]}\n"\
|
264
|
+
" - UUID : #{v[:uuid]}\n"\
|
265
|
+
" - Cluster: #{v[:host]}\n"\
|
266
|
+
" Import this Virtual Machine [y/n]? "
|
267
|
+
|
268
|
+
next if STDIN.gets.strip.downcase != 'y'
|
269
|
+
|
270
|
+
one_v = ::OpenNebula::VirtualMachine.new(
|
271
|
+
::OpenNebula::VirtualMachine.build_xml, vc.one)
|
272
|
+
|
273
|
+
rc = one_v.allocate(v[:one])
|
274
|
+
|
275
|
+
if ::OpenNebula.is_error?(rc)
|
276
|
+
STDOUT.puts " Error creating Virtual Machine: "\
|
277
|
+
"#{rc.message}\n"
|
278
|
+
end
|
279
|
+
|
280
|
+
rc = one_v.deploy v[:host_id]
|
281
|
+
|
282
|
+
if ::OpenNebula.is_error?(rc)
|
283
|
+
STDOUT.puts " Error creating Virtual Machine: "\
|
284
|
+
"#{rc.message}\n"
|
285
|
+
else
|
286
|
+
STDOUT.puts " OpenNebula VM #{one_v.id} "\
|
287
|
+
"created!\n"
|
288
|
+
end
|
289
|
+
}
|
290
|
+
}
|
291
|
+
rescue Exception => e
|
292
|
+
STDOUT.puts "error: #{e.message}"
|
293
|
+
exit -1
|
294
|
+
end
|
295
|
+
|
296
|
+
exit 0
|
297
|
+
end
|
298
|
+
|
218
299
|
network_desc = <<-EOT.unindent
|
219
300
|
Import vCenter networks into OpenNebula
|
220
301
|
EOT
|
data/bin/onevdc
ADDED
@@ -0,0 +1,280 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# -------------------------------------------------------------------------- #
|
4
|
+
# Copyright 2002-2015, OpenNebula Project (OpenNebula.org), C12G Labs #
|
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/onevdc_helper'
|
32
|
+
|
33
|
+
cmd=CommandParser::CmdParser.new(ARGV) do
|
34
|
+
usage "`onevdc` <command> [<args>] [<options>]"
|
35
|
+
version OpenNebulaHelper::ONE_VERSION
|
36
|
+
|
37
|
+
helper = OneVdcHelper.new
|
38
|
+
|
39
|
+
before_proc do
|
40
|
+
helper.set_client(options)
|
41
|
+
end
|
42
|
+
|
43
|
+
########################################################################
|
44
|
+
# Global Options
|
45
|
+
########################################################################
|
46
|
+
set :option, CommandParser::OPTIONS+OpenNebulaHelper::CLIENT_OPTIONS
|
47
|
+
|
48
|
+
list_options = CLIHelper::OPTIONS
|
49
|
+
list_options << OpenNebulaHelper::XML
|
50
|
+
list_options << OpenNebulaHelper::NUMERIC
|
51
|
+
list_options << OpenNebulaHelper::DESCRIBE
|
52
|
+
|
53
|
+
########################################################################
|
54
|
+
# Formatters for arguments
|
55
|
+
########################################################################
|
56
|
+
set :format, :vdcid, OneVdcHelper.to_id_desc do |arg|
|
57
|
+
helper.to_id(arg)
|
58
|
+
end
|
59
|
+
|
60
|
+
set :format, :vdcid_list, OneVdcHelper.list_to_id_desc do |arg|
|
61
|
+
helper.list_to_id(arg)
|
62
|
+
end
|
63
|
+
|
64
|
+
set :format, :groupid, OpenNebulaHelper.rname_to_id_desc("GROUP") do |arg|
|
65
|
+
OpenNebulaHelper.rname_to_id(arg, "GROUP")
|
66
|
+
end
|
67
|
+
|
68
|
+
set :format, :zoneid, OpenNebulaHelper.rname_to_id_desc("ZONE") do |arg|
|
69
|
+
OpenNebulaHelper.rname_to_id(arg, "ZONE")
|
70
|
+
end
|
71
|
+
|
72
|
+
set :format, :clusterid,
|
73
|
+
"#{OpenNebulaHelper.rname_to_id_desc('CLUSTER')}. Can be set to ALL" do |arg|
|
74
|
+
|
75
|
+
if !arg.nil? and arg.class != Fixnum and arg.upcase == "ALL"
|
76
|
+
[0, Vdc::ALL_RESOURCES]
|
77
|
+
else
|
78
|
+
OpenNebulaHelper.rname_to_id(arg, "CLUSTER")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
set :format, :hostid,
|
83
|
+
"#{OpenNebulaHelper.rname_to_id_desc('HOST')}. Can be set to ALL" do |arg|
|
84
|
+
|
85
|
+
if !arg.nil? and arg.class != Fixnum and arg.upcase == "ALL"
|
86
|
+
[0, Vdc::ALL_RESOURCES]
|
87
|
+
else
|
88
|
+
OpenNebulaHelper.rname_to_id(arg, "HOST")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
set :format, :datastoreid,
|
93
|
+
"#{OpenNebulaHelper.rname_to_id_desc('DATASTORE')}. Can be set to ALL" do |arg|
|
94
|
+
|
95
|
+
if !arg.nil? and arg.class != Fixnum and arg.upcase == "ALL"
|
96
|
+
[0, Vdc::ALL_RESOURCES]
|
97
|
+
else
|
98
|
+
OpenNebulaHelper.rname_to_id(arg, "DATASTORE")
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
set :format, :vnetid,
|
103
|
+
"#{OpenNebulaHelper.rname_to_id_desc('VNET')}. Can be set to ALL" do |arg|
|
104
|
+
|
105
|
+
if !arg.nil? and arg.class != Fixnum and arg.upcase == "ALL"
|
106
|
+
[0, Vdc::ALL_RESOURCES]
|
107
|
+
else
|
108
|
+
OpenNebulaHelper.rname_to_id(arg, "VNET")
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
########################################################################
|
113
|
+
# Commands
|
114
|
+
########################################################################
|
115
|
+
|
116
|
+
create_desc = <<-EOT.unindent
|
117
|
+
Creates a new VDC
|
118
|
+
EOT
|
119
|
+
|
120
|
+
command :create, create_desc, :name do
|
121
|
+
helper.create_resource(options) do |vdc|
|
122
|
+
template = "NAME = \"#{args[0]}\""
|
123
|
+
vdc.allocate(template)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
rename_desc = <<-EOT.unindent
|
128
|
+
Renames the VDC
|
129
|
+
EOT
|
130
|
+
|
131
|
+
command :rename, rename_desc, :vdcid, :name do
|
132
|
+
helper.perform_action(args[0],options,"renamed") do |o|
|
133
|
+
o.rename(args[1])
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
update_desc = <<-EOT.unindent
|
138
|
+
Update the template contents. If a path is not provided the editor will
|
139
|
+
be launched to modify the current content.
|
140
|
+
EOT
|
141
|
+
|
142
|
+
command :update, update_desc, :vdcid, [:file, nil],
|
143
|
+
:options=>OpenNebulaHelper::APPEND do
|
144
|
+
helper.perform_action(args[0],options,"modified") do |obj|
|
145
|
+
if options[:append]
|
146
|
+
str = OpenNebulaHelper.append_template(args[0], obj, args[1])
|
147
|
+
else
|
148
|
+
str = OpenNebulaHelper.update_template(args[0], obj, args[1])
|
149
|
+
end
|
150
|
+
|
151
|
+
obj.update(str, options[:append])
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
delete_desc = <<-EOT.unindent
|
156
|
+
Deletes the given VDC
|
157
|
+
EOT
|
158
|
+
|
159
|
+
command :delete, delete_desc, [:range, :vdcid_list] do
|
160
|
+
helper.perform_actions(args[0],options,"deleted") do |obj|
|
161
|
+
obj.delete
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
add_group_desc = <<-EOT.unindent
|
166
|
+
Adds a Group to the given VDC
|
167
|
+
EOT
|
168
|
+
|
169
|
+
command :addgroup, add_group_desc, [:range, :vdcid_list], :groupid do
|
170
|
+
helper.perform_actions(args[0],options,"group added") do |obj|
|
171
|
+
obj.add_group(args[1].to_i)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
del_group_desc = <<-EOT.unindent
|
176
|
+
Deletes a Group from the given VDC
|
177
|
+
EOT
|
178
|
+
|
179
|
+
command :delgroup, del_group_desc, [:range, :vdcid_list], :groupid do
|
180
|
+
helper.perform_actions(args[0],options,"group deleted") do |obj|
|
181
|
+
obj.del_group(args[1].to_i)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
add_cluster_desc = <<-EOT.unindent
|
186
|
+
Adds a Cluster (from a specific Zone) to the given VDC
|
187
|
+
EOT
|
188
|
+
|
189
|
+
command :addcluster, add_cluster_desc, [:range, :vdcid_list], :zoneid, :clusterid do
|
190
|
+
helper.perform_actions(args[0],options,"cluster added") do |obj|
|
191
|
+
obj.add_cluster(args[1].to_i, args[2].to_i)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
del_cluster_desc = <<-EOT.unindent
|
196
|
+
Deletes a Cluster (from a specific Zone) from the given VDC
|
197
|
+
EOT
|
198
|
+
|
199
|
+
command :delcluster, del_cluster_desc, [:range, :vdcid_list], :zoneid, :clusterid do
|
200
|
+
helper.perform_actions(args[0],options,"cluster deleted") do |obj|
|
201
|
+
obj.del_cluster(args[1].to_i, args[2].to_i)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
add_host_desc = <<-EOT.unindent
|
206
|
+
Adds a Host (from a specific Zone) to the given VDC
|
207
|
+
EOT
|
208
|
+
|
209
|
+
command :addhost, add_host_desc, [:range, :vdcid_list], :zoneid, :hostid do
|
210
|
+
helper.perform_actions(args[0],options,"host added") do |obj|
|
211
|
+
obj.add_host(args[1].to_i, args[2].to_i)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
del_host_desc = <<-EOT.unindent
|
216
|
+
Deletes a Host (from a specific Zone) from the given VDC
|
217
|
+
EOT
|
218
|
+
|
219
|
+
command :delhost, del_host_desc, [:range, :vdcid_list], :zoneid, :hostid do
|
220
|
+
helper.perform_actions(args[0],options,"host deleted") do |obj|
|
221
|
+
obj.del_host(args[1].to_i, args[2].to_i)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
add_datastore_desc = <<-EOT.unindent
|
226
|
+
Adds a Datastore (from a specific Zone) to the given VDC
|
227
|
+
EOT
|
228
|
+
|
229
|
+
command :adddatastore, add_datastore_desc, [:range, :vdcid_list], :zoneid, :datastoreid do
|
230
|
+
helper.perform_actions(args[0],options,"datastore added") do |obj|
|
231
|
+
obj.add_datastore(args[1].to_i, args[2].to_i)
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
del_datastore_desc = <<-EOT.unindent
|
236
|
+
Deletes a Datastore (from a specific Zone) from the given VDC
|
237
|
+
EOT
|
238
|
+
|
239
|
+
command :deldatastore, del_datastore_desc, [:range, :vdcid_list], :zoneid, :datastoreid do
|
240
|
+
helper.perform_actions(args[0],options,"datastore deleted") do |obj|
|
241
|
+
obj.del_datastore(args[1].to_i, args[2].to_i)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
add_vnet_desc = <<-EOT.unindent
|
246
|
+
Adds a Virtual Network (from a specific Zone) to the given VDC
|
247
|
+
EOT
|
248
|
+
|
249
|
+
command :addvnet, add_vnet_desc, [:range, :vdcid_list], :zoneid, :vnetid do
|
250
|
+
helper.perform_actions(args[0],options,"vnet added") do |obj|
|
251
|
+
obj.add_vnet(args[1].to_i, args[2].to_i)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
del_vnet_desc = <<-EOT.unindent
|
256
|
+
Deletes a Virtual Network (from a specific Zone) from the given VDC
|
257
|
+
EOT
|
258
|
+
|
259
|
+
command :delvnet, del_vnet_desc, [:range, :vdcid_list], :zoneid, :vnetid do
|
260
|
+
helper.perform_actions(args[0],options,"vnet deleted") do |obj|
|
261
|
+
obj.del_vnet(args[1].to_i, args[2].to_i)
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
list_desc = <<-EOT.unindent
|
266
|
+
Lists VDCs in the pool
|
267
|
+
EOT
|
268
|
+
|
269
|
+
command :list, list_desc, :options=>list_options do
|
270
|
+
helper.list_pool(options)
|
271
|
+
end
|
272
|
+
|
273
|
+
show_desc = <<-EOT.unindent
|
274
|
+
Shows information for the given VDC
|
275
|
+
EOT
|
276
|
+
|
277
|
+
command :show, show_desc,:vdcid, :options=>OpenNebulaHelper::XML do
|
278
|
+
helper.show_resource(args[0],options)
|
279
|
+
end
|
280
|
+
end
|
data/bin/onevnet
CHANGED
@@ -253,7 +253,13 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
253
253
|
exit -1
|
254
254
|
end
|
255
255
|
|
256
|
-
vn.reserve(name, size, options[:address_range], addr, args[1])
|
256
|
+
res = vn.reserve(name, size, options[:address_range], addr, args[1])
|
257
|
+
|
258
|
+
if !OpenNebula.is_error?(res)
|
259
|
+
puts "Reservation VNET ID: #{res}"
|
260
|
+
end
|
261
|
+
|
262
|
+
res
|
257
263
|
end
|
258
264
|
end
|
259
265
|
|
@@ -343,9 +349,15 @@ cmd=CommandParser::CmdParser.new(ARGV) do
|
|
343
349
|
obj.delete_element("AR_POOL/AR[AR_ID!=#{args[1]}]")
|
344
350
|
obj.delete_element("AR_POOL/AR/LEASES")
|
345
351
|
obj.delete_element("AR_POOL/AR/USED_LEASES")
|
352
|
+
obj.delete_element("AR_POOL/AR/MAC_END")
|
353
|
+
obj.delete_element("AR_POOL/AR/IP_END")
|
354
|
+
obj.delete_element("AR_POOL/AR/IP6_ULA")
|
355
|
+
obj.delete_element("AR_POOL/AR/IP6_ULA_END")
|
356
|
+
obj.delete_element("AR_POOL/AR/IP6_GLOBAL")
|
357
|
+
obj.delete_element("AR_POOL/AR/IP6_GLOBAL_END")
|
346
358
|
|
347
359
|
if obj.template_like_str("AR_POOL").empty?
|
348
|
-
puts "Address Range #{args[1]} does not
|
360
|
+
puts "Address Range #{args[1]} does not exist for "<<
|
349
361
|
"Virtual Network #{args[0]}"
|
350
362
|
exit -1
|
351
363
|
end
|
data/lib/cli_helper.rb
CHANGED
@@ -211,7 +211,7 @@ module CLIHelper
|
|
211
211
|
pool=@data.keys.first
|
212
212
|
return print_table(nil, options) if !pool
|
213
213
|
|
214
|
-
element=pool.split('_').
|
214
|
+
element=pool.split('_')[0..-2].join('_')
|
215
215
|
|
216
216
|
pool_data=@data.dsearch("#{pool}/#{element}")
|
217
217
|
pool_data=[pool_data].flatten if pool_data
|
data/lib/one_helper.rb
CHANGED
@@ -169,15 +169,6 @@ EOT
|
|
169
169
|
"Which resources can be created by group users "<<
|
170
170
|
"(VM+NET+IMAGE+TEMPLATE by default)",
|
171
171
|
:format => String
|
172
|
-
},
|
173
|
-
{
|
174
|
-
:name => 'admin_resources',
|
175
|
-
:large => '--admin_resources res_str',
|
176
|
-
:short => "-o",
|
177
|
-
:description =>
|
178
|
-
"Which resources can be created by the admin user "<<
|
179
|
-
"(VM+NET+IMAGE+TEMPLATE by default)",
|
180
|
-
:format => String
|
181
172
|
}
|
182
173
|
]
|
183
174
|
|
@@ -18,19 +18,35 @@ require 'one_helper'
|
|
18
18
|
require 'optparse/time'
|
19
19
|
|
20
20
|
class AcctHelper < OpenNebulaHelper::OneHelper
|
21
|
-
|
21
|
+
START_TIME_ACCT = {
|
22
22
|
:name => "start_time",
|
23
23
|
:short => "-s TIME",
|
24
24
|
:large => "--start TIME" ,
|
25
|
-
:description => "
|
25
|
+
:description => "First day of the data to retrieve",
|
26
26
|
:format => Time
|
27
27
|
}
|
28
28
|
|
29
|
-
|
29
|
+
END_TIME_ACCT = {
|
30
30
|
:name => "end_time",
|
31
31
|
:short => "-e TIME",
|
32
32
|
:large => "--end TIME" ,
|
33
|
-
:description => "
|
33
|
+
:description => "Last day of the data to retrieve",
|
34
|
+
:format => Time
|
35
|
+
}
|
36
|
+
|
37
|
+
START_TIME_SHOWBACK = {
|
38
|
+
:name => "start_time",
|
39
|
+
:short => "-s TIME",
|
40
|
+
:large => "--start TIME" ,
|
41
|
+
:description => "First month of the data",
|
42
|
+
:format => Time
|
43
|
+
}
|
44
|
+
|
45
|
+
END_TIME_SHOWBACK = {
|
46
|
+
:name => "end_time",
|
47
|
+
:short => "-e TIME",
|
48
|
+
:large => "--end TIME" ,
|
49
|
+
:description => "Last month of the data",
|
34
50
|
:format => Time
|
35
51
|
}
|
36
52
|
|
@@ -95,8 +111,8 @@ class AcctHelper < OpenNebulaHelper::OneHelper
|
|
95
111
|
:description => "Split the output in a table for each VM"
|
96
112
|
}
|
97
113
|
|
98
|
-
ACCT_OPTIONS
|
99
|
-
|
114
|
+
ACCT_OPTIONS = [START_TIME_ACCT, END_TIME_ACCT, USERFILTER, GROUP, HOST, XPATH, XML, JSON, SPLIT]
|
115
|
+
SHOWBACK_OPTIONS = [START_TIME_SHOWBACK, END_TIME_SHOWBACK, USERFILTER, GROUP, XML, JSON]
|
100
116
|
|
101
117
|
ACCT_TABLE = CLIHelper::ShowTable.new("oneacct.yaml", nil) do
|
102
118
|
column :UID, "User ID", :size=>4 do |d|
|
@@ -152,6 +168,50 @@ class AcctHelper < OpenNebulaHelper::OneHelper
|
|
152
168
|
default :VID, :HOSTNAME, :ACTION, :REASON, :START_TIME, :END_TIME, :MEMORY, :CPU, :NET_RX, :NET_TX
|
153
169
|
end
|
154
170
|
|
171
|
+
SHOWBACK_TABLE = CLIHelper::ShowTable.new("oneshowback.yaml", nil) do
|
172
|
+
column :UID, "User ID", :size=>4 do |d|
|
173
|
+
d["UID"]
|
174
|
+
end
|
175
|
+
|
176
|
+
column :USER_NAME, "User name", :left, :size=>12 do |d|
|
177
|
+
d["UNAME"]
|
178
|
+
end
|
179
|
+
|
180
|
+
column :GID, "Group ID", :size=>4 do |d|
|
181
|
+
d["GID"]
|
182
|
+
end
|
183
|
+
|
184
|
+
column :GROUP_NAME, "Group name", :left, :size=>12 do |d|
|
185
|
+
d["GNAME"]
|
186
|
+
end
|
187
|
+
|
188
|
+
column :VM_ID, "Virtual Machine ID", :size=>6 do |d|
|
189
|
+
d["VMID"]
|
190
|
+
end
|
191
|
+
|
192
|
+
column :VM_NAME, "Virtual Machine name", :left, :size=>12 do |d|
|
193
|
+
d["VMNAME"]
|
194
|
+
end
|
195
|
+
|
196
|
+
column :MONTH, "Month", :size=>5 do |d|
|
197
|
+
d["MONTH"]
|
198
|
+
end
|
199
|
+
|
200
|
+
column :YEAR, "Year", :size=>5 do |d|
|
201
|
+
d["YEAR"]
|
202
|
+
end
|
203
|
+
|
204
|
+
column :HOURS, "Hours", :size=>6 do |d|
|
205
|
+
d["HOURS"]
|
206
|
+
end
|
207
|
+
|
208
|
+
column :COST, "Cost", :size=>15 do |d|
|
209
|
+
d["TOTAL_COST"]
|
210
|
+
end
|
211
|
+
|
212
|
+
default :USER_NAME, :GROUP_NAME, :VM_ID, :VM_NAME, :MONTH, :YEAR, :HOURS, :COST
|
213
|
+
end
|
214
|
+
|
155
215
|
def self.print_start_end_time_header(start_time, end_time)
|
156
216
|
print "Showing active history records from "
|
157
217
|
|
@@ -184,4 +244,12 @@ class AcctHelper < OpenNebulaHelper::OneHelper
|
|
184
244
|
CLIHelper.scr_restore
|
185
245
|
puts
|
186
246
|
end
|
247
|
+
|
248
|
+
def self.print_month_header(year, month)
|
249
|
+
CLIHelper.scr_bold
|
250
|
+
CLIHelper.scr_underline
|
251
|
+
puts "# Showback for #{month}/#{year}".ljust(80)
|
252
|
+
CLIHelper.scr_restore
|
253
|
+
puts
|
254
|
+
end
|
187
255
|
end
|