unlock state in console, import, graph, and push

The state locking improvements for the regular command had the side
effect of locking the state in the console, import, graph and push
commands. Those commands had been updated to get a state via the
Backend.Context method, which locks the state whenever possible, and now
need to call Unlock directly.

Add Unlock calls to all commands that call Context directly.
pull/17645/head
James Bardin 8 years ago
parent a5c4f7e08e
commit 90a75422fb

@ -81,6 +81,13 @@ func (c *ConsoleCommand) Run(args []string) int {
return 1
}
defer func() {
err := opReq.StateLocker.Unlock(nil)
if err != nil {
c.Ui.Error(err.Error())
}
}()
// Setup the UI so we can output directly to stdout
ui := &cli.BasicUi{
Writer: wrappedstreams.Stdout(),

@ -112,6 +112,13 @@ func (c *GraphCommand) Run(args []string) int {
return 1
}
defer func() {
err := opReq.StateLocker.Unlock(nil)
if err != nil {
c.Ui.Error(err.Error())
}
}()
// Determine the graph type
graphType := terraform.GraphTypePlan
if plan != nil {

@ -184,6 +184,13 @@ func (c *ImportCommand) Run(args []string) int {
return 1
}
defer func() {
err := opReq.StateLocker.Unlock(nil)
if err != nil {
c.Ui.Error(err.Error())
}
}()
// Perform the import. Note that as you can see it is possible for this
// API to import more than one resource at once. For now, we only allow
// one while we stabilize this feature.

@ -4,6 +4,7 @@ import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
"testing"
@ -175,11 +176,17 @@ func TestImport_remoteState(t *testing.T) {
"test_instance.foo",
"bar",
}
if code := c.Run(args); code != 0 {
fmt.Println(ui.OutputWriter)
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
}
// verify that the local state was unlocked after import
if _, err := os.Stat(filepath.Join(td, fmt.Sprintf(".%s.lock.info", statePath))); !os.IsNotExist(err) {
t.Fatal("state left locked after import")
}
// Verify that we were called
if !configured {
t.Fatal("Configure should be called")

@ -146,6 +146,13 @@ func (c *PushCommand) Run(args []string) int {
return 1
}
defer func() {
err := opReq.StateLocker.Unlock(nil)
if err != nil {
c.Ui.Error(err.Error())
}
}()
// Get the configuration
config := ctx.Module().Config()
if name == "" {

Loading…
Cancel
Save