From e4c1e511c8aea61a1818a5b7f844c0e422bed567 Mon Sep 17 00:00:00 2001 From: Sergey Yakovlev Date: Thu, 5 Mar 2026 17:44:55 +0300 Subject: [PATCH 1/2] add proxy-url param --- .gitignore | 1 + pkg/api/os_client.go | 22 +++++++++++++++++----- pkg/appconfig/cluster.go | 2 ++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index dc621d0..d9765b3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea dist +/debug.config diff --git a/pkg/api/os_client.go b/pkg/api/os_client.go index 7061057..483f785 100644 --- a/pkg/api/os_client.go +++ b/pkg/api/os_client.go @@ -8,6 +8,7 @@ import ( "github.com/dalet-oss/opensearch-cli/pkg/consts" "github.com/opensearch-project/opensearch-go/v4" "net/http" + "net/url" ) // BuildOSConfig constructs and returns an OpenSearch configuration based on the given app configuration. @@ -34,12 +35,23 @@ func BuildOSConfig(c appconfig.AppConfig, ctx context.Context) (opensearch.Confi log.Warn().Msg("Unable to get user credentials, check your config file.") return opensearch.Config{}, err } - config := opensearch.Config{ - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{ - InsecureSkipVerify: osConnection.Params.SkipTLSVerify, - }, + + transport := &http.Transport{ + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: osConnection.Params.SkipTLSVerify, }, + } + if len(osConnection.Params.ProxyUrl) > 0 { + transport.Proxy = func(req *http.Request) (*url.URL, error) { + parsed, err := url.Parse(osConnection.Params.ProxyUrl) + if err != nil { + return nil, err + } + return parsed, nil + } + } + config := opensearch.Config{ + Transport: transport, Addresses: []string{osConnection.Params.Server}, Username: userCreds.Username, Password: userCreds.Password, diff --git a/pkg/appconfig/cluster.go b/pkg/appconfig/cluster.go index 22d0076..9b72086 100644 --- a/pkg/appconfig/cluster.go +++ b/pkg/appconfig/cluster.go @@ -14,4 +14,6 @@ type ClusterParams struct { Server string `yaml:"server"` // SkipTLSVerify indicates whether TLS encryption is enabled for the cluster connection. SkipTLSVerify bool `yaml:"skipTLSVerify"` + // ProxyUrl holds the proxy URL for the cluster connection. + ProxyUrl string `yaml:"proxy-url,omitempty"` } From 7b5fc1119fb7b71aae21ce3087588d4a3c40f32c Mon Sep 17 00:00:00 2001 From: Sergey Yakovlev Date: Thu, 5 Mar 2026 21:31:31 +0300 Subject: [PATCH 2/2] fix cluster connection creation --- pkg/api/os_client.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pkg/api/os_client.go b/pkg/api/os_client.go index 483f785..0a8b11b 100644 --- a/pkg/api/os_client.go +++ b/pkg/api/os_client.go @@ -7,6 +7,7 @@ import ( "github.com/dalet-oss/opensearch-cli/pkg/appconfig" "github.com/dalet-oss/opensearch-cli/pkg/consts" "github.com/opensearch-project/opensearch-go/v4" + "github.com/opensearch-project/opensearch-go/v4/opensearchapi" "net/http" "net/url" ) @@ -68,14 +69,18 @@ func GetOpenSearchClient(c appconfig.AppConfig, ctx context.Context) (*opensearc if osConfigErr != nil { return nil, osConfigErr } - if client, err := opensearch.NewClient(config); err != nil { + + if client, clientInitErr := opensearchapi.NewClient(opensearchapi.Config{Client: config}); clientInitErr != nil { log.Warn().Msg("unable to create client, check your config file.") - return nil, err + return nil, clientInitErr } else { - if discoveyErr := client.DiscoverNodes(); discoveyErr != nil { + if clusterInfo, fetchInfoErr := client.Info(context.Background(), nil); fetchInfoErr != nil { log.Warn().Msg("unable to discover nodes, check your config file.") - return nil, discoveyErr + return nil, fetchInfoErr + } else { + log.Debug().Interface("clusterInfo", clusterInfo).Msg("current cluster info") + log.Debug().Msg("client initialized") } - return client, nil + return client.Client, nil } }