1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-20 10:50:08 +03:00

feature #3330: Filter existing templates and nets

(cherry picked from commit 3af8bad7cdb665d2de2b823146d2147e582d63f4)
This commit is contained in:
Daniel Molina 2015-01-14 18:10:16 +01:00
parent 199e070f6d
commit 7ca6790f6b
2 changed files with 67 additions and 45 deletions

View File

@ -182,7 +182,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
next if STDIN.gets.strip.downcase != 'y'
if tmps.empty?
STDOUT.print " No VM Templates found in #{dc}...\n\n"
STDOUT.print " No new VM Templates found in #{dc}...\n\n"
next
end
@ -253,7 +253,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
next if STDIN.gets.strip.downcase != 'y'
if tmps.empty?
STDOUT.print " No Networks found in #{dc}...\n\n"
STDOUT.print " No new Networks found in #{dc}...\n\n"
next
end

View File

@ -204,12 +204,18 @@ class VIClient
########################################################################
# Builds a hash with the Datacenter / VM Templates for this VCenter
# @param one_client [OpenNebula::Client] Use this client instead of @one
# @return [Hash] in the form
# { dc_name [String] => }
########################################################################
def vm_templates
def vm_templates(one_client=nil)
vm_templates = {}
tpool = OpenNebula::TemplatePool.new(
(one_client||@one), OpenNebula::Pool::INFO_ALL)
rc = tpool.info
# TODO check error
datacenters = get_entities(@root, 'Datacenter')
datacenters.each { |dc|
@ -222,12 +228,16 @@ class VIClient
tmp.each { |t|
vi_tmp = VCenterVm.new(self, t)
one_tmp << {
:name => vi_tmp.vm.name,
:uuid => vi_tmp.vm.config.uuid,
:host => vi_tmp.vm.runtime.host.parent.name,
:one => vi_tmp.to_one
}
if !tpool["VMTEMPLATE/TEMPLATE/PUBLIC_CLOUD[\
TYPE=\"vcenter\" \
and VM_TEMPLATE=\"#{vi_tmp.vm.config.uuid}\"]"]
one_tmp << {
:name => vi_tmp.vm.name,
:uuid => vi_tmp.vm.config.uuid,
:host => vi_tmp.vm.runtime.host.parent.name,
:one => vi_tmp.to_one
}
end
}
vm_templates[dc.name] = one_tmp
@ -239,12 +249,18 @@ class VIClient
########################################################################
# Builds a hash with the Datacenter / CCR (Distributed)Networks
# for this VCenter
# @param one_client [OpenNebula::Client] Use this client instead of @one
# @return [Hash] in the form
# { dc_name [String] => Networks [Array] }
########################################################################
def vcenter_networks
def vcenter_networks(one_client=nil)
vcenter_networks = {}
vnpool = OpenNebula::VirtualNetworkPool.new(
(one_client||@one), OpenNebula::Pool::INFO_ALL)
rc = vnpool.info
# TODO check error
#
datacenters = get_entities(@root, 'Datacenter')
datacenters.each { |dc|
@ -252,51 +268,57 @@ class VIClient
one_nets = []
networks.each { |n|
one_nets << {
:name => n.name,
:bridge => n.name,
:type => "Port Group",
:one => "NAME = \"#{n[:name]}\"\n" \
"BRIDGE = \"#{n[:name]}\"\n" \
"VCENTER_TYPE = \"Port Group\""
}
if !vnpool["VNET[BRIDGE=\"#{n[:name]}\"]/\
TEMPLATE[VCENTER_TYPE=\"Port Group\"]"]
one_nets << {
:name => n.name,
:bridge => n.name,
:type => "Port Group",
:one => "NAME = \"#{n[:name]}\"\n" \
"BRIDGE = \"#{n[:name]}\"\n" \
"VCENTER_TYPE = \"Port Group\""
}
end
}
networks = get_entities(dc.networkFolder,
'DistributedVirtualPortgroup' )
networks.each { |n|
vnet_template = "NAME = \"#{n[:name]}\"\n" \
"BRIDGE = \"#{n[:name]}\"\n" \
"VCENTER_TYPE = \"Distributed Port Group\""
if !vnpool["VNET[BRIDGE=\"#{n[:name]}\"]/\
TEMPLATE[VCENTER_TYPE=\"Distributed Port Group\"]"]
vnet_template = "NAME = \"#{n[:name]}\"\n" \
"BRIDGE = \"#{n[:name]}\"\n" \
"VCENTER_TYPE = \"Distributed Port Group\""
vlan = n.config.defaultPortConfig.vlan.vlanId
vlan_str = ""
vlan = n.config.defaultPortConfig.vlan.vlanId
vlan_str = ""
if vlan != 0
if vlan.is_a? Array
vlan.each{|v|
vlan_str += v.start.to_s + ".." + v.end.to_s + ","
}
vlan_str.chop!
else
vlan_str = vlan.to_s
if vlan != 0
if vlan.is_a? Array
vlan.each{|v|
vlan_str += v.start.to_s + ".." + v.end.to_s + ","
}
vlan_str.chop!
else
vlan_str = vlan.to_s
end
end
if !vlan_str.empty?
vnet_template << "VLAN=\"YES\"\n" \
"VLAN_ID=#{vlan_str}\n"
end
one_net = {:name => n.name,
:bridge => n.name,
:type => "Distributed Port Group",
:one => vnet_template}
one_net[:vlan] = vlan_str if !vlan_str.empty?
one_nets << one_net
end
if !vlan_str.empty?
vnet_template << "VLAN=\"YES\"\n" \
"VLAN_ID=#{vlan_str}\n"
end
one_net = {:name => n.name,
:bridge => n.name,
:type => "Distributed Port Group",
:one => vnet_template}
one_net[:vlan] = vlan_str if !vlan_str.empty?
one_nets << one_net
}
vcenter_networks[dc.name] = one_nets