vagrant/plugins/providers/docker/action/forward_ports.rb

55 lines
1.4 KiB
Ruby

module VagrantPlugins
module DockerProvider
module Action
class ForwardPorts
def initialize(app, env)
@app = app
end
def call(env)
@env = env
env[:forwarded_ports] = compile_forwarded_ports(env[:machine].config)
if env[:forwarded_ports].any?
env[:ui].info I18n.t("vagrant.actions.vm.forward_ports.forwarding")
inform_forwarded_ports(env[:forwarded_ports])
end
# FIXME: Check whether the container has already been created with
# different exposed ports and let the user know about it
@app.call env
end
def inform_forwarded_ports(ports)
ports.each do |fp|
message_attributes = {
:adapter => 'eth0',
:guest_port => fp[:guest],
:host_port => fp[:host]
}
@env[:ui].info(I18n.t("vagrant.actions.vm.forward_ports.forwarding_entry",
message_attributes))
end
end
private
def compile_forwarded_ports(config)
mappings = {}
config.vm.networks.each do |type, options|
if type == :forwarded_port && options[:id] != 'ssh'
mappings[options[:host]] = options
end
end
mappings.values
end
end
end
end
end