You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2018/04/16 15:50:36 UTC
[cloudstack-cloudmonkey] branch master updated: cmk: fix
presentational issues
This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack-cloudmonkey.git
The following commit(s) were added to refs/heads/master by this push:
new e83ce7f cmk: fix presentational issues
e83ce7f is described below
commit e83ce7f96896b48ca13eb0c691caecd1fc8660d4
Author: Rohit Yadav <ro...@apache.org>
AuthorDate: Mon Apr 16 21:20:16 2018 +0530
cmk: fix presentational issues
Signed-off-by: Rohit Yadav <ro...@apache.org>
---
cli/completer.go | 10 +++++----
cmd/api.go | 2 +-
cmd/help.go | 8 +++++--
cmd/network.go | 5 ++---
config/config.go | 65 ++++++++++++++++++++++++++++++++++----------------------
5 files changed, 55 insertions(+), 35 deletions(-)
diff --git a/cli/completer.go b/cli/completer.go
index 8ade3f6..2444fd2 100644
--- a/cli/completer.go
+++ b/cli/completer.go
@@ -174,17 +174,18 @@ func (t *autoCompleter) Do(line []rune, pos int) (options [][]rune, offset int)
return
}
+ argName := strings.Replace(arg.Name, "=", "", -1)
var autocompleteAPI *config.API
var relatedNoun string
- if arg.Name == "id=" || arg.Name == "ids=" {
+ if argName == "id" || argName == "ids" {
relatedNoun = apiFound.Noun
if apiFound.Verb != "list" {
relatedNoun += "s"
}
- } else if arg.Name == "account=" {
+ } else if argName == "account" {
relatedNoun = "accounts"
} else {
- relatedNoun = strings.Replace(strings.Replace(arg.Name, "ids=", "", -1), "id=", "", -1) + "s"
+ relatedNoun = strings.Replace(strings.Replace(argName, "ids", "", -1), "id", "", -1) + "s"
}
for _, related := range apiMap["list"] {
if relatedNoun == related.Noun {
@@ -202,7 +203,9 @@ func (t *autoCompleter) Do(line []rune, pos int) (options [][]rune, offset int)
if autocompleteAPI.Noun == "templates" {
autocompleteAPIArgs = append(autocompleteAPIArgs, "templatefilter=all")
}
+ fmt.Printf("\nFetching options, please wait...")
response, _ := cmd.NewAPIRequest(r, autocompleteAPI.Name, autocompleteAPIArgs)
+ fmt.Printf("\r")
var autocompleteOptions []selectOption
for _, v := range response {
@@ -240,7 +243,6 @@ func (t *autoCompleter) Do(line []rune, pos int) (options [][]rune, offset int)
sort.Slice(autocompleteOptions, func(i, j int) bool {
return autocompleteOptions[i].Name < autocompleteOptions[j].Name
})
- fmt.Println()
selectedOption := showSelector(autocompleteOptions)
if strings.HasSuffix(arg.Name, "id=") || strings.HasSuffix(arg.Name, "ids=") {
selected = selectedOption.ID
diff --git a/cmd/api.go b/cmd/api.go
index 47a0f0f..215e58c 100644
--- a/cmd/api.go
+++ b/cmd/api.go
@@ -68,7 +68,7 @@ func init() {
}
}
if !provided {
- missingArgs = append(missingArgs, required)
+ missingArgs = append(missingArgs, strings.Replace(required, "=", "", -1))
}
}
diff --git a/cmd/help.go b/cmd/help.go
index dc31e51..d027510 100644
--- a/cmd/help.go
+++ b/cmd/help.go
@@ -45,14 +45,18 @@ func init() {
fmt.Println("This API is \033[35masynchronous\033[0m.")
}
if len(api.RequiredArgs) > 0 {
- fmt.Println("Required params:", strings.Join(api.RequiredArgs, ", "))
+ fmt.Printf("Required params: ")
+ for _, requiredArg := range api.RequiredArgs {
+ fmt.Printf("%s, ", strings.Replace(requiredArg, "=", "", -1))
+ }
+ fmt.Println()
}
if len(api.Args) > 0 {
fmt.Printf("%-24s %-8s %s\n", "API Params", "Type", "Description")
fmt.Printf("%-24s %-8s %s\n", "==========", "====", "===========")
}
for _, arg := range api.Args {
- fmt.Printf("\033[36m%-24s\033[0m \033[32m%-8s\033[0m ", arg.Name, arg.Type)
+ fmt.Printf("\033[36m%-24s\033[0m \033[32m%-8s\033[0m ", strings.Replace(arg.Name, "=", "", -1), arg.Type)
info := []rune(arg.Description)
for i, r := range info {
fmt.Printf("%s", string(r))
diff --git a/cmd/network.go b/cmd/network.go
index 1a57494..19cac73 100644
--- a/cmd/network.go
+++ b/cmd/network.go
@@ -110,6 +110,7 @@ func NewAPIRequest(r *Request, api string, args []string) (map[string]interface{
var client *http.Client
var encodedParams string
var err error
+
if len(r.Config.ActiveProfile.APIKey) > 0 && len(r.Config.ActiveProfile.SecretKey) > 0 {
apiKey := r.Config.ActiveProfile.APIKey
secretKey := r.Config.ActiveProfile.SecretKey
@@ -142,10 +143,8 @@ func NewAPIRequest(r *Request, api string, args []string) (map[string]interface{
return nil, errors.New("failed to authenticate to make API call")
}
- apiURL := fmt.Sprintf("%s?%s", r.Config.ActiveProfile.URL, encodedParams)
-
client.Timeout = time.Duration(time.Duration(r.Config.Core.Timeout) * time.Second)
- response, err := client.Get(apiURL)
+ response, err := client.Get(fmt.Sprintf("%s?%s", r.Config.ActiveProfile.URL, encodedParams))
if err != nil {
fmt.Println("Error:", err)
return nil, err
diff --git a/config/config.go b/config/config.go
index 97fa6da..fe18837 100644
--- a/config/config.go
+++ b/config/config.go
@@ -73,29 +73,39 @@ func getDefaultConfigDir() string {
return path.Join(home, ".cmk")
}
+func defaultCoreConfig() Core {
+ return Core{
+ AsyncBlock: false,
+ Timeout: 1800,
+ Output: JSON,
+ ProfileName: "local",
+ }
+}
+
+func defaultProfile() ServerProfile {
+ return ServerProfile{
+ URL: "http://localhost:8080/client/api",
+ Username: "admin",
+ Password: "password",
+ Domain: "/",
+ APIKey: "",
+ SecretKey: "",
+ VerifyCert: false,
+ }
+}
+
func defaultConfig() *Config {
configDir := getDefaultConfigDir()
+ defaultCoreConfig := defaultCoreConfig()
+ defaultProfile := defaultProfile()
return &Config{
- Dir: configDir,
- ConfigFile: path.Join(configDir, "config"),
- CacheFile: path.Join(configDir, "cache"),
- HistoryFile: path.Join(configDir, "history"),
- LogFile: path.Join(configDir, "log"),
- Core: &Core{
- AsyncBlock: false,
- Timeout: 1800,
- Output: JSON,
- ProfileName: "local",
- },
- ActiveProfile: &ServerProfile{
- URL: "http://localhost:8080/client/api",
- Username: "admin",
- Password: "password",
- Domain: "/",
- APIKey: "",
- SecretKey: "",
- VerifyCert: false,
- },
+ Dir: configDir,
+ ConfigFile: path.Join(configDir, "config"),
+ CacheFile: path.Join(configDir, "cache"),
+ HistoryFile: path.Join(configDir, "history"),
+ LogFile: path.Join(configDir, "log"),
+ Core: &defaultCoreConfig,
+ ActiveProfile: &defaultProfile,
}
}
@@ -114,10 +124,11 @@ func reloadConfig(cfg *Config) *Config {
// Save on missing config
if _, err := os.Stat(cfg.ConfigFile); err != nil {
- defaultConf := defaultConfig()
+ defaultCoreConfig := defaultCoreConfig()
+ defaultProfile := defaultProfile()
conf := ini.Empty()
- conf.Section(ini.DEFAULT_SECTION).ReflectFrom(defaultConf.Core)
- conf.Section(cfg.Core.ProfileName).ReflectFrom(defaultConf.ActiveProfile)
+ conf.Section(ini.DEFAULT_SECTION).ReflectFrom(&defaultCoreConfig)
+ conf.Section(defaultCoreConfig.ProfileName).ReflectFrom(&defaultProfile)
conf.SaveTo(cfg.ConfigFile)
}
@@ -133,8 +144,10 @@ func reloadConfig(cfg *Config) *Config {
core, err := conf.GetSection(ini.DEFAULT_SECTION)
if core == nil {
+ defaultCore := defaultCoreConfig()
section, _ := conf.NewSection(ini.DEFAULT_SECTION)
- section.ReflectFrom(&defaultConfig().Core)
+ section.ReflectFrom(&defaultCore)
+ cfg.Core = &defaultCore
} else {
// Write
if cfg.Core != nil {
@@ -148,8 +161,10 @@ func reloadConfig(cfg *Config) *Config {
profile, err := conf.GetSection(cfg.Core.ProfileName)
if profile == nil {
+ activeProfile := defaultProfile()
section, _ := conf.NewSection(cfg.Core.ProfileName)
- section.ReflectFrom(&defaultConfig().ActiveProfile)
+ section.ReflectFrom(&activeProfile)
+ cfg.ActiveProfile = &activeProfile
} else {
// Write
if cfg.ActiveProfile != nil {
--
To stop receiving notification emails like this one, please contact
rohit@apache.org.