17170: Fix dial when API host var is host:port.
authorTom Clegg <tom@curii.com>
Wed, 13 Jan 2021 05:10:09 +0000 (00:10 -0500)
committerTom Clegg <tom@curii.com>
Wed, 13 Jan 2021 05:10:09 +0000 (00:10 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

lib/controller/rpc/conn.go

index 75603bb59d50cea0f8717ae63265a63f73838390..9b2695b55117439aae32290b6a4a4e741d7e7b65 100644 (file)
@@ -293,7 +293,12 @@ func (conn *Conn) ContainerUnlock(ctx context.Context, options arvados.GetOption
 // a running container. If the returned error is nil, the caller is
 // responsible for closing sshconn.Conn.
 func (conn *Conn) ContainerSSH(ctx context.Context, options arvados.ContainerSSHOptions) (sshconn arvados.ContainerSSHConnection, err error) {
-       netconn, err := tls.Dial("tcp", net.JoinHostPort(conn.baseURL.Host, "https"), nil)
+       addr := conn.baseURL.Host
+       if strings.Index(addr, ":") < 1 || (strings.Contains(addr, "::") && addr[0] != '[') {
+               // hostname or ::1 or 1::1
+               addr = net.JoinHostPort(addr, "https")
+       }
+       netconn, err := tls.Dial("tcp", addr, conn.httpClient.Transport.(*http.Transport).TLSClientConfig)
        if err != nil {
                return
        }