@ -1,12 +1,73 @@
package terraform
import (
"log"
"github.com/hashicorp/terraform/addrs"
"github.com/hashicorp/terraform/configs"
"github.com/hashicorp/terraform/dag"
"github.com/hashicorp/terraform/lang"
)
// NodePlannableLocal represents a named local value in a configuration module,
// which has not yet been expanded.
type NodePlannableLocal struct {
Addr addrs . LocalValue
Module addrs . Module
Config * configs . Local
}
var (
_ RemovableIfNotTargeted = ( * NodePlannableLocal ) ( nil )
_ GraphNodeReferenceable = ( * NodePlannableLocal ) ( nil )
_ GraphNodeReferencer = ( * NodePlannableLocal ) ( nil )
_ GraphNodeDynamicExpandable = ( * NodePlannableLocal ) ( nil )
)
func ( n * NodePlannableLocal ) Name ( ) string {
path := n . Module . String ( )
addr := n . Addr . String ( )
if path != "" {
return path + "." + addr
}
return addr
}
// GraphNodeModulePath
func ( n * NodePlannableLocal ) ModulePath ( ) addrs . Module {
return n . Module
}
// RemovableIfNotTargeted
func ( n * NodePlannableLocal ) RemoveIfNotTargeted ( ) bool {
return true
}
// GraphNodeReferenceable
func ( n * NodePlannableLocal ) ReferenceableAddrs ( ) [ ] addrs . Referenceable {
return [ ] addrs . Referenceable { n . Addr }
}
// GraphNodeReferencer
func ( n * NodePlannableLocal ) References ( ) [ ] * addrs . Reference {
refs , _ := lang . ReferencesInExpr ( n . Config . Expr )
return appendResourceDestroyReferences ( refs )
}
func ( n * NodePlannableLocal ) DynamicExpand ( ctx EvalContext ) ( * Graph , error ) {
var g Graph
expander := ctx . InstanceExpander ( )
for _ , module := range expander . ExpandModule ( n . Module ) {
o := & NodeLocal {
Addr : n . Addr . Absolute ( module ) ,
Config : n . Config ,
}
log . Printf ( "[TRACE] Expanding local: adding %s as %T" , o . Addr . String ( ) , o )
g . Add ( o )
}
return & g , nil
}
// NodeLocal represents a named local value in a particular module.
//
// Local value nodes only have one operation, common to all walk types: