diff --git a/internal/terraform/transform_orphan_resource.go b/internal/terraform/transform_orphan_resource.go index b52334ea2..af8302c49 100644 --- a/internal/terraform/transform_orphan_resource.go +++ b/internal/terraform/transform_orphan_resource.go @@ -79,7 +79,12 @@ func (t *OrphanResourceInstanceTransformer) transform(g *Graph, ms *states.Modul } } - for key := range rs.Instances { + for key, inst := range rs.Instances { + // deposed instances will be taken care of separately + if inst.Current == nil { + continue + } + addr := rs.Addr.Instance(key) abstract := NewNodeAbstractResourceInstance(addr) var node dag.Vertex = abstract diff --git a/internal/terraform/transform_orphan_resource_test.go b/internal/terraform/transform_orphan_resource_test.go index 2f638276e..f44f08152 100644 --- a/internal/terraform/transform_orphan_resource_test.go +++ b/internal/terraform/transform_orphan_resource_test.go @@ -50,6 +50,26 @@ func TestOrphanResourceInstanceTransformer(t *testing.T) { Module: addrs.RootModule, }, ) + + // A deposed orphan should not be handled by this transformer + s.SetResourceInstanceDeposed( + addrs.Resource{ + Mode: addrs.ManagedResourceMode, + Type: "test_instance", + Name: "deposed", + }.Instance(addrs.NoKey).Absolute(addrs.RootModuleInstance), + states.NewDeposedKey(), + &states.ResourceInstanceObjectSrc{ + AttrsFlat: map[string]string{ + "id": "foo", + }, + Status: states.ObjectReady, + }, + addrs.AbsProviderConfig{ + Provider: addrs.NewDefaultProvider("test"), + Module: addrs.RootModule, + }, + ) }) g := Graph{Path: addrs.RootModuleInstance}