lib/fog/vsphere/requests/compute/get_network.rb
module Fog
module Vsphere
class Compute
class Real
def get_network(ref_or_name, datacenter_name)
network = get_raw_network(ref_or_name, datacenter_name)
raise(Fog::Vsphere::Compute::NotFound) unless network
network_attributes(network, datacenter_name)
end
protected
def get_raw_network(ref_or_name, datacenter_name, distributedswitch = nil)
finder = choose_finder(ref_or_name, distributedswitch)
get_all_raw_networks(datacenter_name).find { |n| finder.call(n) }
end
def network_attributes(network, datacenter_name)
{
id: managed_obj_id(network),
name: network.name,
datacenter: datacenter_name,
vlanid: nil
}
end
end
module Shared
protected
def get_all_raw_networks(datacenter_name)
list_container_view(datacenter_name, 'Network', :networkFolder)
end
def choose_finder(ref_or_name, distributedswitch)
case distributedswitch
when String
# only the one will do
proc do |n|
n._ref == ref_or_name || (
n.is_a?(RbVmomi::VIM::DistributedVirtualPortgroup) && (n.name == ref_or_name || n.key == ref_or_name) &&
(n.config.distributedVirtualSwitch.name == distributedswitch)
)
end
when :dvs
# the first distributed virtual switch will do - selected by network - gives control to vsphere
proc do |n|
n._ref == ref_or_name || (
n.is_a?(RbVmomi::VIM::DistributedVirtualPortgroup) && (n.name == ref_or_name || n.key == ref_or_name)
)
end
else
# the first matching network will do, seems like the non-distributed networks come first
proc { |n| n._ref == ref_or_name || n.name == ref_or_name || (n.is_a?(RbVmomi::VIM::DistributedVirtualPortgroup) && n.key == ref_or_name) }
end
end
end
class Mock
def get_network(id); end
end
end
end
end