From acd042921fc5491f6355abaff076820ba0010b26 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Wed, 10 Nov 2021 15:39:00 +0800 Subject: [PATCH] fix(climc): fix proxy for cli --- cmd/aliyuncli/main.go | 22 +++++++++++++++++++++- cmd/apsaracli/main.go | 21 ++++++++++++++++++++- cmd/awscli/main.go | 22 +++++++++++++++++++++- cmd/azurecli/main.go | 22 +++++++++++++++++++++- cmd/cloudpodscli/main.go | 22 +++++++++++++++++++++- cmd/ctyuncli/main.go | 22 +++++++++++++++++++++- cmd/ecloudcli/main.go | 22 +++++++++++++++++++++- cmd/esxicli/main.go | 22 +++++++++++++++++++++- cmd/googlecli/main.go | 22 +++++++++++++++++++++- cmd/hcsocli/main.go | 21 ++++++++++++++++++++- cmd/huaweicli/main.go | 22 +++++++++++++++++++++- cmd/jdcloudcli/main.go | 21 ++++++++++++++++++++- cmd/openstackcli/main.go | 22 +++++++++++++++++++++- cmd/qcloudcli/main.go | 23 ++++++++++++++++++++++- cmd/ucloudcli/main.go | 22 +++++++++++++++++++++- cmd/zstackcli/main.go | 22 +++++++++++++++++++++- 16 files changed, 334 insertions(+), 16 deletions(-) diff --git a/cmd/aliyuncli/main.go b/cmd/aliyuncli/main.go index 963a10599e..9cefb448e8 100644 --- a/cmd/aliyuncli/main.go +++ b/cmd/aliyuncli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/aliyun" _ "yunion.io/x/onecloud/pkg/multicloud/aliyun/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -85,12 +90,27 @@ func newClient(options *BaseOptions) (*aliyun.SRegion, error) { return nil, fmt.Errorf("Missing secret") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := aliyun.NewAliyunClient( aliyun.NewAliyunClientConfig( options.CloudEnv, options.AccessKey, options.Secret, - ).Debug(options.Debug), + ).Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/apsaracli/main.go b/cmd/apsaracli/main.go index d124300886..3b251af9f9 100644 --- a/cmd/apsaracli/main.go +++ b/cmd/apsaracli/main.go @@ -16,8 +16,12 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" "yunion.io/x/onecloud/pkg/cloudprovider" @@ -87,13 +91,28 @@ func newClient(options *BaseOptions) (*apsara.SRegion, error) { return nil, fmt.Errorf("Missing secret") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := apsara.NewApsaraClient( apsara.NewApsaraClientConfig( options.AccessKey, options.Secret, options.Endpoint, options.SApsaraEndpoints, - ).Debug(options.Debug), + ).Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/awscli/main.go b/cmd/awscli/main.go index 6306f2767f..70470c2c76 100644 --- a/cmd/awscli/main.go +++ b/cmd/awscli/main.go @@ -16,11 +16,16 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/pkg/errors" "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/aws" _ "yunion.io/x/onecloud/pkg/multicloud/aws/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -87,13 +92,28 @@ func newClient(options *BaseOptions) (*aws.SRegion, error) { return nil, fmt.Errorf("Missing secret") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := aws.NewAwsClient( aws.NewAwsClientConfig( options.AccessUrl, options.AccessKey, options.Secret, options.AccountId, - ).Debug(options.Debug), + ).Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/azurecli/main.go b/cmd/azurecli/main.go index 3f338d3436..dbcff277ad 100644 --- a/cmd/azurecli/main.go +++ b/cmd/azurecli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/azure" _ "yunion.io/x/onecloud/pkg/multicloud/azure/shell" "yunion.io/x/onecloud/pkg/util/printutils" @@ -100,6 +105,16 @@ func newClient(options *BaseOptions) (*azure.SRegion, error) { return nil, fmt.Errorf("Missing Cloud Environment") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := azure.NewAzureClient( azure.NewAzureClientConfig( options.CloudEnv, @@ -108,7 +123,12 @@ func newClient(options *BaseOptions) (*azure.SRegion, error) { options.ApplicationKey, ). SubscriptionId(options.SubscriptionID). - Debug(options.Debug), + Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { diff --git a/cmd/cloudpodscli/main.go b/cmd/cloudpodscli/main.go index b719a796e6..4fd0363be4 100644 --- a/cmd/cloudpodscli/main.go +++ b/cmd/cloudpodscli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/cloudpods" _ "yunion.io/x/onecloud/pkg/multicloud/cloudpods/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -88,12 +93,27 @@ func newClient(options *BaseOptions) (*cloudpods.SRegion, error) { return nil, fmt.Errorf("Missing access secret") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := cloudpods.NewCloudpodsClient( cloudpods.NewCloudpodsClientConfig( options.AuthURL, options.AccessKey, options.AccessSecret, - ).Debug(options.Debug), + ).Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/ctyuncli/main.go b/cmd/ctyuncli/main.go index 12938dc3b3..6eacacb43a 100644 --- a/cmd/ctyuncli/main.go +++ b/cmd/ctyuncli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/ctyun" _ "yunion.io/x/onecloud/pkg/multicloud/ctyun/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -84,10 +89,25 @@ func newClient(options *BaseOptions) (*ctyun.SRegion, error) { return nil, fmt.Errorf("Missing secret") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := ctyun.NewSCtyunClient( ctyun.NewSCtyunClientConfig( options.AccessKey, options.Secret, - ).Debug(options.Debug), + ).Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/ecloudcli/main.go b/cmd/ecloudcli/main.go index fcc72bc201..712a5b6c40 100644 --- a/cmd/ecloudcli/main.go +++ b/cmd/ecloudcli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/ecloud" _ "yunion.io/x/onecloud/pkg/multicloud/ecloud/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -84,10 +89,25 @@ func newClient(options *Options) (*ecloud.SRegion, error) { return nil, fmt.Errorf("Missing access secret") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := ecloud.NewEcloudClient( ecloud.NewEcloudClientConfig( ecloud.NewRamRoleSigner(options.AccessKey, options.AccessSecret), - ).SetDebug(options.Debug), + ).SetDebug(options.Debug). + SetCloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/esxicli/main.go b/cmd/esxicli/main.go index 1296370f8c..e21c161222 100644 --- a/cmd/esxicli/main.go +++ b/cmd/esxicli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/esxi" _ "yunion.io/x/onecloud/pkg/multicloud/esxi/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -88,13 +93,28 @@ func newClient(options *BaseOptions) (*esxi.SESXiClient, error) { return nil, fmt.Errorf("Missing password") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + return esxi.NewESXiClient2( esxi.NewESXiClientConfig( options.Host, options.Port, options.Account, options.Password, - ), + ). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) } diff --git a/cmd/googlecli/main.go b/cmd/googlecli/main.go index 926e7da9ab..d292f70c41 100644 --- a/cmd/googlecli/main.go +++ b/cmd/googlecli/main.go @@ -16,13 +16,18 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/jsonutils" "yunion.io/x/log" "yunion.io/x/pkg/errors" "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/google" _ "yunion.io/x/onecloud/pkg/multicloud/google/shell" "yunion.io/x/onecloud/pkg/util/fileutils2" @@ -112,13 +117,28 @@ func newClient(options *BaseOptions) (*google.SRegion, error) { return nil, fmt.Errorf("Missing ProjectID") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := google.NewGoogleClient( google.NewGoogleClientConfig( options.ProjectID, options.ClientEmail, options.PrivateKeyID, options.PrivateKey, - ).Debug(options.Debug), + ).Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/hcsocli/main.go b/cmd/hcsocli/main.go index 1327d3e459..d3c550770f 100644 --- a/cmd/hcsocli/main.go +++ b/cmd/hcsocli/main.go @@ -16,8 +16,12 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" "yunion.io/x/onecloud/pkg/cloudprovider" @@ -87,13 +91,28 @@ func newClient(options *BaseOptions) (*huawei.SRegion, error) { return nil, fmt.Errorf("Missing secret") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := huawei.NewHuaweiClient( huawei.NewHuaweiClientConfig( options.AccessKey, options.Secret, options.ProjectId, &options.SHCSOEndpoints, - ).Debug(options.Debug), + ).Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/huaweicli/main.go b/cmd/huaweicli/main.go index a55826181c..c65c0a3e6a 100644 --- a/cmd/huaweicli/main.go +++ b/cmd/huaweicli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/huawei" _ "yunion.io/x/onecloud/pkg/multicloud/huawei/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -86,13 +91,28 @@ func newClient(options *BaseOptions) (*huawei.SRegion, error) { return nil, fmt.Errorf("Missing secret") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := huawei.NewHuaweiClient( huawei.NewHuaweiClientConfig( options.CloudEnv, options.AccessKey, options.Secret, options.ProjectId, - ).Debug(options.Debug), + ).Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/jdcloudcli/main.go b/cmd/jdcloudcli/main.go index 56b3cfa98a..58f7454787 100644 --- a/cmd/jdcloudcli/main.go +++ b/cmd/jdcloudcli/main.go @@ -16,13 +16,17 @@ package main import ( "fmt" + "net/http" + "net/url" "os" "github.com/sirupsen/logrus" + "golang.org/x/net/http/httpproxy" "yunion.io/x/log" "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/jdcloud" _ "yunion.io/x/onecloud/pkg/multicloud/jdcloud/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -89,7 +93,22 @@ func newClient(options *Options) (*jdcloud.SRegion, error) { if regionId == "" { regionId = jdcloud.JDCLOUD_DEFAULT_REGION } - region := jdcloud.NewRegion(regionId, options.AccessKey, options.AccessSecret, nil, options.Debug) + + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + + cfcg := &cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + } + + region := jdcloud.NewRegion(regionId, options.AccessKey, options.AccessSecret, cfcg, options.Debug) if region == nil { return nil, fmt.Errorf("no such region %s", regionId) } diff --git a/cmd/openstackcli/main.go b/cmd/openstackcli/main.go index 8560fd4bea..fed96e7ffd 100644 --- a/cmd/openstackcli/main.go +++ b/cmd/openstackcli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/openstack" _ "yunion.io/x/onecloud/pkg/multicloud/openstack/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -93,6 +98,16 @@ func newClient(options *BaseOptions) (*openstack.SRegion, error) { return nil, fmt.Errorf("Missing Password") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := openstack.NewOpenStackClient( openstack.NewOpenstackClientConfig( options.AuthURL, @@ -103,7 +118,12 @@ func newClient(options *BaseOptions) (*openstack.SRegion, error) { ). EndpointType(options.EndpointType). DomainName(options.DomainName). - Debug(options.Debug), + Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/qcloudcli/main.go b/cmd/qcloudcli/main.go index 8de20de837..ce4f095aa0 100644 --- a/cmd/qcloudcli/main.go +++ b/cmd/qcloudcli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/qcloud" _ "yunion.io/x/onecloud/pkg/multicloud/qcloud/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -85,11 +90,27 @@ func newClient(options *BaseOptions) (*qcloud.SRegion, error) { return nil, fmt.Errorf("Missing SecretID") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + if cli, err := qcloud.NewQcloudClient( qcloud.NewQcloudClientConfig( options.SecretID, options.SecretKey, - ).AppId(options.AppID).Debug(options.Debug), + ).AppId(options.AppID). + Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ); err != nil { return nil, err } else if region := cli.GetRegion(options.RegionId); region == nil { diff --git a/cmd/ucloudcli/main.go b/cmd/ucloudcli/main.go index 0b7d99cd67..d588727d45 100644 --- a/cmd/ucloudcli/main.go +++ b/cmd/ucloudcli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/ucloud" _ "yunion.io/x/onecloud/pkg/multicloud/ucloud/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -86,11 +91,26 @@ func newClient(options *BaseOptions) (*ucloud.SRegion, error) { return nil, fmt.Errorf("Missing secret") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := ucloud.NewUcloudClient( ucloud.NewUcloudClientConfig( options.AccessKey, options.Secret, - ).ProjectId(options.ProjectId).Debug(options.Debug), + ).ProjectId(options.ProjectId).Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err diff --git a/cmd/zstackcli/main.go b/cmd/zstackcli/main.go index 00c8e96ba1..b27553021a 100644 --- a/cmd/zstackcli/main.go +++ b/cmd/zstackcli/main.go @@ -16,10 +16,15 @@ package main import ( "fmt" + "net/http" + "net/url" "os" + "golang.org/x/net/http/httpproxy" + "yunion.io/x/structarg" + "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud/zstack" _ "yunion.io/x/onecloud/pkg/multicloud/zstack/shell" "yunion.io/x/onecloud/pkg/util/shellutils" @@ -89,12 +94,27 @@ func newClient(options *BaseOptions) (*zstack.SRegion, error) { return nil, fmt.Errorf("Missing Password") } + cfg := &httpproxy.Config{ + HTTPProxy: os.Getenv("HTTP_PROXY"), + HTTPSProxy: os.Getenv("HTTPS_PROXY"), + NoProxy: os.Getenv("NO_PROXY"), + } + cfgProxyFunc := cfg.ProxyFunc() + proxyFunc := func(req *http.Request) (*url.URL, error) { + return cfgProxyFunc(req.URL) + } + cli, err := zstack.NewZStackClient( zstack.NewZstackClientConfig( options.AuthURL, options.Username, options.Password, - ).Debug(options.Debug), + ).Debug(options.Debug). + CloudproviderConfig( + cloudprovider.ProviderConfig{ + ProxyFunc: proxyFunc, + }, + ), ) if err != nil { return nil, err