opennebula-cli 7.1.80.pre → 7.2.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.
- checksums.yaml +4 -4
- data/bin/oneacct +1 -1
- data/bin/oneacl +1 -1
- data/bin/onebackupjob +1 -1
- data/bin/onecluster +1 -1
- data/bin/onedatastore +1 -1
- data/bin/oneflow +1 -1
- data/bin/oneflow-template +1 -1
- data/bin/oneform +1 -1
- data/bin/onegroup +1 -1
- data/bin/onehook +1 -1
- data/bin/onehost +1 -1
- data/bin/oneimage +1 -1
- data/bin/oneirb +1 -1
- data/bin/onelog +1 -1
- data/bin/onemarket +1 -1
- data/bin/onemarketapp +1 -1
- data/bin/onesecgroup +1 -1
- data/bin/oneshowback +1 -1
- data/bin/onetemplate +1 -1
- data/bin/oneuser +1 -1
- data/bin/onevdc +1 -1
- data/bin/onevm +2 -2
- data/bin/onevmgroup +1 -1
- data/bin/onevnet +1 -1
- data/bin/onevntemplate +1 -1
- data/bin/onevrouter +1 -1
- data/bin/onezone +1 -1
- data/lib/cli_helper.rb +1 -1
- data/lib/command_parser.rb +135 -126
- data/lib/load_opennebula_paths.rb +5 -0
- data/lib/ods_helper.rb +541 -0
- data/lib/one_helper/oneacct_helper.rb +117 -109
- data/lib/one_helper/oneacl_helper.rb +1 -1
- data/lib/one_helper/onebackupjob_helper.rb +1 -1
- data/lib/one_helper/onecluster_helper.rb +1 -1
- data/lib/one_helper/onedatastore_helper.rb +87 -80
- data/lib/one_helper/oneflow_helper.rb +1 -1
- data/lib/one_helper/oneflowtemplate_helper.rb +1 -1
- data/lib/one_helper/oneform_helper.rb +1 -1
- data/lib/one_helper/onegroup_helper.rb +1 -1
- data/lib/one_helper/onehook_helper.rb +1 -1
- data/lib/one_helper/onehost_helper.rb +1 -1
- data/lib/one_helper/oneimage_helper.rb +1 -1
- data/lib/one_helper/onemarket_helper.rb +59 -58
- data/lib/one_helper/onemarketapp_helper.rb +1 -1
- data/lib/one_helper/onequota_helper.rb +240 -190
- data/lib/one_helper/onesecgroup_helper.rb +87 -85
- data/lib/one_helper/onetemplate_helper.rb +64 -64
- data/lib/one_helper/oneuser_helper.rb +2 -2
- data/lib/one_helper/onevdc_helper.rb +45 -45
- data/lib/one_helper/onevm_helper.rb +6 -8
- data/lib/one_helper/onevmgroup_helper.rb +65 -63
- data/lib/one_helper/onevnet_helper.rb +1 -1
- data/lib/one_helper/onevntemplate_helper.rb +43 -40
- data/lib/one_helper/onevrouter_helper.rb +86 -87
- data/lib/one_helper/onezone_helper.rb +98 -101
- data/lib/one_helper.rb +90 -71
- data/share/schemas/xsd/acct.xsd +3 -104
- data/share/schemas/xsd/cluster.xsd +4 -21
- data/share/schemas/xsd/datastore.xsd +4 -29
- data/share/schemas/xsd/document.xsd +3 -25
- data/share/schemas/xsd/group.xsd +2 -14
- data/share/schemas/xsd/group_pool.xsd +2 -14
- data/share/schemas/xsd/hook.xsd +2 -0
- data/share/schemas/xsd/host.xsd +5 -7
- data/share/schemas/xsd/image.xsd +2 -25
- data/share/schemas/xsd/marketplace.xsd +3 -22
- data/share/schemas/xsd/marketplaceapp.xsd +3 -25
- data/share/schemas/xsd/opennebula_configuration.xsd +3 -2
- data/share/schemas/xsd/requirements.xsd +3 -21
- data/share/schemas/xsd/security_group.xsd +6 -43
- data/share/schemas/xsd/shared.xsd +3 -3
- data/share/schemas/xsd/vdc.xsd +2 -7
- data/share/schemas/xsd/vm_group.xsd +3 -25
- data/share/schemas/xsd/vm_pool.xsd +2 -0
- data/share/schemas/xsd/vmtemplate.xsd +3 -25
- data/share/schemas/xsd/vnet.xsd +9 -67
- data/share/schemas/xsd/vnet_pool.xsd +8 -57
- data/share/schemas/xsd/vntemplate.xsd +3 -25
- data/share/schemas/xsd/vrouter.xsd +4 -32
- metadata +8 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -------------------------------------------------------------------------- #
|
|
2
|
-
# Copyright 2002-
|
|
2
|
+
# Copyright 2002-2026, OpenNebula Project, OpenNebula Systems #
|
|
3
3
|
# #
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
|
5
5
|
# not use this file except in compliance with the License. You may obtain #
|
|
@@ -17,34 +17,35 @@
|
|
|
17
17
|
require 'cli_helper'
|
|
18
18
|
require 'opennebula/system'
|
|
19
19
|
|
|
20
|
+
# Helper class for Quota commands
|
|
20
21
|
class OneQuotaHelper
|
|
21
22
|
|
|
22
|
-
LIMIT_DEFAULT =
|
|
23
|
-
LIMIT_UNLIMITED =
|
|
23
|
+
LIMIT_DEFAULT = '-1'
|
|
24
|
+
LIMIT_UNLIMITED = '-2'
|
|
24
25
|
DEFAULT_VM_QUOTA = {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
26
|
+
'VMS' => LIMIT_DEFAULT,
|
|
27
|
+
'VMS_USED' => '0',
|
|
28
|
+
'CPU' => LIMIT_DEFAULT,
|
|
29
|
+
'CPU_USED' => '0',
|
|
30
|
+
'PCI_DEV' => LIMIT_DEFAULT,
|
|
31
|
+
'PCI_DEV_USED' => '0',
|
|
32
|
+
'PCI_NIC' => LIMIT_DEFAULT,
|
|
33
|
+
'PCI_NIC_USED' => '0',
|
|
34
|
+
'MEMORY' => LIMIT_DEFAULT,
|
|
35
|
+
'MEMORY_USED' => '0',
|
|
36
|
+
'RUNNING_VMS' => LIMIT_DEFAULT,
|
|
37
|
+
'RUNNING_VMS_USED' => '0',
|
|
38
|
+
'RUNNING_CPU' => LIMIT_DEFAULT,
|
|
39
|
+
'RUNNING_CPU_USED' => '0',
|
|
40
|
+
'RUNNING_MEMORY' => LIMIT_DEFAULT,
|
|
41
|
+
'RUNNING_MEMORY_USED' => '0',
|
|
42
|
+
'RUNNING_PCI_DEV' => LIMIT_DEFAULT,
|
|
43
|
+
'RUNNING_PCI_DEV_USED' => '0',
|
|
44
|
+
'RUNNING_PCI_NIC' => LIMIT_DEFAULT,
|
|
45
|
+
'RUNNING_PCI_NIC_USED' => '0',
|
|
46
|
+
'SYSTEM_DISK_SIZE' => LIMIT_DEFAULT,
|
|
47
|
+
'SYSTEM_DISK_SIZE_USED' => '0'
|
|
48
|
+
}
|
|
48
49
|
|
|
49
50
|
EDITOR_PATH='/usr/bin/vi'
|
|
50
51
|
|
|
@@ -114,8 +115,8 @@ class OneQuotaHelper
|
|
|
114
115
|
# used
|
|
115
116
|
# @param [True|False] is_default To change the help text
|
|
116
117
|
# @return [String] contents of the new quotas
|
|
117
|
-
def self.set_quota(resource, path, is_default=false)
|
|
118
|
-
str =
|
|
118
|
+
def self.set_quota(resource, path, is_default = false)
|
|
119
|
+
str = ''
|
|
119
120
|
|
|
120
121
|
if path.nil?
|
|
121
122
|
require 'tempfile'
|
|
@@ -125,25 +126,25 @@ class OneQuotaHelper
|
|
|
125
126
|
|
|
126
127
|
tmp << HELP_QUOTA
|
|
127
128
|
|
|
128
|
-
if
|
|
129
|
+
if is_default
|
|
129
130
|
tmp << HELP_DEFAULT_QUOTA_FOOTER
|
|
130
131
|
else
|
|
131
132
|
tmp << HELP_QUOTA_FOOTER
|
|
132
133
|
end
|
|
133
134
|
|
|
134
|
-
tmp << resource.template_like_str(
|
|
135
|
-
tmp << resource.template_like_str(
|
|
136
|
-
tmp << resource.template_like_str(
|
|
137
|
-
tmp << resource.template_like_str(
|
|
135
|
+
tmp << resource.template_like_str('DATASTORE_QUOTA') << "\n"
|
|
136
|
+
tmp << resource.template_like_str('VM_QUOTA') << "\n"
|
|
137
|
+
tmp << resource.template_like_str('NETWORK_QUOTA') << "\n"
|
|
138
|
+
tmp << resource.template_like_str('IMAGE_QUOTA') << "\n"
|
|
138
139
|
|
|
139
140
|
tmp.close
|
|
140
141
|
|
|
141
|
-
editor_path = ENV[
|
|
142
|
+
editor_path = ENV['EDITOR'] ? ENV['EDITOR'] : EDITOR_PATH
|
|
142
143
|
system("#{editor_path} #{path}")
|
|
143
144
|
|
|
144
|
-
unless
|
|
145
|
-
puts
|
|
146
|
-
exit
|
|
145
|
+
unless $CHILD_STATUS.exitstatus == 0
|
|
146
|
+
puts 'Editor not defined'
|
|
147
|
+
exit(-1)
|
|
147
148
|
end
|
|
148
149
|
|
|
149
150
|
str = File.read(path)
|
|
@@ -162,7 +163,7 @@ class OneQuotaHelper
|
|
|
162
163
|
# used
|
|
163
164
|
# @return [String] contents of the new quotas
|
|
164
165
|
def self.get_batch_quota(path)
|
|
165
|
-
str =
|
|
166
|
+
str = ''
|
|
166
167
|
|
|
167
168
|
if path.nil?
|
|
168
169
|
require 'tempfile'
|
|
@@ -174,12 +175,12 @@ class OneQuotaHelper
|
|
|
174
175
|
|
|
175
176
|
tmp.close
|
|
176
177
|
|
|
177
|
-
editor_path = ENV[
|
|
178
|
+
editor_path = ENV['EDITOR'] ? ENV['EDITOR'] : EDITOR_PATH
|
|
178
179
|
system("#{editor_path} #{path}")
|
|
179
180
|
|
|
180
|
-
unless
|
|
181
|
-
puts
|
|
182
|
-
exit
|
|
181
|
+
unless $CHILD_STATUS.exitstatus == 0
|
|
182
|
+
puts 'Editor not defined'
|
|
183
|
+
exit(-1)
|
|
183
184
|
end
|
|
184
185
|
|
|
185
186
|
str = File.read(path)
|
|
@@ -210,12 +211,12 @@ class OneQuotaHelper
|
|
|
210
211
|
# reading them in order and replacing the quotas with each new
|
|
211
212
|
# appearance
|
|
212
213
|
|
|
213
|
-
tmp_str =
|
|
214
|
+
tmp_str = ''
|
|
214
215
|
|
|
215
|
-
tmp_str << resource.template_like_str(
|
|
216
|
-
tmp_str << resource.template_like_str(
|
|
217
|
-
tmp_str << resource.template_like_str(
|
|
218
|
-
tmp_str << resource.template_like_str(
|
|
216
|
+
tmp_str << resource.template_like_str('DATASTORE_QUOTA') << "\n"
|
|
217
|
+
tmp_str << resource.template_like_str('VM_QUOTA') << "\n"
|
|
218
|
+
tmp_str << resource.template_like_str('NETWORK_QUOTA') << "\n"
|
|
219
|
+
tmp_str << resource.template_like_str('IMAGE_QUOTA') << "\n"
|
|
219
220
|
|
|
220
221
|
tmp_str << str
|
|
221
222
|
|
|
@@ -228,11 +229,11 @@ class OneQuotaHelper
|
|
|
228
229
|
# @param resource_id [Integer] user/group ID
|
|
229
230
|
#
|
|
230
231
|
def format_quota(qh, default_quotas, resource_id)
|
|
231
|
-
str_h1=
|
|
232
|
+
str_h1='%-80s'
|
|
232
233
|
|
|
233
234
|
puts
|
|
234
235
|
|
|
235
|
-
CLIHelper.print_header(str_h1 %
|
|
236
|
+
CLIHelper.print_header(str_h1 % 'VMS USAGE & QUOTAS', false)
|
|
236
237
|
|
|
237
238
|
puts
|
|
238
239
|
|
|
@@ -240,7 +241,7 @@ class OneQuotaHelper
|
|
|
240
241
|
|
|
241
242
|
vm_quotas = [qh['VM_QUOTA']['VM']].flatten
|
|
242
243
|
|
|
243
|
-
|
|
244
|
+
generic_q = generic_quotas
|
|
244
245
|
|
|
245
246
|
# This initializes the VM quotas for users/groups that don't have any
|
|
246
247
|
# resource usage yet. It not applied to oneadmin
|
|
@@ -248,142 +249,156 @@ class OneQuotaHelper
|
|
|
248
249
|
limit = LIMIT_DEFAULT
|
|
249
250
|
|
|
250
251
|
vm_quotas = [{
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
252
|
+
'VMS' => limit,
|
|
253
|
+
'VMS_USED' => '0',
|
|
254
|
+
'CPU' => limit,
|
|
255
|
+
'CPU_USED' => '0',
|
|
256
|
+
'MEMORY' => limit,
|
|
257
|
+
'MEMORY_USED' => '0',
|
|
258
|
+
'PCI_DEV' => limit,
|
|
259
|
+
'PCI_DEV_USED' => '0',
|
|
260
|
+
'PCI_NIC' => limit,
|
|
261
|
+
'PCI_NIC_USED' => '0',
|
|
262
|
+
'RUNNING_VMS' => limit,
|
|
263
|
+
'RUNNING_VMS_USED' => '0',
|
|
264
|
+
'RUNNING_CPU' => limit,
|
|
265
|
+
'RUNNING_CPU_USED' => '0',
|
|
266
|
+
'RUNNING_MEMORY' => limit,
|
|
267
|
+
'RUNNING_MEMORY_USED' => '0',
|
|
268
|
+
'RUNNING_PCI_DEV' => limit,
|
|
269
|
+
'RUNNING_PCI_DEV_USED' => '0',
|
|
270
|
+
'RUNNING_PCI_NIC' => limit,
|
|
271
|
+
'RUNNING_PCI_NIC_USED' => '0',
|
|
272
|
+
'SYSTEM_DISK_SIZE' => limit,
|
|
273
|
+
'SYSTEM_DISK_SIZE_USED' => '0'
|
|
273
274
|
}]
|
|
274
275
|
|
|
275
|
-
|
|
276
|
+
generic_q.each do |q|
|
|
276
277
|
vm_quotas[0][q] = limit
|
|
277
|
-
vm_quotas[0]["#{q}_USED"] =
|
|
278
|
+
vm_quotas[0]["#{q}_USED"] = '0'
|
|
278
279
|
vm_quotas[0]["RUNNING_#{q}"] = limit
|
|
279
|
-
vm_quotas[0]["RUNNING_#{q}_USED"] =
|
|
280
|
+
vm_quotas[0]["RUNNING_#{q}_USED"] = '0'
|
|
280
281
|
end
|
|
281
282
|
end
|
|
282
283
|
|
|
283
284
|
if !vm_quotas[0].nil?
|
|
284
285
|
CLIHelper::ShowTable.new(nil, self) do
|
|
285
|
-
column :
|
|
286
|
+
column :CLUSTERS, '', :right, :size=>8 do |d|
|
|
286
287
|
if !d.nil?
|
|
287
288
|
d['CLUSTER_IDS']
|
|
288
289
|
end
|
|
289
290
|
end
|
|
290
291
|
|
|
291
|
-
column :
|
|
292
|
+
column :VMS, '', :right, :size=>9 do |d|
|
|
292
293
|
if !d.nil?
|
|
293
294
|
elem = 'VMS'
|
|
294
295
|
limit = d[elem]
|
|
295
296
|
limit = helper.get_default_limit(
|
|
296
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
297
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
298
|
+
)
|
|
297
299
|
|
|
298
300
|
if limit == LIMIT_UNLIMITED
|
|
299
|
-
|
|
301
|
+
format('%<used>3d / -', :used => d['VMS_USED'])
|
|
300
302
|
else
|
|
301
|
-
|
|
303
|
+
format('%<used>3d / %<limit>3d',
|
|
304
|
+
:used => d['VMS_USED'], :limit => limit)
|
|
302
305
|
end
|
|
303
306
|
end
|
|
304
307
|
end
|
|
305
308
|
|
|
306
|
-
column :
|
|
309
|
+
column :MEMORY, '', :right, :size=>15 do |d|
|
|
307
310
|
if !d.nil?
|
|
308
311
|
elem = 'MEMORY'
|
|
309
312
|
limit = d[elem]
|
|
310
313
|
limit = helper.get_default_limit(
|
|
311
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
314
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
315
|
+
)
|
|
312
316
|
|
|
313
317
|
if limit == LIMIT_UNLIMITED
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
318
|
+
format('%<used>6s / -',
|
|
319
|
+
:used => OpenNebulaHelper.unit_to_str(d['MEMORY_USED'].to_i, {},
|
|
320
|
+
'M'))
|
|
317
321
|
else
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
+
format('%<used>6s / %<limit>6s',
|
|
323
|
+
:used => OpenNebulaHelper.unit_to_str(d['MEMORY_USED'].to_i, {},
|
|
324
|
+
'M'),
|
|
325
|
+
:limit => OpenNebulaHelper.unit_to_str(limit.to_i, {}, 'M'))
|
|
322
326
|
end
|
|
323
327
|
end
|
|
324
328
|
end
|
|
325
329
|
|
|
326
|
-
column :
|
|
330
|
+
column :CPU, '', :right, :size=>15 do |d|
|
|
327
331
|
if !d.nil?
|
|
328
332
|
elem = 'CPU'
|
|
329
333
|
limit = d[elem]
|
|
330
334
|
limit = helper.get_default_limit(
|
|
331
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
335
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
336
|
+
)
|
|
332
337
|
|
|
333
338
|
if limit == LIMIT_UNLIMITED
|
|
334
|
-
|
|
339
|
+
format('%<used>6.1f / -', :used => d['CPU_USED'])
|
|
335
340
|
else
|
|
336
|
-
|
|
341
|
+
format('%<used>6.1f / %<limit>6.2f',
|
|
342
|
+
:used => d['CPU_USED'], :limit => limit)
|
|
337
343
|
end
|
|
338
344
|
end
|
|
339
345
|
end
|
|
340
346
|
|
|
341
|
-
column :"PCI DEV",
|
|
347
|
+
column :"PCI DEV", '', :right, :size=>9 do |d|
|
|
342
348
|
if !d.nil?
|
|
343
349
|
elem = 'PCI_DEV'
|
|
344
350
|
limit = d[elem]
|
|
345
351
|
limit = helper.get_default_limit(
|
|
346
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
352
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
353
|
+
)
|
|
347
354
|
|
|
348
355
|
if limit == LIMIT_UNLIMITED
|
|
349
|
-
|
|
356
|
+
format('%<used>3d / -', :used => d['PCI_DEV_USED'])
|
|
350
357
|
else
|
|
351
|
-
|
|
358
|
+
format('%<used>3d / %<limit>3d',
|
|
359
|
+
:used => d['PCI_DEV_USED'], :limit => limit)
|
|
352
360
|
end
|
|
353
361
|
end
|
|
354
362
|
end
|
|
355
363
|
|
|
356
|
-
column :"PCI NIC",
|
|
364
|
+
column :"PCI NIC", '', :right, :size=>9 do |d|
|
|
357
365
|
if !d.nil?
|
|
358
366
|
elem = 'PCI_NIC'
|
|
359
367
|
limit = d[elem]
|
|
360
368
|
limit = helper.get_default_limit(
|
|
361
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
369
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
370
|
+
)
|
|
362
371
|
|
|
363
372
|
if limit == LIMIT_UNLIMITED
|
|
364
|
-
|
|
373
|
+
format('%<used>3d / -', :used => d['PCI_NIC_USED'])
|
|
365
374
|
else
|
|
366
|
-
|
|
375
|
+
format('%<used>3d / %<limit>3d',
|
|
376
|
+
:used => d['PCI_NIC_USED'], :limit => limit)
|
|
367
377
|
end
|
|
368
378
|
end
|
|
369
379
|
end
|
|
370
380
|
|
|
371
|
-
column :"DISK SIZE",
|
|
381
|
+
column :"DISK SIZE", '', :right, :size=>15 do |d|
|
|
372
382
|
if !d.nil?
|
|
373
383
|
elem = 'SYSTEM_DISK_SIZE'
|
|
374
384
|
limit = d[elem]
|
|
375
385
|
limit = helper.get_default_limit(
|
|
376
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
386
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
387
|
+
)
|
|
377
388
|
|
|
378
389
|
if limit == LIMIT_UNLIMITED
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
390
|
+
format('%<used>6s / -',
|
|
391
|
+
:used => OpenNebulaHelper.unit_to_str(
|
|
392
|
+
d['SYSTEM_DISK_SIZE_USED'].to_i, {}, 'M'
|
|
393
|
+
))
|
|
382
394
|
else
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
395
|
+
format('%<used>6s / %<limit>6s',
|
|
396
|
+
:used => OpenNebulaHelper.unit_to_str(
|
|
397
|
+
d['SYSTEM_DISK_SIZE_USED'].to_i, {}, 'M'
|
|
398
|
+
),
|
|
399
|
+
:limit => OpenNebulaHelper.unit_to_str(
|
|
400
|
+
limit.to_i, {}, 'M'
|
|
401
|
+
))
|
|
387
402
|
end
|
|
388
403
|
end
|
|
389
404
|
end
|
|
@@ -392,107 +407,123 @@ class OneQuotaHelper
|
|
|
392
407
|
puts
|
|
393
408
|
end
|
|
394
409
|
|
|
395
|
-
CLIHelper.print_header(str_h1 %
|
|
410
|
+
CLIHelper.print_header(str_h1 % 'VMS USAGE & QUOTAS - RUNNING', false)
|
|
396
411
|
|
|
397
412
|
puts
|
|
398
413
|
|
|
399
414
|
if !vm_quotas[0].nil?
|
|
400
415
|
CLIHelper::ShowTable.new(nil, self) do
|
|
401
|
-
column :
|
|
416
|
+
column :CLUSTERS, '', :right, :size=>8 do |d|
|
|
402
417
|
if !d.nil?
|
|
403
418
|
d['CLUSTER_IDS']
|
|
404
419
|
end
|
|
405
420
|
end
|
|
406
|
-
column :"RUN VMS",
|
|
421
|
+
column :"RUN VMS", '', :right, :size=>9 do |d|
|
|
407
422
|
if !d.nil?
|
|
408
423
|
elem = 'RUNNING_VMS'
|
|
409
424
|
limit = d[elem] || LIMIT_UNLIMITED
|
|
410
425
|
limit = helper.get_default_limit(
|
|
411
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
426
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
427
|
+
)
|
|
412
428
|
|
|
413
|
-
if d[
|
|
414
|
-
d[
|
|
429
|
+
if d['RUNNING_VMS_USED'].nil?
|
|
430
|
+
d['RUNNING_VMS_USED'] = 0
|
|
415
431
|
end
|
|
416
432
|
|
|
417
433
|
if limit == LIMIT_UNLIMITED
|
|
418
|
-
|
|
434
|
+
format('%<used>3d / -', :used => d['RUNNING_VMS_USED'])
|
|
419
435
|
else
|
|
420
|
-
|
|
436
|
+
format('%<used>3d / %<limit>3d',
|
|
437
|
+
:used => d['RUNNING_VMS_USED'],
|
|
438
|
+
:limit => limit)
|
|
421
439
|
end
|
|
422
440
|
end
|
|
423
441
|
end
|
|
424
442
|
|
|
425
|
-
column :"RUN MEMORY",
|
|
443
|
+
column :"RUN MEMORY", '', :right, :size=>15 do |d|
|
|
426
444
|
if !d.nil?
|
|
427
445
|
elem = 'RUNNING_MEMORY'
|
|
428
446
|
limit = d[elem] || LIMIT_UNLIMITED
|
|
429
447
|
limit = helper.get_default_limit(
|
|
430
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
448
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
449
|
+
)
|
|
431
450
|
|
|
432
|
-
if d[
|
|
433
|
-
d[
|
|
451
|
+
if d['RUNNING_MEMORY_USED'].nil?
|
|
452
|
+
d['RUNNING_MEMORY_USED'] = 0
|
|
434
453
|
end
|
|
435
454
|
|
|
436
455
|
if limit == LIMIT_UNLIMITED
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
456
|
+
format('%<used>6s / -',
|
|
457
|
+
:used => OpenNebulaHelper.unit_to_str(
|
|
458
|
+
d['RUNNING_MEMORY_USED'].to_i, {}, 'M'
|
|
459
|
+
))
|
|
440
460
|
else
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
461
|
+
format('%<used>6s / %<limit>6s',
|
|
462
|
+
:used => OpenNebulaHelper.unit_to_str(
|
|
463
|
+
d['RUNNING_MEMORY_USED'].to_i, {}, 'M'
|
|
464
|
+
),
|
|
465
|
+
:limit => OpenNebulaHelper.unit_to_str(
|
|
466
|
+
limit.to_i, {}, 'M'
|
|
467
|
+
))
|
|
445
468
|
end
|
|
446
469
|
end
|
|
447
470
|
end
|
|
448
471
|
|
|
449
|
-
column :"RUN CPU",
|
|
472
|
+
column :"RUN CPU", '', :right, :size=>15 do |d|
|
|
450
473
|
if !d.nil?
|
|
451
474
|
elem = 'RUNNING_CPU'
|
|
452
475
|
limit = d[elem] || LIMIT_UNLIMITED
|
|
453
476
|
limit = helper.get_default_limit(
|
|
454
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
477
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
478
|
+
)
|
|
455
479
|
|
|
456
|
-
if d[
|
|
457
|
-
d[
|
|
480
|
+
if d['RUNNING_CPU_USED'].nil?
|
|
481
|
+
d['RUNNING_CPU_USED'] = 0
|
|
458
482
|
end
|
|
459
483
|
|
|
460
484
|
if limit == LIMIT_UNLIMITED
|
|
461
|
-
|
|
485
|
+
format('%<used>6.1f / -',
|
|
486
|
+
:used => d['RUNNING_CPU_USED'])
|
|
462
487
|
else
|
|
463
|
-
|
|
488
|
+
format('%<used>6.1f / %<limit>6.1f',
|
|
489
|
+
:used => d['RUNNING_CPU_USED'],
|
|
490
|
+
:limit => limit)
|
|
464
491
|
end
|
|
465
492
|
end
|
|
466
493
|
end
|
|
467
494
|
|
|
468
|
-
column :"RUN PCI",
|
|
495
|
+
column :"RUN PCI", '', :right, :size=>12 do |d|
|
|
469
496
|
if !d.nil?
|
|
470
497
|
elem = 'RUNNING_PCI_DEV'
|
|
471
498
|
limit = d[elem] || LIMIT_UNLIMITED
|
|
472
499
|
limit = helper.get_default_limit(
|
|
473
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
500
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
501
|
+
)
|
|
474
502
|
value = d['RUNNING_PCI_DEV_USED'] || 0
|
|
475
503
|
|
|
476
504
|
if limit == LIMIT_UNLIMITED
|
|
477
|
-
|
|
505
|
+
format('%<used>3s / -', :used => value)
|
|
478
506
|
else
|
|
479
|
-
|
|
507
|
+
format('%<used>3s / %<limit>3s',
|
|
508
|
+
:used => value, :limit => limit)
|
|
480
509
|
end
|
|
481
510
|
end
|
|
482
511
|
end
|
|
483
512
|
|
|
484
|
-
column :"RUN PCI NIC",
|
|
513
|
+
column :"RUN PCI NIC", '', :right, :size=>12 do |d|
|
|
485
514
|
if !d.nil?
|
|
486
515
|
elem = 'RUNNING_PCI_NIC'
|
|
487
516
|
limit = d[elem] || LIMIT_UNLIMITED
|
|
488
517
|
limit = helper.get_default_limit(
|
|
489
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
518
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
519
|
+
)
|
|
490
520
|
value = d['RUNNING_PCI_NIC_USED'] || 0
|
|
491
521
|
|
|
492
522
|
if limit == LIMIT_UNLIMITED
|
|
493
|
-
|
|
523
|
+
format('%<used>3s / -', :used => value)
|
|
494
524
|
else
|
|
495
|
-
|
|
525
|
+
format('%<used>3s / %<limit>3s',
|
|
526
|
+
:used => value, :limit => limit)
|
|
496
527
|
end
|
|
497
528
|
end
|
|
498
529
|
end
|
|
@@ -501,22 +532,26 @@ class OneQuotaHelper
|
|
|
501
532
|
puts
|
|
502
533
|
end
|
|
503
534
|
|
|
504
|
-
if !
|
|
505
|
-
CLIHelper.print_header(str_h1 %
|
|
506
|
-
size = [80 /
|
|
535
|
+
if !generic_q.empty? && !vm_quotas[0].nil?
|
|
536
|
+
CLIHelper.print_header(str_h1 % 'VMS GENERIC QUOTAS', false)
|
|
537
|
+
size = [80 / generic_q.length - 1, 18].min
|
|
507
538
|
|
|
508
539
|
CLIHelper::ShowTable.new(nil, self) do
|
|
509
|
-
|
|
510
|
-
column elem.to_sym,
|
|
540
|
+
generic_q.each do |elem|
|
|
541
|
+
column elem.to_sym, '', :right, :size=>size do |d|
|
|
511
542
|
if !d.nil?
|
|
512
543
|
limit = d[elem]
|
|
513
544
|
limit = helper.get_default_limit(
|
|
514
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
545
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
546
|
+
)
|
|
515
547
|
|
|
516
548
|
if limit == LIMIT_UNLIMITED
|
|
517
|
-
|
|
549
|
+
format('%<used>6s / -',
|
|
550
|
+
:used => d["#{elem}_USED"])
|
|
518
551
|
else
|
|
519
|
-
|
|
552
|
+
format('%<used>6s / %<limit>6s',
|
|
553
|
+
:used => d["#{elem}_USED"],
|
|
554
|
+
:limit => limit)
|
|
520
555
|
end
|
|
521
556
|
end
|
|
522
557
|
end
|
|
@@ -525,22 +560,26 @@ class OneQuotaHelper
|
|
|
525
560
|
|
|
526
561
|
puts
|
|
527
562
|
|
|
528
|
-
CLIHelper.print_header(str_h1 %
|
|
529
|
-
size = [80 /
|
|
563
|
+
CLIHelper.print_header(str_h1 % 'VMS GENERIC RUNNING QUOTAS', false)
|
|
564
|
+
size = [80 / generic_q.length - 1, 18].min
|
|
530
565
|
|
|
531
566
|
CLIHelper::ShowTable.new(nil, self) do
|
|
532
|
-
|
|
567
|
+
generic_q.each do |q|
|
|
533
568
|
elem = "RUNNING_#{q}"
|
|
534
|
-
column elem.to_sym,
|
|
569
|
+
column elem.to_sym, '', :right, :size=>size do |d|
|
|
535
570
|
if !d.nil?
|
|
536
571
|
limit = d[elem]
|
|
537
572
|
limit = helper.get_default_limit(
|
|
538
|
-
limit, "VM_QUOTA/VM/#{elem}"
|
|
573
|
+
limit, "VM_QUOTA/VM/#{elem}"
|
|
574
|
+
)
|
|
539
575
|
|
|
540
576
|
if limit == LIMIT_UNLIMITED
|
|
541
|
-
|
|
577
|
+
format('%<used>6s / -',
|
|
578
|
+
:used => d["#{elem}_USED"])
|
|
542
579
|
else
|
|
543
|
-
|
|
580
|
+
format('%<used>6s / %<limit>6s',
|
|
581
|
+
:used => d["#{elem}_USED"],
|
|
582
|
+
:limit => limit)
|
|
544
583
|
end
|
|
545
584
|
end
|
|
546
585
|
end
|
|
@@ -550,7 +589,7 @@ class OneQuotaHelper
|
|
|
550
589
|
puts
|
|
551
590
|
end
|
|
552
591
|
|
|
553
|
-
CLIHelper.print_header(str_h1 %
|
|
592
|
+
CLIHelper.print_header(str_h1 % 'DATASTORE USAGE & QUOTAS', false)
|
|
554
593
|
|
|
555
594
|
puts
|
|
556
595
|
|
|
@@ -558,41 +597,48 @@ class OneQuotaHelper
|
|
|
558
597
|
|
|
559
598
|
if !ds_quotas[0].nil?
|
|
560
599
|
CLIHelper::ShowTable.new(nil, self) do
|
|
561
|
-
column :
|
|
562
|
-
d[
|
|
600
|
+
column :ID, '', :size=>12 do |d|
|
|
601
|
+
d['ID'] unless d.nil?
|
|
563
602
|
end
|
|
564
603
|
|
|
565
|
-
column :
|
|
604
|
+
column :IMAGES, '', :right, :size=>20 do |d|
|
|
566
605
|
if !d.nil?
|
|
567
606
|
elem = 'IMAGES'
|
|
568
607
|
limit = d[elem]
|
|
569
608
|
limit = helper.get_default_limit(
|
|
570
|
-
limit, "DATASTORE_QUOTA/DATASTORE[ID=#{d['ID']}]/#{elem}"
|
|
609
|
+
limit, "DATASTORE_QUOTA/DATASTORE[ID=#{d['ID']}]/#{elem}"
|
|
610
|
+
)
|
|
571
611
|
|
|
572
612
|
if limit == LIMIT_UNLIMITED
|
|
573
|
-
|
|
613
|
+
format('%<used>8d / -', :used => d['IMAGES_USED'])
|
|
574
614
|
else
|
|
575
|
-
|
|
615
|
+
format('%<used>8d / %<limit>8d',
|
|
616
|
+
:used => d['IMAGES_USED'], :limit => limit)
|
|
576
617
|
end
|
|
577
618
|
end
|
|
578
619
|
end
|
|
579
620
|
|
|
580
|
-
column :
|
|
621
|
+
column :SIZE, '', :right, :size=>19 do |d|
|
|
581
622
|
if !d.nil?
|
|
582
623
|
elem = 'SIZE'
|
|
583
624
|
limit = d[elem]
|
|
584
625
|
limit = helper.get_default_limit(
|
|
585
|
-
limit, "DATASTORE_QUOTA/DATASTORE[ID=#{d['ID']}]/#{elem}"
|
|
626
|
+
limit, "DATASTORE_QUOTA/DATASTORE[ID=#{d['ID']}]/#{elem}"
|
|
627
|
+
)
|
|
586
628
|
|
|
587
629
|
if limit == LIMIT_UNLIMITED
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
630
|
+
format('%<used>8s / -',
|
|
631
|
+
:used => OpenNebulaHelper.unit_to_str(
|
|
632
|
+
d['SIZE_USED'].to_i, {}, 'M'
|
|
633
|
+
))
|
|
591
634
|
else
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
635
|
+
format('%<used>8s / %<limit>8s',
|
|
636
|
+
:used => OpenNebulaHelper.unit_to_str(
|
|
637
|
+
d['SIZE_USED'].to_i, {}, 'M'
|
|
638
|
+
),
|
|
639
|
+
:limit => OpenNebulaHelper.unit_to_str(
|
|
640
|
+
limit.to_i, {}, 'M'
|
|
641
|
+
))
|
|
596
642
|
end
|
|
597
643
|
end
|
|
598
644
|
end
|
|
@@ -601,7 +647,7 @@ class OneQuotaHelper
|
|
|
601
647
|
puts
|
|
602
648
|
end
|
|
603
649
|
|
|
604
|
-
CLIHelper.print_header(str_h1 %
|
|
650
|
+
CLIHelper.print_header(str_h1 % 'NETWORK USAGE & QUOTAS', false)
|
|
605
651
|
|
|
606
652
|
puts
|
|
607
653
|
|
|
@@ -609,21 +655,23 @@ class OneQuotaHelper
|
|
|
609
655
|
|
|
610
656
|
if !net_quotas[0].nil?
|
|
611
657
|
CLIHelper::ShowTable.new(nil, self) do
|
|
612
|
-
column :
|
|
613
|
-
d[
|
|
658
|
+
column :ID, '', :size=>12 do |d|
|
|
659
|
+
d['ID'] unless d.nil?
|
|
614
660
|
end
|
|
615
661
|
|
|
616
|
-
column :
|
|
662
|
+
column :LEASES, '', :right, :size=>20 do |d|
|
|
617
663
|
if !d.nil?
|
|
618
664
|
elem = 'LEASES'
|
|
619
665
|
limit = d[elem]
|
|
620
666
|
limit = helper.get_default_limit(
|
|
621
|
-
limit, "NETWORK_QUOTA/NETWORK[ID=#{d['ID']}]/#{elem}"
|
|
667
|
+
limit, "NETWORK_QUOTA/NETWORK[ID=#{d['ID']}]/#{elem}"
|
|
668
|
+
)
|
|
622
669
|
|
|
623
670
|
if limit == LIMIT_UNLIMITED
|
|
624
|
-
|
|
671
|
+
format('%<used>8d / -', :used => d['LEASES_USED'])
|
|
625
672
|
else
|
|
626
|
-
|
|
673
|
+
format('%<used>8d / %<limit>8d',
|
|
674
|
+
:used => d['LEASES_USED'], :limit => limit)
|
|
627
675
|
end
|
|
628
676
|
end
|
|
629
677
|
end
|
|
@@ -632,7 +680,7 @@ class OneQuotaHelper
|
|
|
632
680
|
puts
|
|
633
681
|
end
|
|
634
682
|
|
|
635
|
-
CLIHelper.print_header(str_h1 %
|
|
683
|
+
CLIHelper.print_header(str_h1 % 'IMAGE USAGE & QUOTAS', false)
|
|
636
684
|
|
|
637
685
|
puts
|
|
638
686
|
|
|
@@ -640,21 +688,23 @@ class OneQuotaHelper
|
|
|
640
688
|
|
|
641
689
|
if !image_quotas[0].nil?
|
|
642
690
|
CLIHelper::ShowTable.new(nil, self) do
|
|
643
|
-
column :
|
|
644
|
-
d[
|
|
691
|
+
column :ID, '', :size=>12 do |d|
|
|
692
|
+
d['ID'] unless d.nil?
|
|
645
693
|
end
|
|
646
694
|
|
|
647
|
-
column :"RUNNING VMS",
|
|
695
|
+
column :"RUNNING VMS", '', :right, :size=>20 do |d|
|
|
648
696
|
if !d.nil?
|
|
649
697
|
elem = 'RVMS'
|
|
650
698
|
limit = d[elem]
|
|
651
699
|
limit = helper.get_default_limit(
|
|
652
|
-
limit, "IMAGE_QUOTA/IMAGE[ID=#{d['ID']}]/RVMS"
|
|
700
|
+
limit, "IMAGE_QUOTA/IMAGE[ID=#{d['ID']}]/RVMS"
|
|
701
|
+
)
|
|
653
702
|
|
|
654
703
|
if limit == LIMIT_UNLIMITED
|
|
655
|
-
|
|
704
|
+
format('%<used>8d / -', :used => d['RVMS_USED'])
|
|
656
705
|
else
|
|
657
|
-
|
|
706
|
+
format('%<used>8d / %<limit>8d',
|
|
707
|
+
:used => d['RVMS_USED'], :limit => limit)
|
|
658
708
|
end
|
|
659
709
|
end
|
|
660
710
|
end
|
|
@@ -667,7 +717,7 @@ class OneQuotaHelper
|
|
|
667
717
|
if !@default_quotas.nil?
|
|
668
718
|
limit = @default_quotas[xpath]
|
|
669
719
|
|
|
670
|
-
limit = LIMIT_UNLIMITED if limit.nil? || limit ==
|
|
720
|
+
limit = LIMIT_UNLIMITED if limit.nil? || limit == ''
|
|
671
721
|
else
|
|
672
722
|
limit = LIMIT_UNLIMITED
|
|
673
723
|
end
|
|
@@ -678,7 +728,7 @@ class OneQuotaHelper
|
|
|
678
728
|
|
|
679
729
|
private
|
|
680
730
|
|
|
681
|
-
def
|
|
731
|
+
def generic_quotas
|
|
682
732
|
conf = OpenNebula::System.new(@client).get_configuration
|
|
683
733
|
|
|
684
734
|
return [] if OpenNebula.is_error?(conf)
|