opennebula-cli 4.10.2 → 4.11.80.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/oneacct +16 -2
- data/bin/onedatastore +20 -0
- data/bin/onegroup +27 -42
- data/bin/onesecgroup +198 -0
- data/bin/oneshowback +178 -0
- data/bin/onetemplate +4 -1
- data/bin/onevcenter +81 -0
- data/bin/onevdc +280 -0
- data/bin/onevnet +14 -2
- data/lib/cli_helper.rb +1 -1
- data/lib/one_helper.rb +0 -9
- data/lib/one_helper/oneacct_helper.rb +74 -6
- data/lib/one_helper/oneacl_helper.rb +8 -4
- data/lib/one_helper/onedatastore_helper.rb +10 -3
- data/lib/one_helper/onegroup_helper.rb +13 -19
- data/lib/one_helper/onehost_helper.rb +10 -0
- data/lib/one_helper/onesecgroup_helper.rb +155 -0
- data/lib/one_helper/onevdc_helper.rb +144 -0
- data/lib/one_helper/onevm_helper.rb +93 -50
- data/lib/one_helper/onevnet_helper.rb +20 -20
- metadata +16 -7
@@ -44,7 +44,7 @@ private
|
|
44
44
|
def self.resource_mask(str)
|
45
45
|
resource_type=str.split("/")[0]
|
46
46
|
|
47
|
-
mask = "
|
47
|
+
mask = "-------------"
|
48
48
|
|
49
49
|
resource_type.split("+").each{|type|
|
50
50
|
case type
|
@@ -70,6 +70,10 @@ private
|
|
70
70
|
mask[9] = "O"
|
71
71
|
when "ZONE"
|
72
72
|
mask[10] = "Z"
|
73
|
+
when "SECGROUP"
|
74
|
+
mask[11] = "S"
|
75
|
+
when "VDC"
|
76
|
+
mask[12] = "v"
|
73
77
|
end
|
74
78
|
}
|
75
79
|
mask
|
@@ -109,8 +113,8 @@ private
|
|
109
113
|
d['STRING'].split(" ")[0]
|
110
114
|
end
|
111
115
|
|
112
|
-
column :
|
113
|
-
:size =>
|
116
|
+
column :RES_VHNIUTGDCOZSv, "Resource to which the rule applies",
|
117
|
+
:size => 17 do |d|
|
114
118
|
OneAclHelper::resource_mask d['STRING'].split(" ")[1]
|
115
119
|
end
|
116
120
|
|
@@ -127,7 +131,7 @@ private
|
|
127
131
|
OneAclHelper::right_mask d['STRING'].split(" ")[2]
|
128
132
|
end
|
129
133
|
|
130
|
-
default :ID, :USER, :
|
134
|
+
default :ID, :USER, :RES_VHNIUTGDCOZSv, :RID, :OPE_UMAC, :ZONE
|
131
135
|
end
|
132
136
|
|
133
137
|
table
|
@@ -82,15 +82,21 @@ class OneDatastoreHelper < OpenNebulaHelper::OneHelper
|
|
82
82
|
Datastore::SHORT_DATASTORE_TYPES[type]
|
83
83
|
end
|
84
84
|
|
85
|
-
column :DS, "Datastore driver", :left, :size=>
|
85
|
+
column :DS, "Datastore driver", :left, :size=>7 do |d|
|
86
86
|
d["DS_MAD"]
|
87
87
|
end
|
88
88
|
|
89
|
-
column :TM, "Transfer driver", :left, :size=>
|
89
|
+
column :TM, "Transfer driver", :left, :size=>7 do |d|
|
90
90
|
d["TM_MAD"]
|
91
91
|
end
|
92
92
|
|
93
|
-
|
93
|
+
column :STAT, "State of the Datastore", :left, :size=>3 do |d|
|
94
|
+
state = Datastore::DATASTORE_STATES[d["STATE"].to_i]
|
95
|
+
Datastore::SHORT_DATASTORE_STATES[state]
|
96
|
+
end
|
97
|
+
|
98
|
+
default :ID, :NAME, :SIZE, :AVAIL, :CLUSTER, :IMAGES,
|
99
|
+
:TYPE, :DS, :TM, :STAT
|
94
100
|
end
|
95
101
|
|
96
102
|
table
|
@@ -128,6 +134,7 @@ class OneDatastoreHelper < OpenNebulaHelper::OneHelper
|
|
128
134
|
puts str % ["TM_MAD", datastore['TM_MAD']]
|
129
135
|
puts str % ["BASE PATH",datastore['BASE_PATH']]
|
130
136
|
puts str % ["DISK_TYPE",Image::DISK_TYPES[datastore['DISK_TYPE'].to_i]]
|
137
|
+
puts str % ["STATE", datastore.state_str]
|
131
138
|
puts
|
132
139
|
|
133
140
|
CLIHelper.print_header(str_h1 % "DATASTORE CAPACITY", false)
|
@@ -286,29 +286,23 @@ class OneGroupHelper < OpenNebulaHelper::OneHelper
|
|
286
286
|
puts group.template_str
|
287
287
|
puts
|
288
288
|
|
289
|
-
|
290
|
-
CLIHelper.print_header("%-15s" % ["ID"])
|
291
|
-
group.user_ids.each do |uid|
|
292
|
-
puts "%-15s" % [uid]
|
293
|
-
end
|
294
|
-
|
295
|
-
group_hash = group.to_hash
|
289
|
+
admin_ids = group.admin_ids
|
296
290
|
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
291
|
+
CLIHelper::ShowTable.new(nil, self) do
|
292
|
+
column :"USER ID", "", :right, :size=>7 do |d|
|
293
|
+
d
|
294
|
+
end
|
301
295
|
|
302
|
-
|
303
|
-
|
304
|
-
|
296
|
+
column :"ADMIN", "", :left, :size=>5 do |d|
|
297
|
+
if (group.admin_ids.include?(d))
|
298
|
+
"*"
|
299
|
+
else
|
300
|
+
""
|
305
301
|
end
|
302
|
+
end
|
303
|
+
end.show(group.user_ids, {})
|
306
304
|
|
307
|
-
|
308
|
-
d['CLUSTER_ID'] == '10' ? 'ALL' : d['CLUSTER_ID']
|
309
|
-
end
|
310
|
-
end.show([providers].flatten, {})
|
311
|
-
end
|
305
|
+
group_hash = group.to_hash
|
312
306
|
|
313
307
|
default_quotas = nil
|
314
308
|
|
@@ -223,6 +223,16 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
|
|
223
223
|
next if host['CLUSTER_ID'].to_i != cluster_id
|
224
224
|
end
|
225
225
|
|
226
|
+
vm_mad = host['VM_MAD'].downcase
|
227
|
+
remote_remotes = host['TEMPLATE/REMOTE_REMOTES']
|
228
|
+
|
229
|
+
# Skip this host from remote syncing unless:
|
230
|
+
# - the host is type "KVM"
|
231
|
+
# - the host is type "XEN"
|
232
|
+
# - the host has REMOTE_REMOTES defined in the template (useful
|
233
|
+
# for custom defined VMM types)
|
234
|
+
next unless remote_remotes || vm_mad == "kvm" || vm_mad == "xen"
|
235
|
+
|
226
236
|
host_version=host['TEMPLATE/VERSION']
|
227
237
|
|
228
238
|
begin
|
@@ -0,0 +1,155 @@
|
|
1
|
+
# -------------------------------------------------------------------------- #
|
2
|
+
# Copyright 2002-2015, OpenNebula Project (OpenNebula.org), C12G Labs #
|
3
|
+
# #
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
|
+
# not use this file except in compliance with the License. You may obtain #
|
6
|
+
# a copy of the License at #
|
7
|
+
# #
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0 #
|
9
|
+
# #
|
10
|
+
# Unless required by applicable law or agreed to in writing, software #
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, #
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
13
|
+
# See the License for the specific language governing permissions and #
|
14
|
+
# limitations under the License. #
|
15
|
+
#--------------------------------------------------------------------------- #
|
16
|
+
|
17
|
+
require 'one_helper'
|
18
|
+
|
19
|
+
class OneSecurityGroupHelper < OpenNebulaHelper::OneHelper
|
20
|
+
def self.rname
|
21
|
+
"SECURITY_GROUP"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.conf_file
|
25
|
+
"onesecgroup.yaml"
|
26
|
+
end
|
27
|
+
|
28
|
+
def format_pool(options)
|
29
|
+
config_file = self.class.table_conf
|
30
|
+
|
31
|
+
table = CLIHelper::ShowTable.new(config_file, self) do
|
32
|
+
column :ID, "ONE identifier for the Security Group", :size=>4 do |d|
|
33
|
+
d["ID"]
|
34
|
+
end
|
35
|
+
|
36
|
+
column :NAME, "Name of the Security Group", :left, :size=>27 do |d|
|
37
|
+
d["NAME"]
|
38
|
+
end
|
39
|
+
|
40
|
+
column :USER, "Username of the Security Group owner", :left,
|
41
|
+
:size=>15 do |d|
|
42
|
+
helper.user_name(d, options)
|
43
|
+
end
|
44
|
+
|
45
|
+
column :GROUP, "Group of the Security Group", :left, :size=>15 do |d|
|
46
|
+
helper.group_name(d, options)
|
47
|
+
end
|
48
|
+
|
49
|
+
default :ID, :USER, :GROUP, :NAME
|
50
|
+
end
|
51
|
+
|
52
|
+
table
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def factory(id=nil)
|
58
|
+
if id
|
59
|
+
OpenNebula::SecurityGroup.new_with_id(id, @client)
|
60
|
+
else
|
61
|
+
xml=OpenNebula::SecurityGroup.build_xml
|
62
|
+
OpenNebula::SecurityGroup.new(xml, @client)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def factory_pool(user_flag=-2)
|
67
|
+
OpenNebula::SecurityGroupPool.new(@client, user_flag)
|
68
|
+
end
|
69
|
+
|
70
|
+
def format_resource(secgroup, options = {})
|
71
|
+
str="%-15s: %-20s"
|
72
|
+
str_h1="%-80s"
|
73
|
+
|
74
|
+
CLIHelper.print_header(
|
75
|
+
str_h1 % "SECURITY GROUP #{secgroup['ID']} INFORMATION")
|
76
|
+
puts str % ["ID", secgroup.id.to_s]
|
77
|
+
puts str % ["NAME", secgroup.name]
|
78
|
+
puts str % ["USER", secgroup['UNAME']]
|
79
|
+
puts str % ["GROUP", secgroup['GNAME']]
|
80
|
+
|
81
|
+
CLIHelper.print_header(str_h1 % "PERMISSIONS",false)
|
82
|
+
|
83
|
+
["OWNER", "GROUP", "OTHER"].each { |e|
|
84
|
+
mask = "---"
|
85
|
+
mask[0] = "u" if secgroup["PERMISSIONS/#{e}_U"] == "1"
|
86
|
+
mask[1] = "m" if secgroup["PERMISSIONS/#{e}_M"] == "1"
|
87
|
+
mask[2] = "a" if secgroup["PERMISSIONS/#{e}_A"] == "1"
|
88
|
+
|
89
|
+
puts str % [e, mask]
|
90
|
+
}
|
91
|
+
|
92
|
+
puts
|
93
|
+
|
94
|
+
CLIHelper.print_header(str_h1 % ["RULES"], false)
|
95
|
+
|
96
|
+
if !secgroup.to_hash['SECURITY_GROUP']['TEMPLATE']['RULE'].nil?
|
97
|
+
rule_list = [secgroup.to_hash['SECURITY_GROUP']['TEMPLATE']['RULE']].flatten
|
98
|
+
end
|
99
|
+
|
100
|
+
CLIHelper::ShowTable.new(nil, self) do
|
101
|
+
column :TYPE, "", :left, :size=>8 do |d|
|
102
|
+
d["RULE_TYPE"]
|
103
|
+
end
|
104
|
+
|
105
|
+
column :PROTOCOL, "", :left, :size=>8 do |d|
|
106
|
+
d["PROTOCOL"]
|
107
|
+
end
|
108
|
+
|
109
|
+
column :ICMP_TYPE, "", :left, :size=>9 do |d|
|
110
|
+
d["ICMP_TYPE"]
|
111
|
+
end
|
112
|
+
|
113
|
+
column :NETWORK, "", :left, :donottruncate, :size=>35 do |d|
|
114
|
+
network = ""
|
115
|
+
if(!d["NETWORK_ID"].nil? && d["NETWORK_ID"] != "")
|
116
|
+
network += "VNet " + d["NETWORK_ID"]
|
117
|
+
end
|
118
|
+
|
119
|
+
if(!d["SIZE"].nil? && d["SIZE"] != "")
|
120
|
+
if(network != "")
|
121
|
+
network += ": "
|
122
|
+
end
|
123
|
+
|
124
|
+
if(!d["IP"].nil? && d["IP"] != "")
|
125
|
+
network += "Start: " + d["IP"] + ", "
|
126
|
+
elsif(!d["MAC"] != undefined && d["MAC"] != "")
|
127
|
+
network += "Start: " + d["MAC"] + ", "
|
128
|
+
end
|
129
|
+
|
130
|
+
network += "Size: " + d["SIZE"]
|
131
|
+
end
|
132
|
+
|
133
|
+
if(network == "")
|
134
|
+
network = "Any"
|
135
|
+
end
|
136
|
+
|
137
|
+
network += " "
|
138
|
+
network
|
139
|
+
end
|
140
|
+
|
141
|
+
column :RANGE, "", :left, :donottruncate, :size=>16 do |d|
|
142
|
+
d["RANGE"]
|
143
|
+
end
|
144
|
+
end.show(rule_list, {})
|
145
|
+
|
146
|
+
while secgroup.has_elements?("/SECURITY_GROUP/TEMPLATE/RULE")
|
147
|
+
secgroup.delete_element("/SECURITY_GROUP/TEMPLATE/RULE")
|
148
|
+
end
|
149
|
+
|
150
|
+
puts
|
151
|
+
|
152
|
+
CLIHelper.print_header(str_h1 % "TEMPLATE CONTENTS",false)
|
153
|
+
puts secgroup.template_str
|
154
|
+
end
|
155
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# -------------------------------------------------------------------------- #
|
2
|
+
# Copyright 2002-2015, OpenNebula Project (OpenNebula.org), C12G Labs #
|
3
|
+
# #
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
5
|
+
# not use this file except in compliance with the License. You may obtain #
|
6
|
+
# a copy of the License at #
|
7
|
+
# #
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0 #
|
9
|
+
# #
|
10
|
+
# Unless required by applicable law or agreed to in writing, software #
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, #
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
13
|
+
# See the License for the specific language governing permissions and #
|
14
|
+
# limitations under the License. #
|
15
|
+
#--------------------------------------------------------------------------- #
|
16
|
+
|
17
|
+
require 'one_helper'
|
18
|
+
|
19
|
+
class OneVdcHelper < OpenNebulaHelper::OneHelper
|
20
|
+
|
21
|
+
def self.rname
|
22
|
+
"VDC"
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.conf_file
|
26
|
+
"onevdc.yaml"
|
27
|
+
end
|
28
|
+
|
29
|
+
def id_list_size(list)
|
30
|
+
case list
|
31
|
+
when NilClass
|
32
|
+
return 0
|
33
|
+
when Array
|
34
|
+
return list.size
|
35
|
+
when Hash
|
36
|
+
return 1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def format_pool(options)
|
41
|
+
config_file = self.class.table_conf
|
42
|
+
|
43
|
+
table = CLIHelper::ShowTable.new(config_file, self) do
|
44
|
+
column :ID, "ONE identifier for the VDC", :size=>5 do |d|
|
45
|
+
d["ID"]
|
46
|
+
end
|
47
|
+
|
48
|
+
column :NAME, "Name of the VDC", :left, :size=>30 do |d|
|
49
|
+
d["NAME"]
|
50
|
+
end
|
51
|
+
|
52
|
+
column :GROUPS, "Number of Groups", :size=>6 do |d|
|
53
|
+
ids = d["GROUPS"]["ID"]
|
54
|
+
case ids
|
55
|
+
when String
|
56
|
+
1
|
57
|
+
when Array
|
58
|
+
ids.size
|
59
|
+
when NilClass
|
60
|
+
0
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
column :CLUSTERS, "Number of Clusters", :size=>8 do |d|
|
65
|
+
@ext.id_list_size(d["CLUSTERS"]["CLUSTER"])
|
66
|
+
end
|
67
|
+
|
68
|
+
column :HOSTS, "Number of Hosts", :size=>5 do |d|
|
69
|
+
@ext.id_list_size(d["HOSTS"]["HOST"])
|
70
|
+
end
|
71
|
+
|
72
|
+
column :VNETS, "Number of Networks", :size=>5 do |d|
|
73
|
+
@ext.id_list_size(d["VNETS"]["VNET"])
|
74
|
+
end
|
75
|
+
|
76
|
+
column :DATASTORES, "Number of Datastores", :size=>10 do |d|
|
77
|
+
@ext.id_list_size(d["DATASTORES"]["DATASTORE"])
|
78
|
+
end
|
79
|
+
|
80
|
+
default :ID, :NAME, :GROUPS, :CLUSTERS, :HOSTS, :VNETS, :DATASTORES
|
81
|
+
end
|
82
|
+
|
83
|
+
table
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def factory(id=nil)
|
89
|
+
if id
|
90
|
+
OpenNebula::Vdc.new_with_id(id, @client)
|
91
|
+
else
|
92
|
+
xml=OpenNebula::Vdc.build_xml
|
93
|
+
OpenNebula::Vdc.new(xml, @client)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def factory_pool(user_flag=-2)
|
98
|
+
OpenNebula::VdcPool.new(@client)
|
99
|
+
end
|
100
|
+
|
101
|
+
def format_resource(vdc, options = {})
|
102
|
+
str="%-18s: %-20s"
|
103
|
+
str_h1="%-80s"
|
104
|
+
|
105
|
+
CLIHelper.print_header(str_h1 % "VDC #{vdc['ID']} INFORMATION")
|
106
|
+
puts str % ["ID", vdc.id.to_s]
|
107
|
+
puts str % ["NAME", vdc.name]
|
108
|
+
|
109
|
+
vdc_hash = vdc.to_hash
|
110
|
+
|
111
|
+
groups = vdc_hash['VDC']['GROUPS']['ID']
|
112
|
+
if(groups != nil)
|
113
|
+
puts
|
114
|
+
|
115
|
+
CLIHelper::ShowTable.new(nil, self) do
|
116
|
+
column :"GROUPS", "", :right, :size=>7 do |d|
|
117
|
+
d
|
118
|
+
end
|
119
|
+
end.show([groups].flatten, {})
|
120
|
+
end
|
121
|
+
|
122
|
+
['CLUSTER', 'HOST', 'DATASTORE', 'VNET'].each do |resource|
|
123
|
+
res_array = vdc_hash['VDC']["#{resource}S"][resource]
|
124
|
+
if(res_array != nil)
|
125
|
+
puts
|
126
|
+
CLIHelper.print_header(str_h1 % "#{resource}S", false)
|
127
|
+
|
128
|
+
CLIHelper::ShowTable.new(nil, self) do
|
129
|
+
column :"ZONE", "", :right, :size=>7 do |d|
|
130
|
+
d['ZONE_ID']
|
131
|
+
end
|
132
|
+
|
133
|
+
column :"#{resource}", "", :right, :size=>9 do |d|
|
134
|
+
d["#{resource}_ID"] == Vdc::ALL_RESOURCES ? 'ALL' : d["#{resource}_ID"]
|
135
|
+
end
|
136
|
+
end.show([res_array].flatten, {})
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
puts
|
141
|
+
CLIHelper.print_header(str_h1 % "VDC TEMPLATE", false)
|
142
|
+
puts vdc.template_str
|
143
|
+
end
|
144
|
+
end
|
@@ -404,63 +404,24 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
404
404
|
end if !options[:all]
|
405
405
|
end
|
406
406
|
|
407
|
-
|
408
|
-
vm_information = vm.to_hash['VM']
|
409
|
-
hybridvisor = vm_information['USER_TEMPLATE']['HYPERVISOR'].to_s
|
410
|
-
isHybrid = %w{vcenter ec2 azure softlayer}.include? hybridvisor
|
411
|
-
|
412
|
-
if isHybrid
|
413
|
-
vm_tmplt = vm_information['TEMPLATE']
|
414
|
-
nic = {"NETWORK" => "-",
|
415
|
-
"IP" => "-",
|
416
|
-
"MAC"=> "-",
|
417
|
-
"VLAN"=>"no",
|
418
|
-
"BRIDGE"=>"-"}
|
407
|
+
sg_nics = []
|
419
408
|
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
when "azure"
|
426
|
-
nic["IP"] = vm_tmplt['IPADDRESS'] if vm_tmplt['IPADDRESS']
|
427
|
-
when "softlayer"
|
428
|
-
nic["IP"] = vm_tmplt['PRIMARYIPADDRESS'] if vm_tmplt['PRIMARYIPADDRESS']
|
429
|
-
else
|
430
|
-
isHybrid = false
|
431
|
-
end
|
409
|
+
if (vm.has_elements?("/VM/TEMPLATE/NIC/SECURITY_GROUPS"))
|
410
|
+
sg_nics = [vm.to_hash['VM']['TEMPLATE']['NIC']].flatten
|
411
|
+
|
412
|
+
sg_nics.each do |nic|
|
413
|
+
sg = nic["SECURITY_GROUPS"]
|
432
414
|
|
433
|
-
|
415
|
+
if sg.nil?
|
416
|
+
next
|
417
|
+
end
|
434
418
|
end
|
435
419
|
end
|
436
420
|
|
437
|
-
if vm.has_elements?("/VM/TEMPLATE/NIC")
|
421
|
+
if vm.has_elements?("/VM/TEMPLATE/NIC")
|
438
422
|
puts
|
439
423
|
CLIHelper.print_header(str_h1 % "VM NICS",false)
|
440
424
|
|
441
|
-
# vm_nics is defined for hybridvisors. If there are both IP from
|
442
|
-
# the hybridvisor and from OpenNebula nics check if the IP is the
|
443
|
-
# same as one of IPs generated by OpenNebula and show standard
|
444
|
-
# information. If it's a different IP show all the information.
|
445
|
-
#
|
446
|
-
# The template can already contain one NIC not controled by
|
447
|
-
# OpenNebula and we want to show also that info.
|
448
|
-
if vm_nics
|
449
|
-
if vm.has_elements?("/VM/TEMPLATE/NIC")
|
450
|
-
nics = [vm.to_hash['VM']['TEMPLATE']['NIC']].flatten
|
451
|
-
ips = nics.map {|n| n['IP'] }
|
452
|
-
ip = vm_nics.first['IP']
|
453
|
-
|
454
|
-
if ips.include? ip
|
455
|
-
vm_nics = nics
|
456
|
-
else
|
457
|
-
vm_nics += nics
|
458
|
-
end
|
459
|
-
end
|
460
|
-
else
|
461
|
-
vm_nics = [vm.to_hash['VM']['TEMPLATE']['NIC']].flatten
|
462
|
-
end
|
463
|
-
|
464
425
|
nic_default = {"NETWORK" => "-",
|
465
426
|
"IP" => "-",
|
466
427
|
"MAC"=> "-",
|
@@ -468,7 +429,7 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
468
429
|
"BRIDGE"=>"-"}
|
469
430
|
|
470
431
|
array_id = 0
|
471
|
-
|
432
|
+
vm_nics = [vm.to_hash['VM']['TEMPLATE']['NIC']].flatten
|
472
433
|
vm_nics.each {|nic|
|
473
434
|
|
474
435
|
next if nic.has_key?("CLI_DONE")
|
@@ -556,6 +517,88 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
|
|
556
517
|
end if !options[:all]
|
557
518
|
end
|
558
519
|
|
520
|
+
while vm.has_elements?("/VM/TEMPLATE/NIC")
|
521
|
+
vm.delete_element("/VM/TEMPLATE/NIC")
|
522
|
+
end if !options[:all]
|
523
|
+
|
524
|
+
if vm.has_elements?("/VM/TEMPLATE/SECURITY_GROUP_RULE")
|
525
|
+
puts
|
526
|
+
CLIHelper.print_header(str_h1 % "SECURITY",false)
|
527
|
+
puts
|
528
|
+
|
529
|
+
CLIHelper::ShowTable.new(nil, self) do
|
530
|
+
column :NIC_ID, "", :size=>6 do |d|
|
531
|
+
d["NIC_ID"]
|
532
|
+
end
|
533
|
+
|
534
|
+
column :NETWORK, "", :left, :size=>25 do |d|
|
535
|
+
d["NETWORK"]
|
536
|
+
end
|
537
|
+
|
538
|
+
column :SECURITY_GROUPS, "", :left, :size=>47 do |d|
|
539
|
+
d["SECURITY_GROUPS"]
|
540
|
+
end
|
541
|
+
end.show(sg_nics,{})
|
542
|
+
|
543
|
+
puts
|
544
|
+
|
545
|
+
CLIHelper.print_header(str_h1 % "SECURITY GROUP TYPE PROTOCOL NETWORK RANGE ",false)
|
546
|
+
|
547
|
+
CLIHelper::ShowTable.new(nil, self) do
|
548
|
+
column :ID, "", :size=>4 do |d|
|
549
|
+
d["SECURITY_GROUP_ID"]
|
550
|
+
end
|
551
|
+
|
552
|
+
column :NAME, "", :left, :size=>11 do |d|
|
553
|
+
d["SECURITY_GROUP_NAME"]
|
554
|
+
end
|
555
|
+
|
556
|
+
column :" ", "", :left, :size=>8 do |d|
|
557
|
+
d["RULE_TYPE"]
|
558
|
+
end
|
559
|
+
|
560
|
+
column :" ", "", :left, :size=>8 do |d|
|
561
|
+
protocol = d["PROTOCOL"]
|
562
|
+
|
563
|
+
if(protocol.upcase == "ICMP")
|
564
|
+
icmp = d["ICMP_TYPE"].nil? ? "" : "-#{d["ICMP_TYPE"]}"
|
565
|
+
protocol += icmp
|
566
|
+
end
|
567
|
+
|
568
|
+
protocol
|
569
|
+
end
|
570
|
+
|
571
|
+
column :VNET, "", :size=>4 do |d|
|
572
|
+
d["NETWORK_ID"]
|
573
|
+
end
|
574
|
+
|
575
|
+
column :START, "", :left, :donottruncate, :size=>17 do |d|
|
576
|
+
network = ""
|
577
|
+
|
578
|
+
if(!d["IP"].nil? && d["IP"] != "")
|
579
|
+
network = d["IP"]
|
580
|
+
elsif(!d["MAC"].nil? && d["MAC"] != "")
|
581
|
+
network = d["MAC"]
|
582
|
+
end
|
583
|
+
|
584
|
+
network
|
585
|
+
end
|
586
|
+
|
587
|
+
column :SIZE, "", :left, :donottruncate, :size=>6 do |d|
|
588
|
+
d["SIZE"]
|
589
|
+
end
|
590
|
+
|
591
|
+
column :" ", "", :left, :donottruncate, :size=>15 do |d|
|
592
|
+
d["RANGE"]
|
593
|
+
end
|
594
|
+
|
595
|
+
end.show([vm.to_hash['VM']['TEMPLATE']['SECURITY_GROUP_RULE']].flatten, {})
|
596
|
+
|
597
|
+
while vm.has_elements?("/VM/TEMPLATE/SECURITY_GROUP_RULE")
|
598
|
+
vm.delete_element("/VM/TEMPLATE/SECURITY_GROUP_RULE")
|
599
|
+
end if !options[:all]
|
600
|
+
end
|
601
|
+
|
559
602
|
if vm.has_elements?("/VM/TEMPLATE/SNAPSHOT")
|
560
603
|
puts
|
561
604
|
CLIHelper.print_header(str_h1 % "SNAPSHOTS",false)
|