opennebula-cli 6.0.0.1 → 6.0.0.2
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 +13 -2
- data/bin/oneacl +13 -2
- data/bin/onecluster +13 -2
- data/bin/onedatastore +13 -2
- data/bin/oneflow +13 -2
- data/bin/oneflow-template +13 -2
- data/bin/onegroup +13 -2
- data/bin/onehook +17 -6
- data/bin/onehost +13 -2
- data/bin/oneimage +17 -6
- data/bin/onemarket +13 -2
- data/bin/onemarketapp +21 -10
- data/bin/onesecgroup +13 -2
- data/bin/oneshowback +13 -2
- data/bin/onetemplate +28 -8
- data/bin/oneuser +13 -2
- data/bin/onevcenter +14 -3
- data/bin/onevdc +13 -2
- data/bin/onevm +180 -18
- data/bin/onevmgroup +17 -6
- data/bin/onevnet +17 -6
- data/bin/onevntemplate +17 -6
- data/bin/onevrouter +17 -6
- data/bin/onezone +14 -3
- data/lib/one_helper.rb +2 -2
- data/lib/one_helper/onecluster_helper.rb +75 -42
- data/lib/one_helper/onevm_helper.rb +20 -0
- data/lib/one_helper/onevnet_helper.rb +173 -151
- data/lib/one_helper/onezone_helper.rb +12 -4
- data/share/schemas/xsd/opennebula_configuration.xsd +1 -0
- data/share/schemas/xsd/vnet.xsd +2 -0
- metadata +6 -6
@@ -16,174 +16,176 @@
|
|
16
16
|
require 'one_helper'
|
17
17
|
require 'one_helper/onevm_helper'
|
18
18
|
|
19
|
+
# OneVnet Command Helper
|
19
20
|
class OneVNetHelper < OpenNebulaHelper::OneHelper
|
21
|
+
|
20
22
|
AR = {
|
21
|
-
:name =>
|
22
|
-
:short =>
|
23
|
-
:large =>
|
23
|
+
:name => 'address_range',
|
24
|
+
:short => '-a ar_id',
|
25
|
+
:large => '--address_range ar_id',
|
24
26
|
:format => Integer,
|
25
|
-
:description =>
|
27
|
+
:description => 'ID of the address range'
|
26
28
|
}
|
27
29
|
|
28
30
|
SHOW_AR = {
|
29
|
-
:name =>
|
30
|
-
:large =>
|
31
|
-
:description =>
|
31
|
+
:name => 'show_ar',
|
32
|
+
:large => '--show-ar',
|
33
|
+
:description => 'Show also AR templates'
|
32
34
|
}
|
33
35
|
|
34
36
|
MAC = {
|
35
|
-
:name =>
|
36
|
-
:short =>
|
37
|
-
:large =>
|
37
|
+
:name => 'mac',
|
38
|
+
:short => '-m mac',
|
39
|
+
:large => '--mac mac',
|
38
40
|
:format => String,
|
39
|
-
:description =>
|
41
|
+
:description => 'First MAC address in : notation'
|
40
42
|
}
|
41
43
|
|
42
44
|
IP = {
|
43
|
-
:name =>
|
44
|
-
:short =>
|
45
|
-
:large =>
|
45
|
+
:name => 'ip',
|
46
|
+
:short => '-i ip',
|
47
|
+
:large => '--ip ip',
|
46
48
|
:format => String,
|
47
|
-
:description =>
|
49
|
+
:description => 'First IP address in . notation'
|
48
50
|
}
|
49
51
|
|
50
52
|
IP6 = {
|
51
|
-
:name =>
|
52
|
-
:short =>
|
53
|
-
:large =>
|
53
|
+
:name => 'ip6',
|
54
|
+
:short => '-6 ip6',
|
55
|
+
:large => '--ip6 ip6',
|
54
56
|
:format => String,
|
55
|
-
:description =>
|
57
|
+
:description => 'First IPv6 address, in CIDR notation e.g. 2001::1/48'
|
56
58
|
}
|
57
59
|
|
58
60
|
SIZE = {
|
59
|
-
:name =>
|
60
|
-
:short =>
|
61
|
-
:large =>
|
61
|
+
:name => 'size',
|
62
|
+
:short => '-s size',
|
63
|
+
:large => '--size size',
|
62
64
|
:format => String,
|
63
|
-
:description =>
|
65
|
+
:description => 'Number of addresses'
|
64
66
|
}
|
65
67
|
|
66
68
|
IP6_GLOBAL = {
|
67
|
-
:name =>
|
68
|
-
:short =>
|
69
|
-
:large =>
|
69
|
+
:name => 'ip6_global',
|
70
|
+
:short => '-g ip6_pref',
|
71
|
+
:large => '--ip6_global ip6_pref',
|
70
72
|
:format => String,
|
71
|
-
:description =>
|
73
|
+
:description => 'IP6 global prefix'
|
72
74
|
}
|
73
75
|
|
74
76
|
IP6_ULA = {
|
75
|
-
:name =>
|
76
|
-
:short =>
|
77
|
-
:large =>
|
77
|
+
:name => 'ip6_ula',
|
78
|
+
:short => '-u ip6_pref',
|
79
|
+
:large => '--ip6_ula ip6_pref',
|
78
80
|
:format => String,
|
79
|
-
:description =>
|
81
|
+
:description => 'IP6 ula prefix'
|
80
82
|
}
|
81
83
|
|
82
84
|
NAME = {
|
83
|
-
:name =>
|
84
|
-
:short =>
|
85
|
-
:large =>
|
85
|
+
:name => 'name',
|
86
|
+
:short => '-n reservation name',
|
87
|
+
:large => '--name reservation name',
|
86
88
|
:format => String,
|
87
|
-
:description =>
|
89
|
+
:description => 'Name of the address reservation'
|
88
90
|
}
|
89
91
|
|
90
|
-
# R_SIZE = {
|
91
|
-
# :name => "rsize",
|
92
|
-
# :short => "-s reservation size",
|
93
|
-
# :large => "--size reservation size",
|
94
|
-
# :format => String,
|
95
|
-
# :description => "Number of addresses to reserve"
|
96
|
-
# }
|
92
|
+
# R_SIZE = {
|
93
|
+
# :name => "rsize",
|
94
|
+
# :short => "-s reservation size",
|
95
|
+
# :large => "--size reservation size",
|
96
|
+
# :format => String,
|
97
|
+
# :description => "Number of addresses to reserve"
|
98
|
+
# }
|
97
99
|
|
98
100
|
GATEWAY = {
|
99
|
-
:name =>
|
100
|
-
:large =>
|
101
|
+
:name => 'gateway',
|
102
|
+
:large => '--gateway ip',
|
101
103
|
:format => String,
|
102
|
-
:description=>
|
104
|
+
:description=> 'IP of the gateway'
|
103
105
|
}
|
104
106
|
|
105
107
|
NETMASK = {
|
106
|
-
:name =>
|
107
|
-
:large =>
|
108
|
+
:name => 'netmask',
|
109
|
+
:large => '--netmask mask',
|
108
110
|
:format => String,
|
109
|
-
:description=>
|
111
|
+
:description=> 'Netmask in dot notation'
|
110
112
|
}
|
111
113
|
|
112
114
|
VN_MAD = {
|
113
|
-
:name =>
|
114
|
-
:large =>
|
115
|
+
:name => 'vn_mad',
|
116
|
+
:large => '--vn_mad mad',
|
115
117
|
:format => String,
|
116
|
-
:description=>
|
118
|
+
:description=> 'Use this driver for the network'
|
117
119
|
}
|
118
120
|
|
119
121
|
VLAN_ID = {
|
120
|
-
:name =>
|
121
|
-
:large =>
|
122
|
+
:name => 'vlanid',
|
123
|
+
:large => '--vlanid id',
|
122
124
|
:format => String,
|
123
|
-
:description=>
|
125
|
+
:description=> 'VLAN ID assigned'
|
124
126
|
}
|
125
127
|
|
126
128
|
ADDAR_OPTIONS = [
|
127
129
|
SIZE, MAC, IP, IP6, IP6_GLOBAL, IP6_ULA, GATEWAY, NETMASK, VN_MAD,
|
128
|
-
VLAN_ID
|
130
|
+
VLAN_ID
|
131
|
+
]
|
129
132
|
|
130
133
|
def self.rname
|
131
|
-
|
134
|
+
'VNET'
|
132
135
|
end
|
133
136
|
|
134
137
|
def self.conf_file
|
135
|
-
|
138
|
+
'onevnet.yaml'
|
136
139
|
end
|
137
140
|
|
138
141
|
def format_pool(options)
|
139
142
|
config_file = self.class.table_conf
|
140
143
|
|
141
|
-
|
142
|
-
column :ID,
|
143
|
-
d[
|
144
|
+
CLIHelper::ShowTable.new(config_file, self) do
|
145
|
+
column :ID, 'ONE identifier for Virtual Network', :size=>4 do |d|
|
146
|
+
d['ID']
|
144
147
|
end
|
145
148
|
|
146
|
-
column :USER,
|
147
|
-
|
149
|
+
column :USER, 'Username of the Virtual Network owner', :left,
|
150
|
+
:size=>15 do |d|
|
148
151
|
helper.user_name(d, options)
|
149
152
|
end
|
150
153
|
|
151
|
-
column :GROUP,
|
152
|
-
|
154
|
+
column :GROUP, 'Group of the Virtual Network', :left,
|
155
|
+
:size=>12 do |d|
|
153
156
|
helper.group_name(d, options)
|
154
157
|
end
|
155
158
|
|
156
|
-
column :NAME,
|
157
|
-
|
158
|
-
d[
|
159
|
+
column :NAME, 'Name of the Virtual Network', :left,
|
160
|
+
:size=>19 do |d|
|
161
|
+
d['NAME']
|
159
162
|
end
|
160
163
|
|
161
|
-
column :CLUSTERS,
|
162
|
-
OpenNebulaHelper.clusters_str(d[
|
164
|
+
column :CLUSTERS, 'Cluster IDs', :left, :size=>10 do |d|
|
165
|
+
OpenNebulaHelper.clusters_str(d['CLUSTERS']['ID']) rescue '-'
|
163
166
|
end
|
164
167
|
|
165
|
-
column :BRIDGE,
|
166
|
-
|
167
|
-
d[
|
168
|
+
column :BRIDGE, 'Bridge associated to the Virtual Network', :left,
|
169
|
+
:size=>8 do |d|
|
170
|
+
d['BRIDGE']
|
168
171
|
end
|
169
172
|
|
170
173
|
column :LEASES, "Number of this Virtual Network's given leases",
|
171
|
-
|
172
|
-
d[
|
174
|
+
:size=>6 do |d|
|
175
|
+
d['USED_LEASES']
|
173
176
|
end
|
174
177
|
|
175
178
|
default :ID, :USER, :GROUP, :NAME, :CLUSTERS, :BRIDGE, :LEASES
|
176
179
|
end
|
177
|
-
|
178
|
-
table
|
179
180
|
end
|
180
181
|
|
181
182
|
def show_ar(vn, ar_id)
|
182
|
-
CLIHelper.print_header(
|
183
|
+
CLIHelper.print_header(format('%-80s', "TEMPLATE FOR AR #{ar_id}"),
|
184
|
+
false)
|
183
185
|
|
184
186
|
begin
|
185
187
|
template = vn.template_like_str("AR_POOL/AR[AR_ID=#{ar_id}]")
|
186
|
-
rescue
|
188
|
+
rescue StandardError
|
187
189
|
STDERR.puts "Can not get template for AR #{ar_id}"
|
188
190
|
return
|
189
191
|
end
|
@@ -281,7 +283,7 @@ class OneVNetHelper < OpenNebulaHelper::OneHelper
|
|
281
283
|
|
282
284
|
private
|
283
285
|
|
284
|
-
def factory(id=nil)
|
286
|
+
def factory(id = nil)
|
285
287
|
if id
|
286
288
|
OpenNebula::VirtualNetwork.new_with_id(id, @client)
|
287
289
|
else
|
@@ -290,55 +292,63 @@ class OneVNetHelper < OpenNebulaHelper::OneHelper
|
|
290
292
|
end
|
291
293
|
end
|
292
294
|
|
293
|
-
def factory_pool(user_flag
|
295
|
+
def factory_pool(user_flag = -2)
|
294
296
|
OpenNebula::VirtualNetworkPool.new(@client, user_flag)
|
295
297
|
end
|
296
298
|
|
297
299
|
def format_resource(vn, options = {})
|
298
300
|
vn_hash = vn.to_hash
|
299
301
|
|
300
|
-
str_h1=
|
301
|
-
CLIHelper.print_header(str_h1
|
302
|
-
|
303
|
-
|
304
|
-
str=
|
305
|
-
puts str
|
306
|
-
puts str
|
307
|
-
puts str
|
308
|
-
puts str
|
309
|
-
puts str
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
puts str
|
316
|
-
puts str
|
317
|
-
puts str
|
318
|
-
|
319
|
-
puts str
|
302
|
+
str_h1='%-80s'
|
303
|
+
CLIHelper.print_header(format(str_h1,
|
304
|
+
"VIRTUAL NETWORK #{vn.id} INFORMATION"))
|
305
|
+
|
306
|
+
str='%-25s: %-20s'
|
307
|
+
puts format(str, 'ID', vn.id.to_s)
|
308
|
+
puts format(str, 'NAME', vn['NAME'])
|
309
|
+
puts format(str, 'USER', vn['UNAME'])
|
310
|
+
puts format(str, 'GROUP', vn['GNAME'])
|
311
|
+
puts format(str, 'LOCK',
|
312
|
+
OpenNebulaHelper.level_lock_to_str(vn['LOCK/LOCKED']))
|
313
|
+
puts format(str, 'CLUSTERS',
|
314
|
+
OpenNebulaHelper.clusters_str(
|
315
|
+
vn.retrieve_elements('CLUSTERS/ID')
|
316
|
+
))
|
317
|
+
puts format(str, 'BRIDGE', vn['BRIDGE'])
|
318
|
+
puts format(str, 'VN_MAD', vn['VN_MAD']) unless vn['VN_MAD'].empty?
|
319
|
+
puts format(str, 'PHYSICAL DEVICE',
|
320
|
+
vn['PHYDEV']) unless vn['PHYDEV'].empty?
|
321
|
+
puts format(str, 'VLAN ID', vn['VLAN_ID']) unless vn['VLAN_ID'].empty?
|
322
|
+
puts format(str, 'AUTOMATIC VLAN ID',
|
323
|
+
vn['VLAN_ID_AUTOMATIC']=='1' ? 'YES' : 'NO')
|
324
|
+
puts format(str, 'OUTER VLAN ID',
|
325
|
+
vn['OUTER_VLAN_ID']) unless vn['OUTER_VLAN_ID']
|
326
|
+
puts format(str, 'AUTOMATIC OUTER VLAN ID',
|
327
|
+
vn['OUTER_VLAN_ID_AUTOMATIC']=='1' ? 'YES' : 'NO')
|
328
|
+
puts format(str, 'USED LEASES', vn['USED_LEASES'])
|
320
329
|
puts
|
321
330
|
|
322
|
-
CLIHelper.print_header(str_h1 %
|
331
|
+
CLIHelper.print_header(str_h1 % 'PERMISSIONS', false)
|
323
332
|
|
324
|
-
[
|
325
|
-
mask =
|
326
|
-
mask[0] =
|
327
|
-
mask[1] =
|
328
|
-
mask[2] =
|
333
|
+
%w[OWNER GROUP OTHER].each do |e|
|
334
|
+
mask = '---'
|
335
|
+
mask[0] = 'u' if vn["PERMISSIONS/#{e}_U"] == '1'
|
336
|
+
mask[1] = 'm' if vn["PERMISSIONS/#{e}_M"] == '1'
|
337
|
+
mask[2] = 'a' if vn["PERMISSIONS/#{e}_A"] == '1'
|
329
338
|
|
330
|
-
puts str
|
331
|
-
|
339
|
+
puts format(str, e, mask)
|
340
|
+
end
|
332
341
|
|
333
342
|
puts
|
334
343
|
|
335
|
-
CLIHelper.print_header(str_h1
|
344
|
+
CLIHelper.print_header(format(str_h1, 'VIRTUAL NETWORK TEMPLATE'),
|
345
|
+
false)
|
336
346
|
|
337
347
|
puts vn.template_str(false)
|
338
348
|
|
339
349
|
puts
|
340
350
|
|
341
|
-
CLIHelper.print_header(str_h1
|
351
|
+
CLIHelper.print_header(format(str_h1, 'ADDRESS RANGE POOL'), false)
|
342
352
|
|
343
353
|
arlist = []
|
344
354
|
|
@@ -347,70 +357,72 @@ class OneVNetHelper < OpenNebulaHelper::OneHelper
|
|
347
357
|
end
|
348
358
|
|
349
359
|
arlist.each do |ar|
|
360
|
+
CLIHelper.print_header(format('%-80s', "AR #{ar['AR_ID']}"))
|
350
361
|
|
351
|
-
|
352
|
-
|
353
|
-
str
|
354
|
-
puts str
|
355
|
-
puts str
|
356
|
-
puts str % ["VN_MAD", ar["VN_MAD"]] if ar["VN_MAD"]
|
357
|
-
puts str % ["IPAM_MAD", ar["IPAM_MAD"]] if ar["IPAM_MAD"]
|
362
|
+
str='%-15s: %-20s'
|
363
|
+
puts format(str, 'SIZE', ar['SIZE'])
|
364
|
+
puts format(str, 'LEASES', ar['USED_LEASES'])
|
365
|
+
puts format(str, 'VN_MAD', ar['VN_MAD']) if ar['VN_MAD']
|
366
|
+
puts format(str, 'IPAM_MAD', ar['IPAM_MAD']) if ar['IPAM_MAD']
|
358
367
|
puts
|
359
368
|
|
360
|
-
format =
|
361
|
-
CLIHelper.print_header(
|
369
|
+
format = '%-10s %34s %34s'
|
370
|
+
CLIHelper.print_header(
|
371
|
+
format(format, 'RANGE', 'FIRST', 'LAST'), false
|
372
|
+
)
|
362
373
|
|
363
|
-
puts format
|
374
|
+
puts format(format, 'MAC', ar['MAC'], ar['MAC_END'])
|
364
375
|
|
365
|
-
if !ar[
|
366
|
-
puts format
|
376
|
+
if !ar['IP'].nil?
|
377
|
+
puts format(format, 'IP', ar['IP'], ar['IP_END'])
|
367
378
|
end
|
368
379
|
|
369
|
-
if !ar[
|
370
|
-
puts format
|
380
|
+
if !ar['IP6_GLOBAL'].nil?
|
381
|
+
puts format(format, 'IP6_GLOBAL', ar['IP6_GLOBAL'],
|
382
|
+
ar['IP6_GLOBAL_END'])
|
371
383
|
end
|
372
384
|
|
373
|
-
if !ar[
|
374
|
-
puts format
|
385
|
+
if !ar['IP6_ULA'].nil?
|
386
|
+
puts format(format, 'IP6_ULA', ar['IP6_ULA'], ar['IP6_ULA_END'])
|
375
387
|
end
|
376
388
|
|
377
|
-
if !ar[
|
378
|
-
puts format
|
389
|
+
if !ar['IP6'].nil?
|
390
|
+
puts format(format, 'IP6', ar['IP6'], ar['IP6_END'])
|
379
391
|
end
|
380
392
|
|
381
393
|
puts
|
382
394
|
end
|
383
395
|
|
384
396
|
puts
|
385
|
-
CLIHelper.print_header(str_h1
|
397
|
+
CLIHelper.print_header(format(str_h1, 'LEASES'), false)
|
386
398
|
ar_list = []
|
387
399
|
|
388
400
|
if !vn_hash['VNET']['AR_POOL']['AR'].nil?
|
389
401
|
lease_list = [vn_hash['VNET']['AR_POOL']['AR']].flatten
|
390
|
-
leases =
|
402
|
+
leases = []
|
391
403
|
|
392
404
|
lease_list.each do |ar|
|
393
405
|
id = ar['AR_ID']
|
394
406
|
ar_list << id
|
395
407
|
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
leases << lease
|
408
|
+
next unless ar['LEASES'] && !ar['LEASES']['LEASE'].nil?
|
409
|
+
|
410
|
+
lease = [ar['LEASES']['LEASE']].flatten
|
411
|
+
lease.each do |l|
|
412
|
+
l['AR_ID'] = id
|
402
413
|
end
|
414
|
+
leases << lease
|
403
415
|
end
|
404
416
|
|
405
417
|
leases.flatten!
|
406
418
|
end
|
407
419
|
|
408
420
|
CLIHelper::ShowTable.new(nil, self) do
|
409
|
-
column :AR,
|
421
|
+
column :AR, '', :left, :size=>3 do |d|
|
410
422
|
d['AR_ID']
|
411
423
|
end
|
412
424
|
|
413
|
-
column :OWNER,
|
425
|
+
column :OWNER, '', :left, :size=>10 do |d|
|
414
426
|
if d['VM']
|
415
427
|
"V:#{d['VM']}"
|
416
428
|
elsif d['VNET']
|
@@ -420,31 +432,40 @@ class OneVNetHelper < OpenNebulaHelper::OneHelper
|
|
420
432
|
end
|
421
433
|
end
|
422
434
|
|
423
|
-
column :MAC,
|
424
|
-
|
435
|
+
column :MAC, '', :adjust do |d|
|
436
|
+
d['MAC']
|
437
|
+
end
|
438
|
+
|
439
|
+
column :IP, '', :adjust do |d|
|
440
|
+
d['IP'] || '-'
|
425
441
|
end
|
426
442
|
|
427
|
-
column :
|
428
|
-
|
443
|
+
column :PORT_FORWARD, '', :adjust do |d|
|
444
|
+
if d['EXTERNAL_PORT_RANGE']
|
445
|
+
"[#{d['EXTERNAL_PORT_RANGE']}]:" \
|
446
|
+
"[#{d['INTERNAL_PORT_RANGE'].split('/')[0]}]"
|
447
|
+
else
|
448
|
+
'-'
|
449
|
+
end
|
429
450
|
end
|
430
451
|
|
431
|
-
column :IP6,
|
432
|
-
|
452
|
+
column :IP6, '', :adjust do |d|
|
453
|
+
d['IP6']||d['IP6_GLOBAL']||'-'
|
433
454
|
end
|
434
455
|
end.show(leases, {})
|
435
456
|
|
436
457
|
puts
|
437
458
|
|
438
|
-
CLIHelper.print_header(
|
459
|
+
CLIHelper.print_header(format('%-15s', 'VIRTUAL ROUTERS'))
|
439
460
|
vn.vrouter_ids.each do |id|
|
440
|
-
puts
|
461
|
+
puts format('%-15s', id)
|
441
462
|
end
|
442
463
|
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
464
|
+
return unless options[:show_ar]
|
465
|
+
|
466
|
+
ar_list.each do |ar_id|
|
467
|
+
puts
|
468
|
+
show_ar(vn, ar_id)
|
448
469
|
end
|
449
470
|
end
|
450
471
|
|
@@ -459,4 +480,5 @@ class OneVNetHelper < OpenNebulaHelper::OneHelper
|
|
459
480
|
# in options hash
|
460
481
|
(add_ar_options-options.keys)!=add_ar_options
|
461
482
|
end
|
483
|
+
|
462
484
|
end
|