From 4ebd4bddee9560b7384b5dd2a12643b2383b2f78 Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Wed, 24 Sep 2025 17:40:08 +0800 Subject: [PATCH] feat: Support adding IPv6 nodes (#10470) Refs #9074 --- agent/utils/cloud_storage/client/sftp.go | 6 +++--- agent/utils/cloud_storage/client/webdav.go | 4 ++-- agent/utils/ssh/ssh.go | 7 +++---- core/utils/cloud_storage/client/sftp.go | 6 +++--- core/utils/cloud_storage/client/webdav.go | 4 ++-- core/utils/ssh/ssh.go | 5 +---- 6 files changed, 14 insertions(+), 18 deletions(-) diff --git a/agent/utils/cloud_storage/client/sftp.go b/agent/utils/cloud_storage/client/sftp.go index b1e9d179f..edc899bf5 100644 --- a/agent/utils/cloud_storage/client/sftp.go +++ b/agent/utils/cloud_storage/client/sftp.go @@ -1,7 +1,6 @@ package client import ( - "fmt" "io" "net" "os" @@ -53,11 +52,12 @@ func NewSftpClient(vars map[string]interface{}) (*sftpClient, error) { return nil }, } - if _, err := ssh.Dial("tcp", fmt.Sprintf("%s:%s", address, port), clientConfig); err != nil { + addr := net.JoinHostPort(address, port) + if _, err := ssh.Dial("tcp", addr, clientConfig); err != nil { return nil, err } - return &sftpClient{connInfo: fmt.Sprintf("%s:%s", address, port), config: clientConfig}, nil + return &sftpClient{connInfo: addr, config: clientConfig}, nil } func (s sftpClient) Upload(src, target string) (bool, error) { diff --git a/agent/utils/cloud_storage/client/webdav.go b/agent/utils/cloud_storage/client/webdav.go index a7f581654..f82d467fc 100644 --- a/agent/utils/cloud_storage/client/webdav.go +++ b/agent/utils/cloud_storage/client/webdav.go @@ -2,8 +2,8 @@ package client import ( "crypto/tls" - "fmt" "io" + "net" "net/http" "os" "path" @@ -25,7 +25,7 @@ func NewWebDAVClient(vars map[string]interface{}) (*webDAVClient, error) { username := loadParamFromVars("username", vars) bucket := loadParamFromVars("bucket", vars) - url := fmt.Sprintf("%s:%s", address, port) + url := net.JoinHostPort(address, port) if len(port) == 0 { url = address } diff --git a/agent/utils/ssh/ssh.go b/agent/utils/ssh/ssh.go index d64264e7e..d00f700e4 100644 --- a/agent/utils/ssh/ssh.go +++ b/agent/utils/ssh/ssh.go @@ -2,6 +2,7 @@ package ssh import ( "fmt" + "net" "strings" "time" @@ -24,12 +25,10 @@ type SSHClient struct { } func NewClient(c ConnInfo) (*SSHClient, error) { - if strings.Contains(c.Addr, ":") { - c.Addr = fmt.Sprintf("[%s]", c.Addr) - } config := &gossh.ClientConfig{} config.SetDefaults() - addr := fmt.Sprintf("%s:%d", c.Addr, c.Port) + + addr := net.JoinHostPort(c.Addr, fmt.Sprintf("%d", c.Port)) config.User = c.User if c.AuthMode == "password" { config.Auth = []gossh.AuthMethod{gossh.Password(c.Password)} diff --git a/core/utils/cloud_storage/client/sftp.go b/core/utils/cloud_storage/client/sftp.go index 617b609ea..32ff96692 100644 --- a/core/utils/cloud_storage/client/sftp.go +++ b/core/utils/cloud_storage/client/sftp.go @@ -1,7 +1,6 @@ package client import ( - "fmt" "io" "net" "os" @@ -56,11 +55,12 @@ func NewSftpClient(vars map[string]interface{}) (*sftpClient, error) { return nil }, } - if _, err := ssh.Dial("tcp", fmt.Sprintf("%s:%s", address, port), clientConfig); err != nil { + addr := net.JoinHostPort(address, port) + if _, err := ssh.Dial("tcp", addr, clientConfig); err != nil { return nil, err } - return &sftpClient{connInfo: fmt.Sprintf("%s:%s", address, port), config: clientConfig, bucket: bucket}, nil + return &sftpClient{connInfo: addr, config: clientConfig, bucket: bucket}, nil } func (s sftpClient) Upload(src, target string) (bool, error) { diff --git a/core/utils/cloud_storage/client/webdav.go b/core/utils/cloud_storage/client/webdav.go index 38d236b10..89d4c36f2 100644 --- a/core/utils/cloud_storage/client/webdav.go +++ b/core/utils/cloud_storage/client/webdav.go @@ -2,7 +2,7 @@ package client import ( "crypto/tls" - "fmt" + "net" "net/http" "os" "path" @@ -25,7 +25,7 @@ func NewWebDAVClient(vars map[string]interface{}) (*webDAVClient, error) { username := loadParamFromVars("username", vars) bucket := loadParamFromVars("bucket", vars) - url := fmt.Sprintf("%s:%s", address, port) + url := net.JoinHostPort(address, port) if len(port) == 0 { url = address } diff --git a/core/utils/ssh/ssh.go b/core/utils/ssh/ssh.go index 107f128a3..c50b11db4 100644 --- a/core/utils/ssh/ssh.go +++ b/core/utils/ssh/ssh.go @@ -29,12 +29,9 @@ type SSHClient struct { } func NewClient(c ConnInfo) (*SSHClient, error) { - if strings.Contains(c.Addr, ":") { - c.Addr = fmt.Sprintf("[%s]", c.Addr) - } config := &gossh.ClientConfig{} config.SetDefaults() - addr := fmt.Sprintf("%s:%d", c.Addr, c.Port) + addr := net.JoinHostPort(c.Addr, fmt.Sprintf("%d", c.Port)) config.User = c.User if c.AuthMode == "password" { config.Auth = []gossh.AuthMethod{gossh.Password(c.Password)}