opennebula-cli 5.13.90.pre → 6.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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 +22 -15
- data/bin/onesecgroup +13 -2
- data/bin/oneshowback +13 -2
- data/bin/onetemplate +28 -8
- data/bin/oneuser +13 -2
- data/bin/onevcenter +19 -4
- 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/command_parser.rb +16 -13
- data/lib/one_helper.rb +4 -3
- data/lib/one_helper/oneacct_helper.rb +1 -3
- data/lib/one_helper/onecluster_helper.rb +75 -42
- data/lib/one_helper/oneimage_helper.rb +6 -0
- 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 +8 -8
@@ -103,6 +103,12 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
|
|
103
103
|
:description => 'Format of the image (raw, qcow2, ...)',
|
104
104
|
:format => String
|
105
105
|
},
|
106
|
+
{
|
107
|
+
:name => 'fs',
|
108
|
+
:large => '--fs filesystem',
|
109
|
+
:description => 'Filesystem to format the image (ext4, xfs, ...)',
|
110
|
+
:format => String
|
111
|
+
},
|
106
112
|
{
|
107
113
|
:name => 'disk_type',
|
108
114
|
:large => '--disk_type disk_type',
|
@@ -1086,6 +1086,26 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
1086
1086
|
end
|
1087
1087
|
end
|
1088
1088
|
|
1089
|
+
if vm_hash['VM']['TEMPLATE']['NIC']
|
1090
|
+
nic = [vm_hash['VM']['TEMPLATE']['NIC']]
|
1091
|
+
nic = nic.flatten
|
1092
|
+
nic = nic.select {|v| !v['EXTERNAL_PORT_RANGE'].nil? }[0]
|
1093
|
+
|
1094
|
+
if nic
|
1095
|
+
ip = vm_hash['VM']['HISTORY_RECORDS']['HISTORY']
|
1096
|
+
ip = [ip].flatten[-1]['HOSTNAME']
|
1097
|
+
port = Integer(nic['EXTERNAL_PORT_RANGE'].split(':')[0]) + 21
|
1098
|
+
|
1099
|
+
puts
|
1100
|
+
CLIHelper.print_header(str_h1 % 'PORT FORWARD', false)
|
1101
|
+
|
1102
|
+
puts "[#{nic['EXTERNAL_PORT_RANGE']}]:" \
|
1103
|
+
"[#{nic['INTERNAL_PORT_RANGE'].split('/')[0]}]"
|
1104
|
+
|
1105
|
+
puts "SSH on #{ip} at port #{port}"
|
1106
|
+
end
|
1107
|
+
end
|
1108
|
+
|
1089
1109
|
if !options[:all]
|
1090
1110
|
while vm.has_elements?('/VM/TEMPLATE/NIC')
|
1091
1111
|
vm.delete_element('/VM/TEMPLATE/NIC')
|
@@ -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
|