From 615cf047156165a3984a5b4575cbe78ad0848e5b Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 24 Jul 2014 14:40:20 -0700 Subject: [PATCH] terraform: refresh returning nil should delete from state --- terraform/context.go | 6 +++++- terraform/context_test.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/terraform/context.go b/terraform/context.go index eed5ecc46..05f1231f5 100644 --- a/terraform/context.go +++ b/terraform/context.go @@ -820,7 +820,11 @@ func (c *Context) refreshWalkFn() depgraph.WalkFunc { rs.Type = r.State.Type c.sl.Lock() - c.state.Resources[r.Id] = rs + if rs.ID == "" { + delete(c.state.Resources, r.Id) + } else { + c.state.Resources[r.Id] = rs + } c.sl.Unlock() for _, h := range c.hooks { diff --git a/terraform/context_test.go b/terraform/context_test.go index 3516bc5cd..7af65afec 100644 --- a/terraform/context_test.go +++ b/terraform/context_test.go @@ -1639,6 +1639,37 @@ func TestContextRefresh(t *testing.T) { } } +func TestContextRefresh_delete(t *testing.T) { + p := testProvider("aws") + c := testConfig(t, "refresh-basic") + ctx := testContext(t, &ContextOpts{ + Config: c, + Providers: map[string]ResourceProviderFactory{ + "aws": testProviderFuncFixed(p), + }, + State: &State{ + Resources: map[string]*ResourceState{ + "aws_instance.web": &ResourceState{ + ID: "foo", + Type: "aws_instance", + }, + }, + }, + }) + + p.RefreshFn = nil + p.RefreshReturn = nil + + s, err := ctx.Refresh() + if err != nil { + t.Fatalf("err: %s", err) + } + + if len(s.Resources) > 0 { + t.Fatal("resources should be empty") + } +} + func TestContextRefresh_ignoreUncreated(t *testing.T) { p := testProvider("aws") c := testConfig(t, "refresh-basic")