55 lines
1.4 KiB
Ruby
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
|