From 5e63dcba0ab16ed685a0fa32b6654e037d8b32fb Mon Sep 17 00:00:00 2001 From: Jessica Yuen <im.jessicayuen@gmail.com> Date: Tue, 19 Sep 2017 10:38:37 -0700 Subject: [PATCH] Logging for env subcommands This commit will add logging to all env subcommands 'list', 'set', 'add', and 'rm'. It adds both Info level and Debug level logging. Fixes #137 --- metadata/environment.go | 57 ++++++++++++++++++++++++++++++++++++----- pkg/kubecfg/env.go | 3 +++ 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/metadata/environment.go b/metadata/environment.go index 9eaa66bb..d0c2baab 100644 --- a/metadata/environment.go +++ b/metadata/environment.go @@ -23,6 +23,7 @@ import ( "regexp" "strings" + log "github.com/sirupsen/logrus" "github.com/spf13/afero" "github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet" @@ -53,15 +54,21 @@ type EnvironmentSpec struct { func (m *manager) CreateEnvironment(name, uri string, spec ClusterSpec) error { extensionsLibData, k8sLibData, specData, err := m.generateKsonnetLibData(spec) if err != nil { + log.Debugf("Failed to write '%s'", specFilename) return err } - return m.createEnvironment(name, uri, extensionsLibData, k8sLibData, specData) + err = m.createEnvironment(name, uri, extensionsLibData, k8sLibData, specData) + if err == nil { + log.Infof("Environment '%s' pointing to cluster at URI '%s' successfully created", name, uri) + } + return err } func (m *manager) createEnvironment(name, uri string, extensionsLibData, k8sLibData, specData []byte) error { exists, err := m.environmentExists(name) if err != nil { + log.Debug("Failed to check whether environment exists") return err } if exists { @@ -73,28 +80,38 @@ func (m *manager) createEnvironment(name, uri string, extensionsLibData, k8sLibD return fmt.Errorf("Environment '%s' is not valid; must not contain punctuation or trailing slashes", name) } + log.Infof("Creating environment '%s' with uri '%s'", name, uri) + envPath := appendToAbsPath(m.environmentsPath, name) err = m.appFS.MkdirAll(string(envPath), defaultPermissions) if err != nil { return err } + log.Infof("Generating environment metadata at path '%s'", envPath) + // Generate the schema file. + log.Debugf("Generating '%s', length: %d", schemaFilename, len(specData)) schemaPath := appendToAbsPath(envPath, schemaFilename) err = afero.WriteFile(m.appFS, string(schemaPath), specData, defaultPermissions) if err != nil { + log.Debugf("Failed to write '%s'", schemaFilename) return err } + log.Debugf("Generating '%s', length: %d", k8sLibFilename, len(k8sLibData)) k8sLibPath := appendToAbsPath(envPath, k8sLibFilename) err = afero.WriteFile(m.appFS, string(k8sLibPath), k8sLibData, defaultPermissions) if err != nil { + log.Debugf("Failed to write '%s'", k8sLibFilename) return err } + log.Debugf("Generating '%s', length: %d", extensionsLibFilename, len(extensionsLibData)) extensionsLibPath := appendToAbsPath(envPath, extensionsLibFilename) err = afero.WriteFile(m.appFS, string(extensionsLibPath), extensionsLibData, defaultPermissions) if err != nil { + log.Debugf("Failed to write '%s'", extensionsLibFilename) return err } @@ -104,6 +121,7 @@ func (m *manager) createEnvironment(name, uri string, extensionsLibData, k8sLibD return err } + log.Debugf("Generating '%s', length: %d", specFilename, len(envSpecData)) envSpecPath := appendToAbsPath(envPath, specFilename) return afero.WriteFile(m.appFS, string(envSpecPath), envSpecData, defaultPermissions) } @@ -114,19 +132,24 @@ func (m *manager) DeleteEnvironment(name string) error { // Check whether this environment exists envExists, err := m.environmentExists(name) if err != nil { + log.Debug("Failed to check whether environment exists") return err } if !envExists { return fmt.Errorf("Environment '%s' does not exist", name) } + log.Infof("Deleting environment '%s' at path '%s'", name, envPath) + // Remove the directory and all files within the environment path. err = m.appFS.RemoveAll(envPath) if err != nil { + log.Debugf("Failed to remove environment directory at path '%s'", envPath) return err } // Need to ensure empty parent directories are also removed. + log.Debug("Removing empty parent directories, if any") parentDir := name for parentDir != "." { parentDir = filepath.Dir(parentDir) @@ -134,9 +157,11 @@ func (m *manager) DeleteEnvironment(name string) error { isEmpty, err := afero.IsEmpty(m.appFS, parentPath) if err != nil { + log.Debugf("Failed to check whether parent directory at path '%s' is empty", parentPath) return err } if isEmpty { + log.Debugf("Failed to remove parent directory at path '%s'", parentPath) err := m.appFS.RemoveAll(parentPath) if err != nil { return err @@ -144,15 +169,18 @@ func (m *manager) DeleteEnvironment(name string) error { } } + log.Infof("Successfully removed environment '%s'", name) return nil } func (m *manager) GetEnvironments() ([]Environment, error) { envs := []Environment{} + log.Info("Retrieving all environments") err := afero.Walk(m.appFS, string(m.environmentsPath), func(path string, f os.FileInfo, err error) error { isDir, err := afero.IsDir(m.appFS, path) if err != nil { + log.Debugf("Failed to check whether the path at '%s' is a directory", path) return err } @@ -161,20 +189,24 @@ func (m *manager) GetEnvironments() ([]Environment, error) { specPath := filepath.Join(path, specFilename) specFileExists, err := afero.Exists(m.appFS, specPath) if err != nil { + log.Debugf("Failed to check whether spec file at '$s' exists", specPath) return err } if specFileExists { envName := filepath.Clean(strings.TrimPrefix(path, string(m.environmentsPath)+"/")) specFile, err := afero.ReadFile(m.appFS, specPath) if err != nil { + log.Debugf("Failed to read spec file at path '%s'", specPath) return err } var envSpec EnvironmentSpec err = json.Unmarshal(specFile, &envSpec) if err != nil { + log.Debugf("Failed to convert the spec file at path '%s' to JSON", specPath) return err } + log.Debugf("Found environment '%s', with uri '%s", envName, envSpec.URI) envs = append(envs, Environment{Name: envName, Path: path, URI: envSpec.URI}) } } @@ -193,16 +225,13 @@ func (m *manager) SetEnvironment(name string, desired Environment) error { // Check whether this environment exists envExists, err := m.environmentExists(name) if err != nil { + log.Debugf("Failed to check whether '%s' exists", name) return err } if !envExists { return fmt.Errorf("Environment '%s' does not exist", name) } - if name == desired.Name { - return nil - } - // ensure new environment name does not contain punctuation if !isValidName(desired.Name) { return fmt.Errorf("Environment '%s' is not valid; must not contain punctuation or trailing slashes", desired.Name) @@ -210,10 +239,13 @@ func (m *manager) SetEnvironment(name string, desired Environment) error { // If the name has changed, the directory location needs to be moved to // reflect the change. - if len(desired.Name) != 0 { + if name != desired.Name && len(desired.Name) != 0 { + log.Infof("Setting environment name from '%s' to '%s'", name, desired.Name) + // Ensure not overwriting another environment desiredExists, err := m.environmentExists(desired.Name) if err != nil { + log.Debugf("Failed to check whether environment '%s' already exists", desired.Name) return err } if desiredExists { @@ -223,8 +255,10 @@ func (m *manager) SetEnvironment(name string, desired Environment) error { // Move the directory pathOld := string(appendToAbsPath(m.environmentsPath, name)) pathNew := string(appendToAbsPath(m.environmentsPath, desired.Name)) + log.Debugf("Moving directory at path '%s' to '%s'", pathOld, pathNew) err = m.appFS.Rename(pathOld, pathNew) if err != nil { + log.Debugf("Failed to move path '%s' to '%s", pathOld, pathNew) return err } @@ -233,16 +267,25 @@ func (m *manager) SetEnvironment(name string, desired Environment) error { // Update fields in spec.json if len(desired.URI) != 0 { + log.Infof("Setting environment URI to '%s'", desired.URI) + newSpec, err := generateSpecData(desired.URI) if err != nil { + log.Debugf("Failed to generate %s with URI '%s'", specFilename, desired.URI) return err } envPath := appendToAbsPath(m.environmentsPath, name) specPath := appendToAbsPath(envPath, specFilename) - return afero.WriteFile(m.appFS, string(specPath), newSpec, defaultPermissions) + + err = afero.WriteFile(m.appFS, string(specPath), newSpec, defaultPermissions) + if err != nil { + log.Debugf("Failed to write %s at path '%s'", specFilename, specPath) + return err + } } + log.Infof("Successfully updated environment '%s'", name) return nil } diff --git a/pkg/kubecfg/env.go b/pkg/kubecfg/env.go index d43592c7..7c86c2b8 100644 --- a/pkg/kubecfg/env.go +++ b/pkg/kubecfg/env.go @@ -21,6 +21,8 @@ import ( "sort" "strings" + log "github.com/sirupsen/logrus" + "github.com/ksonnet/kubecfg/metadata" ) @@ -37,6 +39,7 @@ func NewEnvAddCmd(name, uri, specFlag string, rootPath metadata.AbsPath) (*EnvAd if err != nil { return nil, err } + log.Debugf("Generating ksonnetLib data with spec: %s", specFlag) return &EnvAddCmd{name: name, uri: uri, spec: spec, rootPath: rootPath}, nil } -- GitLab