Merge pull request #15383 from hashicorp/jbardin/s3-delete-state

Use RemoteClient.Delete for s3.Backend.DeleteState
This commit is contained in:
James Bardin 2017-06-23 11:13:15 -04:00 committed by GitHub
commit 9c874f3b94
2 changed files with 31 additions and 9 deletions

View File

@ -70,20 +70,16 @@ func (b *Backend) DeleteState(name string) error {
return fmt.Errorf("can't delete default state") return fmt.Errorf("can't delete default state")
} }
params := &s3.DeleteObjectInput{ client, err := b.remoteClient(name)
Bucket: &b.bucketName,
Key: aws.String(b.path(name)),
}
_, err := b.s3Client.DeleteObject(params)
if err != nil { if err != nil {
return err return err
} }
return nil return client.Delete()
} }
func (b *Backend) State(name string) (state.State, error) { // get a remote client configured for this state
func (b *Backend) remoteClient(name string) (*RemoteClient, error) {
if name == "" { if name == "" {
return nil, errors.New("missing state name") return nil, errors.New("missing state name")
} }
@ -99,8 +95,16 @@ func (b *Backend) State(name string) (state.State, error) {
ddbTable: b.ddbTable, ddbTable: b.ddbTable,
} }
stateMgr := &remote.State{Client: client} return client, nil
}
func (b *Backend) State(name string) (state.State, error) {
client, err := b.remoteClient(name)
if err != nil {
return nil, err
}
stateMgr := &remote.State{Client: client}
// Check to see if this state already exists. // Check to see if this state already exists.
// If we're trying to force-unlock a state, we can't take the lock before // If we're trying to force-unlock a state, we can't take the lock before
// fetching the state. If the state doesn't exist, we have to assume this // fetching the state. If the state doesn't exist, we have to assume this

View File

@ -187,6 +187,24 @@ func testBackendStates(t *testing.T, b Backend) {
t.Fatal("expected error") t.Fatal("expected error")
} }
// Create and delete the foo state again.
// Make sure that there are no leftover artifacts from a deleted state
// preventing re-creation.
foo, err = b.State("foo")
if err != nil {
t.Fatalf("error: %s", err)
}
if err := foo.RefreshState(); err != nil {
t.Fatalf("bad: %s", err)
}
if v := foo.State(); v.HasResources() {
t.Fatalf("should be empty: %s", v)
}
// and delete it again
if err := b.DeleteState("foo"); err != nil {
t.Fatalf("err: %s", err)
}
// Verify deletion // Verify deletion
{ {
states, err := b.States() states, err := b.States()