opennebula-cli 5.6.2 → 5.7.80.pre

Sign up to get free protection for your applications and to get access to all the features.
data/bin/onezone CHANGED
@@ -16,31 +16,32 @@
16
16
  # limitations under the License. #
17
17
  #--------------------------------------------------------------------------- #
18
18
 
19
- ONE_LOCATION=ENV["ONE_LOCATION"]
19
+ ONE_LOCATION = ENV['ONE_LOCATION']
20
20
 
21
21
  if !ONE_LOCATION
22
- RUBY_LIB_LOCATION="/usr/lib/one/ruby"
22
+ RUBY_LIB_LOCATION = '/usr/lib/one/ruby'
23
23
  else
24
- RUBY_LIB_LOCATION=ONE_LOCATION+"/lib/ruby"
24
+ RUBY_LIB_LOCATION = ONE_LOCATION + '/lib/ruby'
25
25
  end
26
26
 
27
- $: << RUBY_LIB_LOCATION
28
- $: << RUBY_LIB_LOCATION+"/cli"
27
+ $LOAD_PATH << RUBY_LIB_LOCATION
28
+ $LOAD_PATH << RUBY_LIB_LOCATION + '/cli'
29
29
 
30
30
  require 'command_parser'
31
31
  require 'one_helper/onezone_helper'
32
32
 
33
- cmd=CommandParser::CmdParser.new(ARGV) do
34
- usage "`onezone` <command> [<args>] [<options>]"
33
+ CommandParser::CmdParser.new(ARGV) do
34
+ usage '`onezone` <command> [<args>] [<options>]'
35
35
  version OpenNebulaHelper::ONE_VERSION
36
36
 
37
37
  helper = OneZoneHelper.new
38
38
 
39
39
  ENDPOINT = {
40
- :name => "keep",
41
- :short => "-k",
42
- :large => "--keep",
43
- :description => "Don't overwrite endpoint file located in home folder, use it as a temporary zone.",
40
+ :name => 'keep',
41
+ :short => '-k',
42
+ :large => '--keep',
43
+ :description => "Don't overwrite endpoint file located in home folder,"\
44
+ ' use it as a temporary zone.',
44
45
  :format => String
45
46
  }
46
47
 
@@ -51,7 +52,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
51
52
  ########################################################################
52
53
  # Global Options
53
54
  ########################################################################
54
- set :option, CommandParser::OPTIONS+OpenNebulaHelper::CLIENT_OPTIONS
55
+ set :option, CommandParser::OPTIONS + OpenNebulaHelper::CLIENT_OPTIONS
55
56
 
56
57
  list_options = CLIHelper::OPTIONS
57
58
  list_options << OpenNebulaHelper::XML
@@ -82,9 +83,9 @@ cmd=CommandParser::CmdParser.new(ARGV) do
82
83
  begin
83
84
  template = File.read(args[0])
84
85
  zone.allocate(template)
85
- rescue => e
86
+ rescue StandardError => e
86
87
  STDERR.puts e.message
87
- exit -1
88
+ exit(-1)
88
89
  end
89
90
  end
90
91
  end
@@ -94,7 +95,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
94
95
  EOT
95
96
 
96
97
  command :rename, rename_desc, :zoneid, :name do
97
- helper.perform_action(args[0],options,"renamed") do |o|
98
+ helper.perform_action(args[0], options, 'renamed') do |o|
98
99
  o.rename(args[1])
99
100
  end
100
101
  end
@@ -104,13 +105,13 @@ cmd=CommandParser::CmdParser.new(ARGV) do
104
105
  EOT
105
106
 
106
107
  command :"server-add", addserver_desc, :zoneid, :options =>
107
- [ OneZoneHelper::SERVER_NAME, OneZoneHelper::SERVER_ENDPOINT] do
108
+ [OneZoneHelper::SERVER_NAME, OneZoneHelper::SERVER_ENDPOINT] do
108
109
 
109
110
  if options[:server_name].nil? || options[:server_rpc].nil?
110
- STDERR.puts "To add a server set:"
111
+ STDERR.puts 'To add a server set:'
111
112
  STDERR.puts "\t-n <server name>"
112
113
  STDERR.puts "\t-r <RPC endpoint>"
113
- exit -1
114
+ exit(-1)
114
115
  end
115
116
 
116
117
  template = <<-EOT
@@ -120,10 +121,9 @@ cmd=CommandParser::CmdParser.new(ARGV) do
120
121
  ]
121
122
  EOT
122
123
 
123
- helper.perform_action(args[0], options, "server added") do |o|
124
+ helper.perform_action(args[0], options, 'server added') do |o|
124
125
  o.add_servers(template)
125
126
  end
126
-
127
127
  end
128
128
 
129
129
  delserver_desc = <<-EOT.unindent
@@ -131,10 +131,9 @@ cmd=CommandParser::CmdParser.new(ARGV) do
131
131
  EOT
132
132
 
133
133
  command :"server-del", delserver_desc, :zoneid, :serverid do
134
- helper.perform_action(args[0], options, "server deleted") do |o|
134
+ helper.perform_action(args[0], options, 'server deleted') do |o|
135
135
  o.delete_servers(args[1].to_i)
136
136
  end
137
-
138
137
  end
139
138
 
140
139
  resetserver_desc = <<-EOT.unindent
@@ -143,7 +142,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
143
142
  EOT
144
143
 
145
144
  command :"server-reset", resetserver_desc, :zoneid, :serverid do
146
- helper.perform_action(args[0], options, "server reset") do |o|
145
+ helper.perform_action(args[0], options, 'server reset') do |o|
147
146
  o.reset_server(args[1].to_i)
148
147
  end
149
148
  end
@@ -154,8 +153,8 @@ cmd=CommandParser::CmdParser.new(ARGV) do
154
153
  EOT
155
154
 
156
155
  command :update, update_desc, :zoneid, [:file, nil],
157
- :options=>OpenNebulaHelper::APPEND do
158
- helper.perform_action(args[0],options,"modified") do |obj|
156
+ :options => OpenNebulaHelper::APPEND do
157
+ helper.perform_action(args[0], options, 'modified') do |obj|
159
158
  if options[:append]
160
159
  str = OpenNebulaHelper.append_template(args[0], obj, args[1])
161
160
  else
@@ -174,7 +173,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
174
173
  EOT
175
174
 
176
175
  command :delete, delete_desc, [:range, :zoneid_list] do
177
- helper.perform_actions(args[0],options,"deleted") do |obj|
176
+ helper.perform_actions(args[0], options, 'deleted') do |obj|
178
177
  obj.delete
179
178
  end
180
179
  end
@@ -183,7 +182,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
183
182
  Lists Zones in the pool
184
183
  EOT
185
184
 
186
- command :list, list_desc, :options=>list_options do
185
+ command :list, list_desc, :options => list_options do
187
186
  helper.list_pool(options)
188
187
  end
189
188
 
@@ -191,16 +190,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do
191
190
  Shows information for the given Zone
192
191
  EOT
193
192
 
194
- command :show, show_desc,:zoneid, :options=>OpenNebulaHelper::XML do
195
- helper.show_resource(args[0],options)
193
+ command :show, show_desc, :zoneid, :options => OpenNebulaHelper::XML do
194
+ helper.show_resource(args[0], options)
196
195
  end
197
196
 
198
197
  set_desc = <<-EOT.unindent
199
198
  Set shell session access point for the CLI to the given Zone
200
199
  EOT
201
200
 
202
- command :set, set_desc,:zoneid, :options=>ENDPOINT do
203
- if options.has_key? :keep
201
+ command :set, set_desc, :zoneid, :options => ENDPOINT do
202
+ if options.key? :keep
204
203
  helper.set_zone(args[0], true)
205
204
  else
206
205
  helper.set_zone(args[0], false)
data/lib/one_helper.rb CHANGED
@@ -15,7 +15,6 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
  require 'cli_helper'
18
-
19
18
  require 'open3'
20
19
  require 'io/console'
21
20
 
@@ -179,6 +178,20 @@ EOT
179
178
  }
180
179
  ]
181
180
 
181
+ AS_USER = {
182
+ :name => 'as_uid',
183
+ :large => '--as_uid uid',
184
+ :format => Integer,
185
+ :description => 'The User ID to instantiate the VM'
186
+ }
187
+
188
+ AS_GROUP = {
189
+ :name => 'as_gid',
190
+ :large => '--as_gid gid',
191
+ :format => Integer,
192
+ :description => 'The Group ID to instantiate the VM'
193
+ }
194
+
182
195
  #NOTE: Other options defined using this array, add new options at the end
183
196
  TEMPLATE_OPTIONS=[
184
197
  {
@@ -246,7 +259,8 @@ EOT
246
259
  :description => "Networks to attach. To use a network owned by"<<
247
260
  " other user use user[network]. Additional"<<
248
261
  " attributes are supported like with the --disk"<<
249
- " option.",
262
+ " option. Also you can use auto if you want that" <<
263
+ " OpenNebula select automatically the network",
250
264
  :format => Array
251
265
  },
252
266
  {
@@ -367,18 +381,8 @@ EOT
367
381
  :description => "In a vCenter environment sets the the VMs and Template folder where the VM will be placed in." \
368
382
  " The path uses slashes to separate folders. For example: --vcenter_vm_folder \"/Management/VMs\""
369
383
  },
370
- {
371
- :name => 'as_uid',
372
- :large => '--as_uid uid',
373
- :format => Integer,
374
- :description => 'The User ID to instantiate the VM'
375
- },
376
- {
377
- :name => 'as_gid',
378
- :large => '--as_gid gid',
379
- :format => Integer,
380
- :description => 'The Group ID to instantiate the VM'
381
- }
384
+ AS_GROUP,
385
+ AS_USER
382
386
  ]
383
387
 
384
388
  FORCE={
@@ -1241,15 +1245,19 @@ EOT
1241
1245
  user, object=*res
1242
1246
 
1243
1247
  template<<"#{section.upcase}=[\n"
1244
- template<<" #{name.upcase}_UNAME=\"#{user}\",\n" if user
1245
- extra_attributes.each do |extra_attribute|
1246
- key, value = extra_attribute.split("=")
1247
- template<<" #{key.upcase}=\"#{value}\",\n"
1248
- end
1249
- if object.match(/^\d+$/)
1250
- template<<" #{name.upcase}_ID=#{object}\n"
1248
+ if object.downcase == "auto"
1249
+ template<<" NETWORK_MODE=\"#{object}\"\n"
1251
1250
  else
1252
- template<<" #{name.upcase}=\"#{object}\"\n"
1251
+ template<<" #{name.upcase}_UNAME=\"#{user}\",\n" if user
1252
+ extra_attributes.each do |extra_attribute|
1253
+ key, value = extra_attribute.split("=")
1254
+ template<<" #{key.upcase}=\"#{value}\",\n"
1255
+ end
1256
+ if object.match(/^\d+$/)
1257
+ template<<" #{name.upcase}_ID=#{object}\n"
1258
+ else
1259
+ template<<" #{name.upcase}=\"#{object}\"\n"
1260
+ end
1253
1261
  end
1254
1262
  template<<"]\n"
1255
1263
  end if objects
@@ -1404,6 +1412,82 @@ EOT
1404
1412
  [0, template]
1405
1413
  end
1406
1414
 
1415
+ def self.create_ar(options)
1416
+ ar = 'AR = [ '
1417
+
1418
+ if options[:ip]
1419
+ if options[:ip6_global] || options[:ip6_ula]
1420
+ ar << 'TYPE="IP4_6"'
1421
+ elsif options[:ip6]
1422
+ ar << 'TYPE="IP4_6_STATIC"'
1423
+ else
1424
+ ar << 'TYPE="IP4"'
1425
+ end
1426
+ elsif options[:ip6]
1427
+ ar << 'TYPE="IP6_STATIC"'
1428
+ elsif options[:ip6_global] || options[:ip6_ula]
1429
+ ar << 'TYPE="IP6"'
1430
+ else
1431
+ ar << 'TYPE="ETHER"'
1432
+ end
1433
+
1434
+ if options[:size]
1435
+ ar << ', SIZE = ' << options[:size]
1436
+ else
1437
+ STDERR.puts 'Address range needs to specify size (-s size)'
1438
+ exit(-1)
1439
+ end
1440
+
1441
+ if options[:ip6]
1442
+ m = %r{([\h:]*)\/(\d.*)$}.match(options[:ip6])
1443
+
1444
+ if m.nil? || m[1].nil?
1445
+ STDERR.puts 'Missing or wrong IP6'
1446
+ exit(-1)
1447
+ else
1448
+ begin
1449
+ require 'ipaddr'
1450
+
1451
+ ip = IPAddr.new(m[1])
1452
+
1453
+ if !ip.ipv6?
1454
+ STDERR.puts 'Wrong IP6 format address'
1455
+ exit(-1)
1456
+ end
1457
+ rescue StandardError
1458
+ STDERR.puts 'Wrong IP6 format address'
1459
+ exit(-1)
1460
+ end
1461
+
1462
+ end
1463
+
1464
+ if m[2].nil?
1465
+ STDERR.puts 'IP6 address need to set the prefix length'
1466
+ exit(-1)
1467
+ end
1468
+
1469
+ ar << ", PREFIX_LENGTH=\"#{m[2]}\""
1470
+
1471
+ options[:ip6] = m[1]
1472
+ end
1473
+
1474
+ ar << ', IP = ' << options[:ip] if options[:ip]
1475
+ ar << ', IP6 = ' << options[:ip6] if options[:ip6]
1476
+ ar << ', MAC = ' << options[:mac] if options[:mac]
1477
+ if options[:ip6_global]
1478
+ ar << ', GLOBAL_PREFIX = ' << options[:ip6_global]
1479
+ end
1480
+ if options[:ip6_ula]
1481
+ ar << ', ULA_PREFIX = ' << options[:ip6_ula]
1482
+ end
1483
+ ar << ', GATEWAY = ' << options[:gateway] if options[:gateway]
1484
+ ar << ', MASK = ' << options[:netmask] if options[:netmask]
1485
+ ar << ', VN_MAD = ' << options[:vn_mad] if options[:vn_mad]
1486
+ ar << ', VLAN_ID = ' << options[:vlanid] if options[:vlanid]
1487
+
1488
+ ar << ']'
1489
+ end
1490
+
1407
1491
  def self.create_template_options_used?(options)
1408
1492
  # Get the template options names as symbols. options hash
1409
1493
  # uses symbols
@@ -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
@@ -82,6 +82,8 @@ private
82
82
  mask[15] = "A"
83
83
  when "VMGROUP"
84
84
  mask[16] = "P"
85
+ when "VNTEMPLATE"
86
+ mask[17] = "t"
85
87
  end
86
88
  }
87
89
  mask
@@ -121,8 +123,8 @@ private
121
123
  d['STRING'].split(" ")[0]
122
124
  end
123
125
 
124
- column :RES_VHNIUTGDCOZSvRMAP, "Resource to which the rule applies",
125
- :size => 21 do |d|
126
+ column :RES_VHNIUTGDCOZSvRMAPt, "Resource to which the rule applies",
127
+ :size => 22 do |d|
126
128
  OneAclHelper::resource_mask d['STRING'].split(" ")[1]
127
129
  end
128
130
 
@@ -139,7 +141,7 @@ private
139
141
  OneAclHelper::right_mask d['STRING'].split(" ")[2]
140
142
  end
141
143
 
142
- default :ID, :USER, :RES_VHNIUTGDCOZSvRMAP, :RID, :OPE_UMAC, :ZONE
144
+ default :ID, :USER, :RES_VHNIUTGDCOZSvRMAPt, :RID, :OPE_UMAC, :ZONE
143
145
  end
144
146
 
145
147
  table
@@ -359,7 +359,7 @@ class OneVcenterHelper < OpenNebulaHelper::OneHelper
359
359
  end
360
360
 
361
361
  def self.network_dialogue(n)
362
- ask = -> (question, default = ""){
362
+ ask = ->(question, default = ""){
363
363
  STDOUT.print question
364
364
  answer = STDIN.gets.strip
365
365
 
@@ -171,6 +171,33 @@ class OneVMHelper < OpenNebulaHelper::OneHelper
171
171
  :description=> "Does not communicate with the guest OS"
172
172
  }
173
173
 
174
+ POFF = {
175
+ :name => "poweroff",
176
+ :large => "--poff",
177
+ :description => "Do the migrate by poweringoff the vm"
178
+ }
179
+
180
+ POFFHARD = {
181
+ :name => "poweroff_hard",
182
+ :large => "--poff-hard",
183
+ :description => "Do the migrate by poweringoff hard the vm"
184
+ }
185
+
186
+ ALIAS = {
187
+ :name => "alias",
188
+ :short => "-a alias",
189
+ :large => "--alias alias",
190
+ :description=> "Attach the NIC as an ALIAS",
191
+ :format => String
192
+ }
193
+
194
+ NIC_NAME = {
195
+ :name => "nic_name",
196
+ :large => "--nic_name name",
197
+ :description=> "Name of the NIC",
198
+ :format => String
199
+ }
200
+
174
201
  def self.rname
175
202
  "VM"
176
203
  end
@@ -529,6 +556,16 @@ in the frontend machine.
529
556
  puts
530
557
  end
531
558
 
559
+ def get_migration_type(options)
560
+ if options[:poweroff]
561
+ return 1
562
+ elsif options[:poweroff_hard]
563
+ return 2
564
+ else
565
+ return 0
566
+ end
567
+ end
568
+
532
569
  private
533
570
 
534
571
  def factory(id=nil)
@@ -800,132 +837,138 @@ in the frontend machine.
800
837
 
801
838
  extra_ips.uniq!
802
839
 
803
- if vm.has_elements?("/VM/TEMPLATE/NIC") ||
804
- vm.has_elements?("/VM/TEMPLATE/PCI[NIC_ID>-1]") || !extra_ips.empty?
840
+ ['NIC', 'NIC_ALIAS'].each do |type|
841
+ if vm.has_elements?("/VM/TEMPLATE/#{type}") ||
842
+ vm.has_elements?("/VM/TEMPLATE/PCI[NIC_ID>-1]") || !extra_ips.empty?
805
843
 
806
- puts
807
- CLIHelper.print_header(str_h1 % "VM NICS",false)
844
+ puts
845
+ CLIHelper.print_header(str_h1 % "VM #{type == 'NIC' ? 'NICS' : 'ALIAS'}",false)
808
846
 
809
- nic_default = {"NETWORK" => "-",
810
- "IP" => "-",
811
- "MAC"=> "-",
812
- "BRIDGE"=>"-"}
847
+ nic_default = {"NETWORK" => "-",
848
+ "IP" => "-",
849
+ "MAC"=> "-",
850
+ "BRIDGE"=>"-"}
813
851
 
814
- shown_ips = []
852
+ shown_ips = []
815
853
 
816
- array_id = 0
817
- vm_nics = [vm_hash['VM']['TEMPLATE']['NIC']]
854
+ array_id = 0
855
+ vm_nics = [vm_hash['VM']['TEMPLATE'][type]]
818
856
 
819
- vm_pcis = [vm_hash['VM']['TEMPLATE']['PCI']].flatten.compact
857
+ if type == 'NIC'
858
+ vm_pcis = [vm_hash['VM']['TEMPLATE']['PCI']].flatten.compact
820
859
 
821
- vm_pcis.each do |pci|
822
- if !pci['NIC_ID'].nil?
823
- vm_nics << pci
860
+ vm_pcis.each do |pci|
861
+ if !pci['NIC_ID'].nil?
862
+ vm_nics << pci
863
+ end
864
+ end
824
865
  end
825
- end
826
866
 
827
- vm_nics.flatten!
828
- vm_nics.compact!
867
+ vm_nics.flatten!
868
+ vm_nics.compact!
829
869
 
830
- vm_nics.each {|nic|
870
+ vm_nics.each {|nic|
831
871
 
832
- next if nic.has_key?("CLI_DONE")
872
+ next if nic.has_key?("CLI_DONE")
833
873
 
834
- ["IP6_LINK", "IP6_ULA", "IP6_GLOBAL", "IP6"].each do |attr|
835
- if nic.has_key?(attr)
836
- shown_ips << nic[attr]
874
+ ["IP6_LINK", "IP6_ULA", "IP6_GLOBAL", "IP6"].each do |attr|
875
+ if nic.has_key?(attr)
876
+ shown_ips << nic[attr]
837
877
 
838
- ipstr = {"IP" => nic.delete(attr),
839
- "CLI_DONE" => true,
840
- "DOUBLE_ENTRY" => true}
841
- vm_nics.insert(array_id+1,ipstr)
878
+ ipstr = {"IP" => nic.delete(attr),
879
+ "CLI_DONE" => true,
880
+ "DOUBLE_ENTRY" => true}
881
+ vm_nics.insert(array_id+1,ipstr)
842
882
 
843
- array_id += 1
883
+ array_id += 1
884
+ end
844
885
  end
845
- end
846
886
 
847
- ["VROUTER_IP", "VROUTER_IP6_LINK",
848
- "VROUTER_IP6_ULA", "VROUTER_IP6_GLOBAL"].each do |attr|
849
- if nic.has_key?(attr)
850
- shown_ips << nic[attr]
887
+ ["VROUTER_IP", "VROUTER_IP6_LINK",
888
+ "VROUTER_IP6_ULA", "VROUTER_IP6_GLOBAL"].each do |attr|
889
+ if nic.has_key?(attr)
890
+ shown_ips << nic[attr]
851
891
 
852
- ipstr = {"IP" => nic.delete(attr) + " (VRouter)",
853
- "CLI_DONE" => true,
854
- "DOUBLE_ENTRY" => true}
855
- vm_nics.insert(array_id+1,ipstr)
892
+ ipstr = {"IP" => nic.delete(attr) + " (VRouter)",
893
+ "CLI_DONE" => true,
894
+ "DOUBLE_ENTRY" => true}
895
+ vm_nics.insert(array_id+1,ipstr)
856
896
 
857
- array_id += 1
897
+ array_id += 1
898
+ end
858
899
  end
859
- end
860
900
 
861
- shown_ips << nic["IP"] if nic.has_key?("IP")
901
+ shown_ips << nic["IP"] if nic.has_key?("IP")
862
902
 
863
- nic.merge!(nic_default) {|k,v1,v2| v1}
864
- array_id += 1
865
- }
903
+ nic.merge!(nic_default) {|k,v1,v2| v1}
904
+ array_id += 1
905
+ }
866
906
 
867
- extra_ips -= shown_ips
907
+ extra_ips -= shown_ips
868
908
 
869
- # Add extra IPs to the VM NICS table
870
- extra_ips.each do |ip|
871
- vm_nics << {
872
- "NIC_ID" => "-",
873
- "IP" => ip,
874
- "NETWORK" => "Additional IP",
875
- "BRIDGE" => "-"
876
- }
877
- end
909
+ # Add extra IPs to the VM NICS table
910
+ extra_ips.each do |ip|
911
+ vm_nics << {
912
+ "NIC_ID" => "-",
913
+ "IP" => ip,
914
+ "NETWORK" => "Additional IP",
915
+ "BRIDGE" => "-"
916
+ }
917
+ end
878
918
 
879
- CLIHelper::ShowTable.new(nil, self) do
880
- column :ID, "", :size=>3 do |d|
881
- if d["DOUBLE_ENTRY"]
882
- ""
883
- else
884
- d["NIC_ID"]
919
+ CLIHelper::ShowTable.new(nil, self) do
920
+ column :ID, "", :size=>3 do |d|
921
+ if d["DOUBLE_ENTRY"]
922
+ ""
923
+ else
924
+ d["NIC_ID"]
925
+ end
885
926
  end
886
- end
887
927
 
888
- column :NETWORK, "", :left, :size=>20 do |d|
889
- if d["DOUBLE_ENTRY"]
890
- ""
891
- else
892
- d["NETWORK"]
928
+ column :NETWORK, "", :left, :size=>20 do |d|
929
+ if d["DOUBLE_ENTRY"]
930
+ ""
931
+ else
932
+ d["NETWORK"]
933
+ end
893
934
  end
894
- end
895
935
 
896
- column :BRIDGE, "", :left, :size=>12 do |d|
897
- if d["DOUBLE_ENTRY"]
898
- ""
899
- else
900
- d["BRIDGE"]
936
+ column :BRIDGE, "", :left, :size=>12 do |d|
937
+ if d["DOUBLE_ENTRY"]
938
+ ""
939
+ else
940
+ d["BRIDGE"]
941
+ end
901
942
  end
902
- end
903
943
 
904
- column :IP, "",:left, :donottruncate, :size=>15 do |d|
905
- d["IP"]
906
- end
944
+ column :IP, "",:left, :donottruncate, :size=>15 do |d|
945
+ d["IP"]
946
+ end
907
947
 
908
- column :MAC, "", :left, :size=>17 do |d|
909
- if d["DOUBLE_ENTRY"]
910
- ""
911
- else
912
- d["MAC"]
948
+ column :MAC, "", :left, :size=>17 do |d|
949
+ if d["DOUBLE_ENTRY"]
950
+ ""
951
+ else
952
+ d["MAC"]
953
+ end
913
954
  end
914
- end
915
955
 
916
- column :PCI_ID, "", :left, :size=>8 do |d|
917
- if d["DOUBLE_ENTRY"]
918
- ""
919
- else
920
- d["PCI_ID"]
956
+ if type == 'NIC'
957
+ column :PCI_ID, "", :left, :size=>8 do |d|
958
+ if d["DOUBLE_ENTRY"]
959
+ ""
960
+ else
961
+ d["PCI_ID"]
962
+ end
963
+ end
921
964
  end
922
- end
923
965
 
924
- end.show(vm_nics,{})
966
+ end.show(vm_nics,{})
925
967
 
926
- while vm.has_elements?("/VM/TEMPLATE/NIC")
927
- vm.delete_element("/VM/TEMPLATE/NIC")
928
- end if !options[:all]
968
+ while vm.has_elements?("/VM/TEMPLATE/#{type}")
969
+ vm.delete_element("/VM/TEMPLATE/#{type}")
970
+ end if !options[:all]
971
+ end
929
972
  end
930
973
 
931
974
  while vm.has_elements?("/VM/TEMPLATE/NIC")