blob: c4833d381a190e9e44efcb4d8f99f2e68424f193 [file]
// Copyright IBM Corp. 2014, 2026
// SPDX-License-Identifier: BUSL-1.1
package terraform
import (
"log"
"github.com/hashicorp/terraform/internal/addrs"
"github.com/hashicorp/terraform/internal/configs"
"github.com/hashicorp/terraform/internal/states"
)
// 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 {
Config *configs.Config // Root of config tree
State *states.State // State is the root state
Planning bool
}
func (t *OrphanOutputTransformer) Transform(g *Graph) error {
if t.State == nil {
log.Printf("[DEBUG] No state, no orphan outputs")
return nil
}
cfgs := t.Config.Module.Outputs
for name := range t.State.RootOutputValues {
if _, exists := cfgs[name]; exists {
continue
}
g.Add(&NodeDestroyableOutput{
Addr: addrs.OutputValue{Name: name}.Absolute(addrs.RootModuleInstance),
Planning: t.Planning,
})
}
return nil
}