Have saveEnv always override an existing environment
`saveEnv` had a flag which would prevent an environment from being overwritten if it already existed, which was only used by `lumi env init`. Refactor the code so the check is done inside `lumi` instead of against this API. We don't need this functionality for the service and so requiring support for this at the API boundary for environments feels like a bad idea.
This commit is contained in:
parent
871b8ba962
commit
a4c97d7225
|
@ -4,6 +4,11 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/pulumi/pulumi-fabric/pkg/tokens"
|
||||||
|
"github.com/pulumi/pulumi-fabric/pkg/workspace"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
@ -25,6 +30,10 @@ func newEnvInitCmd() *cobra.Command {
|
||||||
return errors.New("missing required environment name")
|
return errors.New("missing required environment name")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, staterr := os.Stat(workspace.EnvPath(tokens.QName(args[0]))); staterr == nil {
|
||||||
|
return fmt.Errorf("environment '%v' already exists", args[0])
|
||||||
|
}
|
||||||
|
|
||||||
return lumiEngine.InitEnv(args[0])
|
return lumiEngine.InitEnv(args[0])
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ func (eng *Engine) DeleteConfig(envName string, key string) error {
|
||||||
if config != nil {
|
if config != nil {
|
||||||
delete(config, tokens.Token(key))
|
delete(config, tokens.Token(key))
|
||||||
|
|
||||||
if !eng.saveEnv(info.Target, info.Snapshot, true) {
|
if !eng.saveEnv(info.Target, info.Snapshot) {
|
||||||
return errors.Errorf("could not save configuration value")
|
return errors.Errorf("could not save configuration value")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ func (eng *Engine) SetConfig(envName string, key string, value string) error {
|
||||||
|
|
||||||
config[tokens.Token(key)] = value
|
config[tokens.Token(key)] = value
|
||||||
|
|
||||||
if !eng.saveEnv(info.Target, info.Snapshot, true) {
|
if !eng.saveEnv(info.Target, info.Snapshot) {
|
||||||
return errors.Errorf("could not save configuration value")
|
return errors.Errorf("could not save configuration value")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ func (eng *Engine) ReplaceConfig(envName string, newConfig map[string]string) er
|
||||||
|
|
||||||
info.Target.Config = config
|
info.Target.Config = config
|
||||||
|
|
||||||
if !eng.saveEnv(info.Target, info.Snapshot, true) {
|
if !eng.saveEnv(info.Target, info.Snapshot) {
|
||||||
return errors.Errorf("could not save configuration value")
|
return errors.Errorf("could not save configuration value")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ func (eng *Engine) deployLatest(info *envCmdInfo, opts deployOptions) error {
|
||||||
// Now save the updated snapshot Notee that if a failure has occurred, the Apply routine above will
|
// Now save the updated snapshot Notee that if a failure has occurred, the Apply routine above will
|
||||||
// have returned a safe checkpoint.
|
// have returned a safe checkpoint.
|
||||||
targ := result.Info.Target
|
targ := result.Info.Target
|
||||||
eng.saveEnv(targ, summary.Snap(), true /*overwrite*/)
|
eng.saveEnv(targ, summary.Snap())
|
||||||
|
|
||||||
fmt.Fprint(eng.Stdout, colors.Colorize(&footer))
|
fmt.Fprint(eng.Stdout, colors.Colorize(&footer))
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -61,7 +61,7 @@ type envCmdInfo struct {
|
||||||
// createEnv just creates a new empty environment without deploying anything into it.
|
// createEnv just creates a new empty environment without deploying anything into it.
|
||||||
func (eng *Engine) createEnv(name tokens.QName) {
|
func (eng *Engine) createEnv(name tokens.QName) {
|
||||||
env := &deploy.Target{Name: name}
|
env := &deploy.Target{Name: name}
|
||||||
if success := eng.saveEnv(env, nil, false); success {
|
if success := eng.saveEnv(env, nil); success {
|
||||||
fmt.Fprintf(eng.Stdout, "Environment '%v' initialized; see `lumi deploy` to deploy into it\n", name)
|
fmt.Fprintf(eng.Stdout, "Environment '%v' initialized; see `lumi deploy` to deploy into it\n", name)
|
||||||
eng.setCurrentEnv(name, false)
|
eng.setCurrentEnv(name, false)
|
||||||
}
|
}
|
||||||
|
@ -190,7 +190,7 @@ func (eng *Engine) readEnv(name tokens.QName) (*deploy.Target, *deploy.Snapshot,
|
||||||
}
|
}
|
||||||
|
|
||||||
// saveEnv saves a new snapshot at the given location, backing up any existing ones.
|
// saveEnv saves a new snapshot at the given location, backing up any existing ones.
|
||||||
func (eng *Engine) saveEnv(env *deploy.Target, snap *deploy.Snapshot, existok bool) bool {
|
func (eng *Engine) saveEnv(env *deploy.Target, snap *deploy.Snapshot) bool {
|
||||||
contract.Require(env != nil, "env")
|
contract.Require(env != nil, "env")
|
||||||
file := workspace.EnvPath(env.Name)
|
file := workspace.EnvPath(env.Name)
|
||||||
|
|
||||||
|
@ -210,14 +210,6 @@ func (eng *Engine) saveEnv(env *deploy.Target, snap *deploy.Snapshot, existok bo
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// If it's not ok for the file to already exist, ensure that it doesn't.
|
|
||||||
if !existok {
|
|
||||||
if _, staterr := os.Stat(file); staterr == nil {
|
|
||||||
glog.Errorf("An IO error occurred during the current operation: %v", goerr.Errorf("file '%v' already exists", file))
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Back up the existing file if it already exists.
|
// Back up the existing file if it already exists.
|
||||||
backupTarget(file)
|
backupTarget(file)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue