Skip to content
Snippets Groups Projects
Commit 63fe7d8c authored by Alex Clemmer's avatar Alex Clemmer Committed by GitHub
Browse files

Merge pull request #142 from jessicayuen/env/logging

Add logging to 'env' subcommands
parents b081f0bc 5e63dcba
No related branches found
No related tags found
No related merge requests found
......@@ -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
}
......
......@@ -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
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment