fix incorrect current state in local backend

Forgot to remove the currentState field, which was not always set. The
current state should always just be read from the environment file.

Always return the default state name when we can't determine the state.
This commit is contained in:
James Bardin 2017-02-24 08:53:37 -05:00
parent 06663991d1
commit fbc11c7961
1 changed files with 16 additions and 16 deletions

View File

@ -55,10 +55,6 @@ type Local struct {
// we only want to create a single instance of the local state
state state.State
// the name of the current state
currentState string
// ContextOpts are the base context options to set when initializing a
// Terraform context. Many of these will be overridden or merged by
// Operation. See Operation for more details.
ContextOpts *terraform.ContextOpts
@ -135,31 +131,37 @@ func (b *Local) States() ([]string, string, error) {
// the listing always start with "default"
envs := []string{backend.DefaultStateName}
current := b.currentState
if current == "" {
name, err := b.currentStateName()
if err != nil {
return nil, "", err
}
current = name
current, err := b.currentStateName()
if err != nil {
return nil, "", err
}
entries, err := ioutil.ReadDir(filepath.Join(b.workingDir, DefaultEnvDir))
// no error if there's no envs configured
if os.IsNotExist(err) {
return envs, current, nil
return envs, backend.DefaultStateName, nil
}
if err != nil {
return nil, "", err
}
currentExists := false
var listed []string
for _, entry := range entries {
if entry.IsDir() {
listed = append(listed, filepath.Base(entry.Name()))
name := filepath.Base(entry.Name())
if name == current {
currentExists = true
}
listed = append(listed, name)
}
}
// current was out of sync for some reason, so return defualt
if !currentExists {
current = backend.DefaultStateName
}
sort.Strings(listed)
envs = append(envs, listed...)
@ -254,8 +256,6 @@ func (b *Local) ChangeState(name string) error {
return err
}
b.currentState = name
// remove the current state so it's reloaded on the next call to State
b.state = nil
@ -421,7 +421,7 @@ func (b *Local) statePath() (string, error) {
path := DefaultStateFilename
if current != backend.DefaultStateName && current != "" {
path = filepath.Join(b.workingDir, DefaultEnvDir, b.currentState, DefaultStateFilename)
path = filepath.Join(b.workingDir, DefaultEnvDir, current, DefaultStateFilename)
}
return path, nil
}