From b77f39d194077c6721d47e9e79da7e8095116afd Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Wed, 22 Aug 2018 16:11:18 +0800 Subject: [PATCH] minor updates --- Makefile | 2 +- cmd/climc/climc.go | 29 +++++++++++++++++------------ pkg/mcclient/token3.go | 18 +++++++++--------- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/Makefile b/Makefile index 5dadd4f7bb..923270969f 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ REPO_PREFIX := yunion.io/x/onecloud VENDOR_PATH := $(REPO_PREFIX)/vendor VERSION_PKG := $(VENDOR_PATH)/yunion.io/x/pkg/util/version -ROOT_DIR := $(shell pwd -P) +ROOT_DIR := $(CURDIR) BUILD_DIR := $(ROOT_DIR)/_output BIN_DIR := $(BUILD_DIR)/bin BUILD_SCRIPT := $(ROOT_DIR)/build/build.sh diff --git a/cmd/climc/climc.go b/cmd/climc/climc.go index 1d4bdec473..a8cc818dd9 100644 --- a/cmd/climc/climc.go +++ b/cmd/climc/climc.go @@ -5,28 +5,32 @@ import ( "fmt" "io/ioutil" "os" + "path/filepath" "strings" "time" prompt "github.com/c-bata/go-prompt" + "yunion.io/x/log" "yunion.io/x/pkg/util/version" "yunion.io/x/structarg" "yunion.io/x/onecloud/cmd/climc/promputils" "yunion.io/x/onecloud/cmd/climc/shell" - _ "yunion.io/x/onecloud/cmd/climc/shell/k8s" "yunion.io/x/onecloud/pkg/mcclient" + + _ "yunion.io/x/onecloud/cmd/climc/shell/k8s" ) type BaseOptions struct { - Help bool `help:"Show help" short-token:"h"` - Debug bool `help:"Show debug information"` - Version bool `help:"Show version"` - Timeout int `default:"600" help:"Number of seconds to wait for a response"` - Insecure bool `default:"False" help:"Allow skip server cert verification if URL is https" short-token:"k"` - OsUsername string `default:"$OS_USERNAME" help:"Username, defaults to env[OS_USERNAME]"` - OsPassword string `default:"$OS_PASSWORD" help:"Password, defaults to env[OS_PASSWORD]"` + Help bool `help:"Show help" short-token:"h"` + Debug bool `help:"Show debug information"` + Version bool `help:"Show version"` + Timeout int `default:"600" help:"Number of seconds to wait for a response"` + Insecure bool `default:"false" help:"Allow skip server cert verification if URL is https" short-token:"k"` + NoCachedToken bool `default:"false" help:"Force not use cached token"` + OsUsername string `default:"$OS_USERNAME" help:"Username, defaults to env[OS_USERNAME]"` + OsPassword string `default:"$OS_PASSWORD" help:"Password, defaults to env[OS_PASSWORD]"` // OsProjectId string `default:"$OS_PROJECT_ID" help:"Proejct ID, defaults to env[OS_PROJECT_ID]"` OsProjectName string `default:"$OS_PROJECT_NAME" help:"Project name, defaults to env[OS_PROJECT_NAME]"` OsDomainName string `default:"$OS_DOMAIN_NAME" help:"Domain name, defaults to env[OS_DOMAIN_NAME]"` @@ -122,8 +126,9 @@ func newClientSession(options *BaseOptions) (*mcclient.ClientSession, error) { options.Insecure) var cacheToken mcclient.TokenCredential - cacheFile, err := os.Open("/tmp/OS_AUTH_CACHE_TOKEN") - if err == nil && cacheFile != nil { + tokenCachePath := filepath.Join(os.TempDir(), "OS_AUTH_CACHE_TOKEN") + cacheFile, err := os.Open(tokenCachePath) + if err == nil && cacheFile != nil && !options.NoCachedToken { fileInfo, _ := cacheFile.Stat() dur, err := time.ParseDuration("-24h") if fileInfo != nil && err == nil && fileInfo.ModTime().After(time.Now().Add(dur)) { @@ -153,12 +158,12 @@ func newClientSession(options *BaseOptions) (*mcclient.ClientSession, error) { if err != nil { fmt.Printf("Marshal token error:%s", err) } else { - fo, _ := os.Create("/tmp/OS_AUTH_CACHE_TOKEN") + fo, _ := os.Create(tokenCachePath) fo.Write(bytesCacheToken) fo.Close() } } else { - fmt.Println("******** Use Token Cache At /tmp/OS_AUTH_CACHE_TOKEN ********") + fmt.Printf("******** Use Token Cache At %s ********\n", tokenCachePath) } session := client.NewSession(options.OsRegionName, diff --git a/pkg/mcclient/token3.go b/pkg/mcclient/token3.go index 09d49b870b..233c336be2 100644 --- a/pkg/mcclient/token3.go +++ b/pkg/mcclient/token3.go @@ -250,15 +250,15 @@ func Id2RegionZone(id string) (string, string) { } } -func (catalog KeystoneServiceCatalogV3) GetServiceURLs(service, region, zone, endpointType string) ([]string, error) { - url, err := catalog.GetServiceURL(service, region, zone, endpointType) +func (catalog KeystoneServiceCatalogV3) GetServiceURL(service, region, zone, endpointType string) (string, error) { + urls, err := catalog.GetServiceURLs(service, region, zone, endpointType) if err != nil { - return nil, err + return "", err } - return []string{url}, nil + return urls[rand.Intn(len(urls))], nil } -func (catalog KeystoneServiceCatalogV3) GetServiceURL(service, region, zone, endpointType string) (string, error) { +func (catalog KeystoneServiceCatalogV3) GetServiceURLs(service, region, zone, endpointType string) ([]string, error) { if endpointType == "" { endpointType = "internalURL" } @@ -289,7 +289,7 @@ func (catalog KeystoneServiceCatalogV3) GetServiceURL(service, region, zone, end break } } else { - return "", fmt.Errorf("No default region") + return nil, fmt.Errorf("No default region") } } else { _, ok := regeps[regionzone] @@ -298,14 +298,14 @@ func (catalog KeystoneServiceCatalogV3) GetServiceURL(service, region, zone, end } else { selected, ok = regeps[region] if !ok { - return "", fmt.Errorf("No valid %s endpoints for %s in region %s", endpointType, service, RegionID(region, zone)) + return nil, fmt.Errorf("No valid %s endpoints for %s in region %s", endpointType, service, RegionID(region, zone)) } } } - return selected[rand.Intn(len(selected))], nil + return selected, nil } } - return "", fmt.Errorf("No such service %s", service) + return nil, fmt.Errorf("No such service %s", service) } func (self *TokenCredentialV3) String() string {