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 2019/03/05 08:49:25 UTC
[cloudstack-cloudmonkey] branch master updated: config: Implement
per profile based api cache (#39)
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 ace8e64 config: Implement per profile based api cache (#39)
ace8e64 is described below
commit ace8e64528bce5426164240ccf02c2d18dc5acb7
Author: Rohit Yadav <ro...@shapeblue.com>
AuthorDate: Tue Mar 5 14:18:18 2019 +0530
config: Implement per profile based api cache (#39)
This fixes #39 and implements logic to have separate api cache on per
profile basis. On changing server profile, user won't need to run
sync, any previously sync-ed cache will be re-used.
Signed-off-by: Rohit Yadav <ro...@shapeblue.com>
---
cmd/set.go | 2 ++
config/cache.go | 10 ++++++----
config/config.go | 35 ++++++++++++++++++++++++-----------
3 files changed, 32 insertions(+), 15 deletions(-)
diff --git a/cmd/set.go b/cmd/set.go
index 2580a62..4e2c490 100644
--- a/cmd/set.go
+++ b/cmd/set.go
@@ -57,6 +57,8 @@ func init() {
fmt.Println("Username: ", r.Config.ActiveProfile.Username)
fmt.Println("Domain: ", r.Config.ActiveProfile.Domain)
fmt.Println("API Key: ", r.Config.ActiveProfile.APIKey)
+ fmt.Println("Total APIs: ", len(r.Config.GetCache()))
+
fmt.Println()
}
return nil
diff --git a/config/cache.go b/config/cache.go
index 4320c61..34e021c 100644
--- a/config/cache.go
+++ b/config/cache.go
@@ -79,8 +79,10 @@ func (c *Config) GetCache() map[string]*API {
}
// LoadCache loads cache using the default cache file
-func LoadCache(c *Config) {
- cache, err := ioutil.ReadFile(c.CacheFile)
+func LoadCache(c *Config) interface{} {
+ cacheFile := c.CacheFile()
+ Debug("Trying to read API cache from:", cacheFile)
+ cache, err := ioutil.ReadFile(cacheFile)
if err != nil {
if c.HasShell {
fmt.Fprintf(os.Stderr, "Loaded in-built API cache. Failed to read API cache, please run 'sync'.\n")
@@ -89,13 +91,13 @@ func LoadCache(c *Config) {
}
var data map[string]interface{}
_ = json.Unmarshal(cache, &data)
- c.UpdateCache(data)
+ return c.UpdateCache(data)
}
// SaveCache saves received auto-discovery data to cache file
func (c *Config) SaveCache(response map[string]interface{}) {
output, _ := json.Marshal(response)
- ioutil.WriteFile(c.CacheFile, output, 0600)
+ ioutil.WriteFile(c.CacheFile(), output, 0600)
}
// UpdateCache uses auto-discovery data to update internal API cache
diff --git a/config/config.go b/config/config.go
index 56f7c37..4c4f0d5 100644
--- a/config/config.go
+++ b/config/config.go
@@ -68,28 +68,41 @@ type Config struct {
Dir string
ConfigFile string
HistoryFile string
- CacheFile string
LogFile string
HasShell bool
Core *Core
ActiveProfile *ServerProfile
}
-func getDefaultConfigDir() string {
- home, err := homedir.Dir()
- if err != nil {
- fmt.Println(err)
- os.Exit(1)
+// CacheFile returns the path to the cache file for a server profile
+func (c Config) CacheFile() string {
+ cacheDir := path.Join(c.Dir, "profiles")
+ cacheFileName := "cache"
+ if c.Core != nil && len(c.Core.ProfileName) > 0 {
+ cacheFileName = c.Core.ProfileName + ".cache"
}
- cmkHome := path.Join(home, ".cmk")
- if _, err := os.Stat(cmkHome); os.IsNotExist(err) {
- err := os.Mkdir(cmkHome, 0700)
+ checkAndCreateDir(cacheDir)
+ return path.Join(cacheDir, cacheFileName)
+}
+
+func checkAndCreateDir(path string) string {
+ if fileInfo, err := os.Stat(path); os.IsNotExist(err) || !fileInfo.IsDir() {
+ err := os.Mkdir(path, 0700)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
- return cmkHome
+ return path
+}
+
+func getDefaultConfigDir() string {
+ home, err := homedir.Dir()
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ return checkAndCreateDir(path.Join(home, ".cmk"))
}
func defaultCoreConfig() Core {
@@ -122,7 +135,6 @@ func defaultConfig() *Config {
return &Config{
Dir: configDir,
ConfigFile: path.Join(configDir, "config"),
- CacheFile: path.Join(configDir, "cache"),
HistoryFile: path.Join(configDir, "history"),
LogFile: path.Join(configDir, "log"),
HasShell: false,
@@ -164,6 +176,7 @@ func reloadConfig(cfg *Config) *Config {
}
cfg = saveConfig(cfg)
fileLock.Unlock()
+ LoadCache(cfg)
return cfg
}