opentofu/terraform/transform_orphan_output.go
James Bardin aa2bd0945b properly find orphaned outputs
You can't find orphans by walking the config, because by definition
orphans aren't in the config.

Leaving the broken test for when empty modules are removed from the
state as well.
2017-11-08 14:28:02 -05:00

54 lines
1.1 KiB
Go

package terraform
import (
"log"
"github.com/hashicorp/terraform/config"
"github.com/hashicorp/terraform/config/module"
)
// OrphanOutputTransformer finds the outputs that aren't present
// in the given config that are in the state and adds them to the graph
// for deletion.
type OrphanOutputTransformer struct {
Module *module.Tree // Root module
State *State // State is the root state
}
func (t *OrphanOutputTransformer) Transform(g *Graph) error {
if t.State == nil {
log.Printf("[DEBUG] No state, no orphan outputs")
return nil
}
for _, ms := range t.State.Modules {
if err := t.transform(g, ms); err != nil {
return err
}
}
return nil
}
func (t *OrphanOutputTransformer) transform(g *Graph, ms *ModuleState) error {
if ms == nil {
return nil
}
path := normalizeModulePath(ms.Path)
// Get the config for this path, which is nil if the entire module has been
// removed.
var c *config.Config
if m := t.Module.Child(path[1:]); m != nil {
c = m.Config()
}
// add all the orphaned outputs to the graph
for _, n := range ms.OrphanOutputs(c) {
g.Add(&NodeOutputOrphan{OutputName: n, PathValue: path})
}
return nil
}