opennebula-cli 5.6.2 → 5.7.80.pre

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.
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")