lib/vagrant-vcloud/util/compile_forwarded_ports.rb
require 'vagrant/util/scoped_hash_override'
module VagrantPlugins
module VCloud
module Util
module CompileForwardedPorts
include Vagrant::Util::ScopedHashOverride
# This method compiles the forwarded ports into {ForwardedPort}
# models.
def compile_forwarded_ports(machine)
mappings = {}
machine.config.vm.networks.each do |type, options|
if type == :forwarded_port
guest_port = options[:guest]
host_port = options[:host]
options = scoped_hash_override(options, :vcloud)
id = options[:id]
# skip forwarded rules already found in handle_nat_port_collisions
next if options[:already_exists]
# skip forwarded rules if disabled
next if !options[:disabled].nil? && options[:disabled] == true
mappings[host_port] =
Model::ForwardedPort.new(id, host_port, guest_port, 'Vagrant-vApp-Net', machine.provider_config.vdc_network_id, machine.provider_config.vdc_network_name, options)
end
end
if !machine.provider_config.nics.nil?
machine.provider_config.nics.each do |nic|
next if nic[:forwarded_port].nil?
nic[:forwarded_port].each do |fp|
options = fp
guest_port = options[:guest]
host_port = options[:host]
options = scoped_hash_override(options, :vcloud)
id = options[:id]
# skip forwarded rules already found in handle_nat_port_collisions
next if options[:already_exists]
# skip forwarded rules if disabled
next if !options[:disabled].nil? && options[:disabled] == true
# find matching network
edge_id = nil
edge_name = nil
if !machine.provider_config.networks.nil? && !machine.provider_config.networks[:vapp].nil?
machine.provider_config.networks[:vapp].each do |net|
next if net[:name] != nic[:network]
edge_id = net[:parent_network]
edge_name = net[:vdc_network_name]
break
end
end
if edge_id == nil || edge_name == nil
edge_id = machine.provider_config.vdc_network_id
edge_name = machine.provider_config.vdc_network_name
end
mappings[host_port] = Model::ForwardedPort.new(id, host_port, guest_port, nic[:network], edge_id, edge_name, options)
end
end
end
mappings.values
end
end
end
end
end