talos/pkg/grpc/dialer/dialer.go
Andrew Rynhard fcaed8b0dd fix: don't proxy gRPC unix connections
The default gRPC dialer honors proxy environment variables, which causes
local unix socket connections to attempt to go through the proxy. This
fixes that by using a custom dialer.

Signed-off-by: Andrew Rynhard <andrew@andrewrynhard.com>
2020-02-10 05:37:50 -08:00

30 lines
744 B
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package dialer
import (
"context"
"fmt"
"net"
"net/url"
)
// DialUnix is used as a parameter for 'grpc.WithContextDialer' to bypass the
// default dialer of gRPC to ensure that proxy vars are not used.
func DialUnix() func(context.Context, string) (net.Conn, error) {
return func(ctx context.Context, addr string) (net.Conn, error) {
u, err := url.Parse(addr)
if err != nil {
return nil, err
}
if u.Scheme != "unix" {
return nil, fmt.Errorf("invalid scheme: %q", u.Scheme)
}
return net.Dial(u.Scheme, u.Path)
}
}