]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/hashicorp/terraform/terraform/transform_orphan_output.go
deps: github.com/hashicorp/terraform@sdk-v0.11-with-go-modules
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / terraform / transform_orphan_output.go
1 package terraform
2
3 import (
4 "log"
5
6 "github.com/hashicorp/terraform/config"
7 "github.com/hashicorp/terraform/config/module"
8 )
9
10 // OrphanOutputTransformer finds the outputs that aren't present
11 // in the given config that are in the state and adds them to the graph
12 // for deletion.
13 type OrphanOutputTransformer struct {
14 Module *module.Tree // Root module
15 State *State // State is the root state
16 }
17
18 func (t *OrphanOutputTransformer) Transform(g *Graph) error {
19 if t.State == nil {
20 log.Printf("[DEBUG] No state, no orphan outputs")
21 return nil
22 }
23
24 for _, ms := range t.State.Modules {
25 if err := t.transform(g, ms); err != nil {
26 return err
27 }
28 }
29 return nil
30 }
31
32 func (t *OrphanOutputTransformer) transform(g *Graph, ms *ModuleState) error {
33 if ms == nil {
34 return nil
35 }
36
37 path := normalizeModulePath(ms.Path)
38
39 // Get the config for this path, which is nil if the entire module has been
40 // removed.
41 var c *config.Config
42 if m := t.Module.Child(path[1:]); m != nil {
43 c = m.Config()
44 }
45
46 // add all the orphaned outputs to the graph
47 for _, n := range ms.RemovedOutputs(c) {
48 g.Add(&NodeOutputOrphan{OutputName: n, PathValue: path})
49
50 }
51
52 return nil
53 }