opennebula-cli 7.2.0 → 7.3.80.pre
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/oneflow +52 -1
- data/bin/onegroup +33 -0
- data/bin/oneimage +7 -2
- data/bin/onesecgroup +2 -1
- data/bin/onevm +27 -8
- data/bin/onevnet +6 -21
- data/bin/onevntemplate +3 -3
- data/lib/command_parser.rb +134 -125
- data/lib/load_opennebula_paths.rb +5 -0
- data/lib/ods_helper.rb +724 -0
- data/lib/one_helper/oneacct_helper.rb +116 -108
- data/lib/one_helper/onedatastore_helper.rb +86 -79
- data/lib/one_helper/onegroup_helper.rb +20 -0
- data/lib/one_helper/onehost_helper.rb +10 -1
- data/lib/one_helper/oneimage_helper.rb +9 -2
- data/lib/one_helper/onemarket_helper.rb +58 -57
- data/lib/one_helper/onequota_helper.rb +239 -189
- data/lib/one_helper/onesecgroup_helper.rb +86 -84
- data/lib/one_helper/onetemplate_helper.rb +63 -63
- data/lib/one_helper/onevdc_helper.rb +44 -44
- data/lib/one_helper/onevm_helper.rb +5 -12
- data/lib/one_helper/onevmgroup_helper.rb +65 -64
- data/lib/one_helper/onevnet_helper.rb +6 -2
- data/lib/one_helper/onevntemplate_helper.rb +42 -39
- data/lib/one_helper/onevrouter_helper.rb +85 -86
- data/lib/one_helper/onezone_helper.rb +97 -100
- data/lib/one_helper.rb +102 -70
- data/share/schemas/xsd/acct.xsd +3 -104
- data/share/schemas/xsd/backupjob.xsd +1 -0
- 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 +17 -13
- data/share/schemas/xsd/group_pool.xsd +18 -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 +2 -0
- 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.xsd +2 -0
- 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 +13 -67
- data/share/schemas/xsd/vnet_pool.xsd +13 -58
- data/share/schemas/xsd/vntemplate.xsd +3 -25
- data/share/schemas/xsd/vrouter.xsd +4 -32
- metadata +8 -6
|
@@ -313,6 +313,26 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
|
|
|
313
313
|
|
|
314
314
|
helper = OneQuotaHelper.new(@client)
|
|
315
315
|
helper.format_quota(group_hash['GROUP'], default_quotas, group.id)
|
|
316
|
+
|
|
317
|
+
CLIHelper.print_header(str_h1 % 'VLAN RULES', false)
|
|
318
|
+
|
|
319
|
+
rules = [group_hash['GROUP']['VLAN_RULES']['RULE']].flatten rescue []
|
|
320
|
+
rules.compact!
|
|
321
|
+
|
|
322
|
+
CLIHelper::ShowTable.new(nil, self) do
|
|
323
|
+
column :VLAN_ID, 'VLAN Identifier range', :left, :size => 15 do |d|
|
|
324
|
+
d['ID']
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
column :SCOPE, 'Scope of the rule', :left, :size => 15 do |d|
|
|
328
|
+
d['SCOPE']
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
column :VNTEMPLATE, 'VN Template ID range', :left, :size => 15 do |d|
|
|
332
|
+
d['VNTEMPLATE'] || '-'
|
|
333
|
+
end
|
|
334
|
+
end.show(rules)
|
|
335
|
+
puts
|
|
316
336
|
end
|
|
317
337
|
|
|
318
338
|
end
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
|
|
17
17
|
require 'time'
|
|
18
18
|
require 'fileutils'
|
|
19
|
-
require 'HostSyncManager'
|
|
20
19
|
require 'one_helper'
|
|
21
20
|
require 'one_helper/onevm_helper'
|
|
22
21
|
require 'opennebula/host'
|
|
@@ -198,6 +197,16 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
|
198
197
|
|
|
199
198
|
NUM_THREADS = 15
|
|
200
199
|
def sync(host_ids, options)
|
|
200
|
+
# HostSyncManager lives in the driver tree and is only shipped with the
|
|
201
|
+
# server packages. It is required lazily here so that a CLI-only install
|
|
202
|
+
# (opennebula-tools) keeps working for every other onehost subcommand,
|
|
203
|
+
# and only 'onehost sync' degrades when the driver libs are absent.
|
|
204
|
+
begin
|
|
205
|
+
require 'HostSyncManager'
|
|
206
|
+
rescue LoadError
|
|
207
|
+
return -1, "'onehost sync' is only available on the frontend."
|
|
208
|
+
end
|
|
209
|
+
|
|
201
210
|
if Process.uid.zero? || Process.gid.zero?
|
|
202
211
|
STDERR.puts("Cannot run 'onehost sync' as root")
|
|
203
212
|
exit(-1)
|
|
@@ -18,6 +18,7 @@ require 'one_helper'
|
|
|
18
18
|
require 'one_helper/onevm_helper'
|
|
19
19
|
require 'opennebula/image'
|
|
20
20
|
require 'opennebula/image_pool'
|
|
21
|
+
require 'opennebula/template_pool'
|
|
21
22
|
|
|
22
23
|
# CLI helper for oneimage command
|
|
23
24
|
class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
@@ -273,8 +274,11 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
|
273
274
|
pool = factory_pool
|
|
274
275
|
tmpl_pool = OpenNebula::TemplatePool.new(@client, -2)
|
|
275
276
|
|
|
276
|
-
pool.info
|
|
277
|
-
|
|
277
|
+
rc = pool.info
|
|
278
|
+
return rc if OpenNebula.is_error?(rc)
|
|
279
|
+
|
|
280
|
+
rc = tmpl_pool.info
|
|
281
|
+
return rc if OpenNebula.is_error?(rc)
|
|
278
282
|
|
|
279
283
|
pool.each do |img|
|
|
280
284
|
next if img['TYPE'].to_i == 6 # skip backup images
|
|
@@ -366,6 +370,9 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
|
366
370
|
CLIHelper.print_header(str_h1 % 'BACKUP INFORMATION', false)
|
|
367
371
|
puts format(str, 'VM', vms[0])
|
|
368
372
|
|
|
373
|
+
disk_ids = image.retrieve_elements('BACKUP_DISK_IDS/ID')
|
|
374
|
+
puts format(str, 'DISK IDS', disk_ids.join(',')) if disk_ids
|
|
375
|
+
|
|
369
376
|
if image.has_elements?('/IMAGE/BACKUP_INCREMENTS/INCREMENT')
|
|
370
377
|
puts format(str, 'TYPE', 'INCREMENTAL')
|
|
371
378
|
|
|
@@ -18,24 +18,26 @@ require 'one_helper'
|
|
|
18
18
|
require 'opennebula/marketplace'
|
|
19
19
|
require 'opennebula/marketplace_pool'
|
|
20
20
|
|
|
21
|
+
# Helper class for Marketplace commands
|
|
21
22
|
class OneMarketPlaceHelper < OpenNebulaHelper::OneHelper
|
|
23
|
+
|
|
22
24
|
MARKETPLACE = {
|
|
23
|
-
:name =>
|
|
24
|
-
:short =>
|
|
25
|
-
:large =>
|
|
26
|
-
:description =>
|
|
25
|
+
:name => 'marketplace',
|
|
26
|
+
:short => '-m id|name',
|
|
27
|
+
:large => '--marketplace id|name',
|
|
28
|
+
:description => 'Selects the marketplace',
|
|
27
29
|
:format => String,
|
|
28
|
-
:proc => lambda {
|
|
29
|
-
OpenNebulaHelper.rname_to_id(o,
|
|
30
|
+
:proc => lambda {|o, _options|
|
|
31
|
+
OpenNebulaHelper.rname_to_id(o, 'MARKETPLACE')
|
|
30
32
|
}
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
def self.rname
|
|
34
|
-
|
|
36
|
+
'MARKETPLACE'
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
def self.conf_file
|
|
38
|
-
|
|
40
|
+
'onemarket.yaml'
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
def self.state_to_str(id)
|
|
@@ -47,51 +49,51 @@ class OneMarketPlaceHelper < OpenNebulaHelper::OneHelper
|
|
|
47
49
|
def format_pool(options)
|
|
48
50
|
config_file = self.class.table_conf
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
column :ID,
|
|
52
|
-
d[
|
|
52
|
+
CLIHelper::ShowTable.new(config_file, self) do
|
|
53
|
+
column :ID, 'ONE identifier for the Marketplace', :size=>4 do |d|
|
|
54
|
+
d['ID']
|
|
53
55
|
end
|
|
54
56
|
|
|
55
|
-
column :USER,
|
|
56
|
-
|
|
57
|
+
column :USER, 'Username of the Marketplace owner', :left,
|
|
58
|
+
:size=>10 do |d|
|
|
57
59
|
helper.user_name(d, options)
|
|
58
60
|
end
|
|
59
61
|
|
|
60
|
-
column :GROUP,
|
|
61
|
-
|
|
62
|
+
column :GROUP, 'Group of the Marketplace', :left,
|
|
63
|
+
:size=>10 do |d|
|
|
62
64
|
helper.group_name(d, options)
|
|
63
65
|
end
|
|
64
66
|
|
|
65
|
-
column :NAME,
|
|
66
|
-
d[
|
|
67
|
+
column :NAME, 'Name of the Marketplace', :left, :size=>30 do |d|
|
|
68
|
+
d['NAME']
|
|
67
69
|
end
|
|
68
70
|
|
|
69
|
-
column :SIZE,
|
|
71
|
+
column :SIZE, 'Marketplace total size', :size =>10 do |d|
|
|
70
72
|
OpenNebulaHelper.unit_to_str(d['TOTAL_MB'].to_i, {}, 'M')
|
|
71
73
|
end
|
|
72
74
|
|
|
73
|
-
column :AVAIL,
|
|
75
|
+
column :AVAIL, 'Marketplace free size', :left, :size =>10 do |d|
|
|
74
76
|
if d['TOTAL_MB'].to_i == 0
|
|
75
|
-
|
|
77
|
+
'-'
|
|
76
78
|
else
|
|
77
|
-
"#{((d['FREE_MB'].to_f/d['TOTAL_MB'].to_f) * 100).round
|
|
79
|
+
"#{((d['FREE_MB'].to_f/d['TOTAL_MB'].to_f) * 100).round}%"
|
|
78
80
|
end
|
|
79
81
|
end
|
|
80
82
|
|
|
81
|
-
column :APPS,
|
|
82
|
-
if d[
|
|
83
|
-
|
|
83
|
+
column :APPS, 'Number of marketplace apps', :size=>6 do |d|
|
|
84
|
+
if d['MARKETPLACEAPPS']['ID'].nil?
|
|
85
|
+
'0'
|
|
84
86
|
else
|
|
85
|
-
[d[
|
|
87
|
+
[d['MARKETPLACEAPPS']['ID']].flatten.size
|
|
86
88
|
end
|
|
87
89
|
end
|
|
88
90
|
|
|
89
|
-
column :MAD,
|
|
90
|
-
d[
|
|
91
|
+
column :MAD, 'Marketplace driver', :left, :size=>7 do |d|
|
|
92
|
+
d['MARKET_MAD']
|
|
91
93
|
end
|
|
92
94
|
|
|
93
|
-
column :ZONE,
|
|
94
|
-
d[
|
|
95
|
+
column :ZONE, 'Zone ID', :size=>4 do |d|
|
|
96
|
+
d['ZONE_ID']
|
|
95
97
|
end
|
|
96
98
|
|
|
97
99
|
column :STAT, 'Markeplace status', :left, :size => 4 do |d|
|
|
@@ -100,13 +102,11 @@ class OneMarketPlaceHelper < OpenNebulaHelper::OneHelper
|
|
|
100
102
|
|
|
101
103
|
default :ID, :NAME, :SIZE, :AVAIL, :APPS, :MAD, :ZONE, :STAT
|
|
102
104
|
end
|
|
103
|
-
|
|
104
|
-
table
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
private
|
|
108
108
|
|
|
109
|
-
def factory(id=nil)
|
|
109
|
+
def factory(id = nil)
|
|
110
110
|
if id
|
|
111
111
|
OpenNebula::MarketPlace.new_with_id(id, @client)
|
|
112
112
|
else
|
|
@@ -115,51 +115,52 @@ class OneMarketPlaceHelper < OpenNebulaHelper::OneHelper
|
|
|
115
115
|
end
|
|
116
116
|
end
|
|
117
117
|
|
|
118
|
-
def factory_pool(
|
|
118
|
+
def factory_pool(_user_flag = -2)
|
|
119
119
|
OpenNebula::MarketPlacePool.new(@client)
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
-
def format_resource(market,
|
|
123
|
-
str=
|
|
124
|
-
str_h1=
|
|
122
|
+
def format_resource(market, _options = {})
|
|
123
|
+
str='%-15s: %-20s'
|
|
124
|
+
str_h1='%-80s'
|
|
125
125
|
|
|
126
126
|
CLIHelper.print_header(str_h1 % "MARKETPLACE #{market['ID']} INFORMATION")
|
|
127
|
-
puts str
|
|
128
|
-
puts str
|
|
129
|
-
puts str
|
|
130
|
-
puts str
|
|
131
|
-
puts str
|
|
127
|
+
puts format(str, 'ID', market.id.to_s)
|
|
128
|
+
puts format(str, 'NAME', market.name)
|
|
129
|
+
puts format(str, 'USER', market['UNAME'])
|
|
130
|
+
puts format(str, 'GROUP', market['GNAME'])
|
|
131
|
+
puts format(str, 'STATE', market.state_str)
|
|
132
132
|
|
|
133
|
-
puts str
|
|
133
|
+
puts format(str, 'MARKET_MAD', market['MARKET_MAD'])
|
|
134
134
|
puts
|
|
135
135
|
|
|
136
|
-
CLIHelper.print_header(str_h1 %
|
|
136
|
+
CLIHelper.print_header(str_h1 % 'MARKETPLACE CAPACITY', false)
|
|
137
137
|
|
|
138
|
-
puts str
|
|
139
|
-
puts str
|
|
140
|
-
puts str
|
|
138
|
+
puts format(str, 'TOTAL:', OpenNebulaHelper.unit_to_str(market['TOTAL_MB'].to_i, {}, 'M'))
|
|
139
|
+
puts format(str, 'FREE:', OpenNebulaHelper.unit_to_str(market['FREE_MB'].to_i, {}, 'M'))
|
|
140
|
+
puts format(str, 'USED: ', OpenNebulaHelper.unit_to_str(market['USED_MB'].to_i, {}, 'M'))
|
|
141
141
|
puts
|
|
142
142
|
|
|
143
|
-
CLIHelper.print_header(str_h1 %
|
|
143
|
+
CLIHelper.print_header(str_h1 % 'PERMISSIONS', false)
|
|
144
144
|
|
|
145
|
-
[
|
|
146
|
-
mask =
|
|
147
|
-
mask[0] =
|
|
148
|
-
mask[1] =
|
|
149
|
-
mask[2] =
|
|
145
|
+
['OWNER', 'GROUP', 'OTHER'].each do |e|
|
|
146
|
+
mask = '---'
|
|
147
|
+
mask[0] = 'u' if market["PERMISSIONS/#{e}_U"] == '1'
|
|
148
|
+
mask[1] = 'm' if market["PERMISSIONS/#{e}_M"] == '1'
|
|
149
|
+
mask[2] = 'a' if market["PERMISSIONS/#{e}_A"] == '1'
|
|
150
150
|
|
|
151
|
-
puts str
|
|
152
|
-
|
|
151
|
+
puts format(str, e, mask)
|
|
152
|
+
end
|
|
153
153
|
puts
|
|
154
154
|
|
|
155
|
-
CLIHelper.print_header(str_h1 %
|
|
155
|
+
CLIHelper.print_header(str_h1 % 'MARKETPLACE TEMPLATE', false)
|
|
156
156
|
puts market.template_str
|
|
157
157
|
|
|
158
158
|
puts
|
|
159
159
|
|
|
160
|
-
CLIHelper.print_header(
|
|
160
|
+
CLIHelper.print_header(format('%-15s', 'MARKETAPPS'))
|
|
161
161
|
market.marketapp_ids.each do |id|
|
|
162
|
-
puts
|
|
162
|
+
puts format('%-15s', id)
|
|
163
163
|
end
|
|
164
164
|
end
|
|
165
|
+
|
|
165
166
|
end
|