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")