package terraform import ( "log" "github.com/hashicorp/terraform/internal/addrs" "github.com/hashicorp/terraform/internal/configs" "github.com/hashicorp/terraform/internal/states" ) // RemovedModuleTransformer implements GraphTransformer to add nodes indicating // when a module was removed from the configuration. type RemovedModuleTransformer struct { Config *configs.Config // root node in the config tree State *states.State } func (t *RemovedModuleTransformer) Transform(g *Graph) error { // nothing to remove if there's no state! if t.State == nil { return nil } removed := map[string]addrs.Module{} for _, m := range t.State.Modules { cc := t.Config.DescendentForInstance(m.Addr) if cc != nil { continue } removed[m.Addr.Module().String()] = m.Addr.Module() log.Printf("[DEBUG] %s is no longer in configuration\n", m.Addr) } // add closers to collect any module instances we're removing for _, modAddr := range removed { closer := &nodeCloseModule{ Addr: modAddr, } g.Add(closer) } return nil }