opennebula-cli 5.13.80.pre → 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 +15 -4
- data/bin/oneimage +19 -8
- data/bin/onemarket +13 -2
- data/bin/onemarketapp +23 -16
- data/bin/onesecgroup +13 -2
- data/bin/oneshowback +13 -2
- data/bin/onetemplate +28 -8
- data/bin/oneuser +13 -2
- data/bin/onevcenter +22 -6
- 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 +15 -4
- data/lib/cli_helper.rb +13 -2
- 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/onemarketapp_helper.rb +12 -6
- 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 +25 -21
- data/share/schemas/xsd/index.xsd +1 -0
- data/share/schemas/xsd/monitoring_data.xsd +41 -0
- data/share/schemas/xsd/opennebula_configuration.xsd +1 -0
- data/share/schemas/xsd/vnet.xsd +2 -0
- metadata +9 -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',
|
@@ -198,6 +198,9 @@ class OneMarketPlaceAppHelper < OpenNebulaHelper::OneHelper
|
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
201
|
+
# Turn import all into a boolean
|
202
|
+
import_all == 'yes' ? import_all = true : import_all = false
|
203
|
+
|
201
204
|
main_market = options[:market]
|
202
205
|
|
203
206
|
# Read marketplace where import the service template
|
@@ -232,7 +235,7 @@ class OneMarketPlaceAppHelper < OpenNebulaHelper::OneHelper
|
|
232
235
|
ids = []
|
233
236
|
|
234
237
|
# Create roles apps
|
235
|
-
if import_all
|
238
|
+
if import_all
|
236
239
|
rc = create_apps(markets, import_all)
|
237
240
|
ids = rc[1]
|
238
241
|
|
@@ -282,6 +285,9 @@ class OneMarketPlaceAppHelper < OpenNebulaHelper::OneHelper
|
|
282
285
|
end
|
283
286
|
end
|
284
287
|
|
288
|
+
# Turn import all into a boolean
|
289
|
+
import_all == 'yes' ? import_all = true : import_all = false
|
290
|
+
|
285
291
|
main_market = options[:market]
|
286
292
|
|
287
293
|
# Read marketplace where import the VM template
|
@@ -510,7 +516,7 @@ class OneMarketPlaceAppHelper < OpenNebulaHelper::OneHelper
|
|
510
516
|
|
511
517
|
# Get roles information when importing a service template into marketplace
|
512
518
|
#
|
513
|
-
# @param import_all [
|
519
|
+
# @param import_all [Boolean] true to import VM templates too
|
514
520
|
# @param body [Hash] Sevice Template information
|
515
521
|
# @param pool [Array] Marketplace pool
|
516
522
|
# @param market [Integer] Marketplace to import
|
@@ -525,7 +531,7 @@ class OneMarketPlaceAppHelper < OpenNebulaHelper::OneHelper
|
|
525
531
|
markets = {}
|
526
532
|
default_mp = pool.first['ID'].to_i
|
527
533
|
|
528
|
-
if import_all
|
534
|
+
if import_all
|
529
535
|
# Read marketplace where import each different VM template
|
530
536
|
# It can only be a private marketplace
|
531
537
|
unless market
|
@@ -592,9 +598,9 @@ class OneMarketPlaceAppHelper < OpenNebulaHelper::OneHelper
|
|
592
598
|
|
593
599
|
# Create applications in Marketplace
|
594
600
|
#
|
595
|
-
# @param markets [Hash]
|
596
|
-
# @param import_all [
|
597
|
-
# @param template_name [String]
|
601
|
+
# @param markets [Hash] Marketplaces and templates information
|
602
|
+
# @param import_all [Boolean] true to import images too
|
603
|
+
# @param template_name [String] Virtual Machine Template app name
|
598
604
|
#
|
599
605
|
# @return [String] Error message in case of any
|
600
606
|
def create_apps(markets, import_all, template_name = nil)
|
@@ -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
|