Documentation ¶
Index ¶
- Constants
- Variables
- func Eval(n EvalNode, ctx EvalContext) (interface{}, error)
- func EvalRaw(n EvalNode, ctx EvalContext) (interface{}, error)
- func GraphDot(g *Graph, opts *GraphDotOpts) (string, error)
- func ParseResourceIndex(s string) (int, error)
- func ParseResourcePath(s string) []string
- func PathCacheKey(path []string) string
- func ProviderSatisfies(p ResourceProvider, n string) bool
- func WritePlan(d *Plan, dst io.Writer) error
- func WriteState(d *State, dst io.Writer) error
- type AddOutputOrphanTransformer
- type BasicGraphBuilder
- type BuiltinEvalContext
- func (ctx *BuiltinEvalContext) CloseProvider(n string) error
- func (ctx *BuiltinEvalContext) CloseProvisioner(n string) error
- func (ctx *BuiltinEvalContext) ConfigureProvider(n string, cfg *ResourceConfig) error
- func (ctx *BuiltinEvalContext) Diff() (*Diff, *sync.RWMutex)
- func (ctx *BuiltinEvalContext) Hook(fn func(Hook) (HookAction, error)) error
- func (ctx *BuiltinEvalContext) InitProvider(n string) (ResourceProvider, error)
- func (ctx *BuiltinEvalContext) InitProvisioner(n string) (ResourceProvisioner, error)
- func (ctx *BuiltinEvalContext) Input() UIInput
- func (ctx *BuiltinEvalContext) Interpolate(cfg *config.RawConfig, r *Resource) (*ResourceConfig, error)
- func (ctx *BuiltinEvalContext) ParentProviderConfig(n string) *ResourceConfig
- func (ctx *BuiltinEvalContext) Path() []string
- func (ctx *BuiltinEvalContext) Provider(n string) ResourceProvider
- func (ctx *BuiltinEvalContext) ProviderInput(n string) map[string]interface{}
- func (ctx *BuiltinEvalContext) Provisioner(n string) ResourceProvisioner
- func (ctx *BuiltinEvalContext) SetProviderConfig(n string, cfg *ResourceConfig) error
- func (ctx *BuiltinEvalContext) SetProviderInput(n string, c map[string]interface{})
- func (ctx *BuiltinEvalContext) SetVariables(n string, vs map[string]string)
- func (ctx *BuiltinEvalContext) State() (*State, *sync.RWMutex)
- type BuiltinGraphBuilder
- type CallbackUIOutput
- type CloseProviderTransformer
- type CloseProvisionerTransformer
- type ConfigTransformer
- type Context
- func (c *Context) Apply() (*State, error)
- func (c *Context) Graph(g *ContextGraphOpts) (*Graph, error)
- func (c *Context) Input(mode InputMode) error
- func (c *Context) Module() *module.Tree
- func (c *Context) Plan() (*Plan, error)
- func (c *Context) Refresh() (*State, error)
- func (c *Context) SetVariable(k, v string)
- func (c *Context) Stop()
- func (c *Context) Validate() ([]string, []error)
- func (c *Context) Variables() map[string]string
- type ContextGraphOpts
- type ContextGraphWalker
- type ContextOpts
- type CreateBeforeDestroyTransformer
- type DeposedTransformer
- type DestroyTransformer
- type Diff
- type DiffAttrType
- type DiffChangeType
- type DisableProviderTransformer
- type EphemeralState
- type EvalApply
- type EvalApplyPost
- type EvalApplyProvisioners
- type EvalBuildProviderConfig
- type EvalCheckPreventDestroy
- type EvalClearPrimaryState
- type EvalCloseProvider
- type EvalCloseProvisioner
- type EvalCompareDiff
- type EvalConfigProvider
- type EvalContext
- type EvalCountFixZeroOneBoundary
- type EvalDeleteOutput
- type EvalDeposeState
- type EvalDiff
- type EvalDiffDestroy
- type EvalDiffDestroyModule
- type EvalDiffTainted
- type EvalEarlyExitError
- type EvalFilterDiff
- type EvalGetProvider
- type EvalGetProvisioner
- type EvalIf
- type EvalInitProvider
- type EvalInitProvisioner
- type EvalInputProvider
- type EvalInstanceInfo
- type EvalInterpolate
- type EvalNode
- type EvalNodeFilterFunc
- type EvalNodeFilterable
- type EvalNodeOpFilterable
- type EvalNoop
- type EvalOpFilter
- type EvalReadDiff
- type EvalReadState
- type EvalReadStateDeposed
- type EvalReadStateTainted
- type EvalRefresh
- type EvalRequireState
- type EvalReturnError
- type EvalSequence
- type EvalSetProviderConfig
- type EvalSetVariables
- type EvalUndeposeState
- type EvalUpdateStateHook
- type EvalValidateCount
- type EvalValidateError
- type EvalValidateProvider
- type EvalValidateProvisioner
- type EvalValidateResource
- type EvalVariableBlock
- type EvalWriteDiff
- type EvalWriteOutput
- type EvalWriteState
- type EvalWriteStateDeposed
- type EvalWriteStateTainted
- type ExpandTransform
- type FlattenTransformer
- type Graph
- func (g *Graph) Add(v dag.Vertex) dag.Vertex
- func (g *Graph) ConnectDependent(raw dag.Vertex) []string
- func (g *Graph) ConnectDependents()
- func (g *Graph) ConnectFrom(source string, target dag.Vertex)
- func (g *Graph) ConnectTo(v dag.Vertex, targets []string) []string
- func (g *Graph) Dependable(n string) dag.Vertex
- func (g *Graph) Remove(v dag.Vertex) dag.Vertex
- func (g *Graph) Replace(o, n dag.Vertex) bool
- func (g *Graph) Walk(walker GraphWalker) error
- type GraphBuilder
- type GraphDotOpts
- type GraphNodeAddressable
- type GraphNodeBasicSubgraph
- type GraphNodeCloseProvider
- type GraphNodeCloseProvisioner
- type GraphNodeConfigModule
- func (n *GraphNodeConfigModule) ConfigType() GraphNodeConfigType
- func (n *GraphNodeConfigModule) DependableName() []string
- func (n *GraphNodeConfigModule) DependentOn() []string
- func (n *GraphNodeConfigModule) Expand(b GraphBuilder) (GraphNodeSubgraph, error)
- func (n *GraphNodeConfigModule) Name() string
- func (n *GraphNodeConfigModule) ProvidedBy() []string
- type GraphNodeConfigOutput
- func (n *GraphNodeConfigOutput) ConfigType() GraphNodeConfigType
- func (n *GraphNodeConfigOutput) DependableName() []string
- func (n *GraphNodeConfigOutput) DependentOn() []string
- func (n *GraphNodeConfigOutput) DestroyEdgeInclude(dag.Vertex) bool
- func (n *GraphNodeConfigOutput) EvalTree() EvalNode
- func (n *GraphNodeConfigOutput) Flatten(p []string) (dag.Vertex, error)
- func (n *GraphNodeConfigOutput) Name() string
- func (n *GraphNodeConfigOutput) OutputName() string
- func (n *GraphNodeConfigOutput) Proxy() bool
- type GraphNodeConfigOutputFlat
- type GraphNodeConfigProvider
- func (n *GraphNodeConfigProvider) ConfigType() GraphNodeConfigType
- func (n *GraphNodeConfigProvider) DependableName() []string
- func (n *GraphNodeConfigProvider) DependentOn() []string
- func (n *GraphNodeConfigProvider) DotNode(name string, opts *GraphDotOpts) *dot.Node
- func (n *GraphNodeConfigProvider) DotOrigin() bool
- func (n *GraphNodeConfigProvider) EvalTree() EvalNode
- func (n *GraphNodeConfigProvider) Flatten(p []string) (dag.Vertex, error)
- func (n *GraphNodeConfigProvider) Name() string
- func (n *GraphNodeConfigProvider) ProviderConfig() *config.RawConfig
- func (n *GraphNodeConfigProvider) ProviderName() string
- type GraphNodeConfigProviderFlat
- type GraphNodeConfigResource
- func (n *GraphNodeConfigResource) ConfigType() GraphNodeConfigType
- func (n *GraphNodeConfigResource) CountDependentOn() []string
- func (n *GraphNodeConfigResource) DependableName() []string
- func (n *GraphNodeConfigResource) DependentOn() []string
- func (n *GraphNodeConfigResource) DestroyNode(mode GraphNodeDestroyMode) GraphNodeDestroy
- func (n *GraphNodeConfigResource) DotNode(name string, opts *GraphDotOpts) *dot.Node
- func (n *GraphNodeConfigResource) DynamicExpand(ctx EvalContext) (*Graph, error)
- func (n *GraphNodeConfigResource) EvalTree() EvalNode
- func (n *GraphNodeConfigResource) Flatten(p []string) (dag.Vertex, error)
- func (n *GraphNodeConfigResource) Name() string
- func (n *GraphNodeConfigResource) ProvidedBy() []string
- func (n *GraphNodeConfigResource) ProvisionedBy() []string
- func (n *GraphNodeConfigResource) ResourceAddress() *ResourceAddress
- func (n *GraphNodeConfigResource) SetTargets(targets []ResourceAddress)
- func (n *GraphNodeConfigResource) VarWalk(fn func(config.InterpolatedVariable))
- type GraphNodeConfigResourceFlat
- func (n *GraphNodeConfigResourceFlat) DependableName() []string
- func (n *GraphNodeConfigResourceFlat) DependentOn() []string
- func (n *GraphNodeConfigResourceFlat) DestroyNode(mode GraphNodeDestroyMode) GraphNodeDestroy
- func (n *GraphNodeConfigResourceFlat) Name() string
- func (n *GraphNodeConfigResourceFlat) Path() []string
- func (n *GraphNodeConfigResourceFlat) ProvidedBy() []string
- func (n *GraphNodeConfigResourceFlat) ProvisionedBy() []string
- type GraphNodeConfigType
- type GraphNodeConfigVariable
- func (n *GraphNodeConfigVariable) ConfigType() GraphNodeConfigType
- func (n *GraphNodeConfigVariable) DependableName() []string
- func (n *GraphNodeConfigVariable) DependentOn() []string
- func (n *GraphNodeConfigVariable) DestroyEdgeInclude(v dag.Vertex) bool
- func (n *GraphNodeConfigVariable) EvalTree() EvalNode
- func (n *GraphNodeConfigVariable) Flatten(p []string) (dag.Vertex, error)
- func (n *GraphNodeConfigVariable) Name() string
- func (n *GraphNodeConfigVariable) Proxy() bool
- func (n *GraphNodeConfigVariable) VariableName() string
- type GraphNodeConfigVariableFlat
- type GraphNodeCountDependent
- type GraphNodeDependable
- type GraphNodeDependent
- type GraphNodeDestroy
- type GraphNodeDestroyEdgeInclude
- type GraphNodeDestroyMode
- type GraphNodeDestroyPrunable
- type GraphNodeDestroyable
- type GraphNodeDotOrigin
- type GraphNodeDotter
- type GraphNodeDynamicExpandable
- type GraphNodeEvalable
- type GraphNodeExpandable
- type GraphNodeFlatGraph
- type GraphNodeFlattenable
- type GraphNodeOutput
- type GraphNodeProvider
- type GraphNodeProviderConsumer
- type GraphNodeProvisioner
- type GraphNodeProvisionerConsumer
- type GraphNodeProxy
- type GraphNodeStateRepresentative
- type GraphNodeSubPath
- type GraphNodeSubgraph
- type GraphNodeTargetable
- type GraphProxyEdge
- type GraphSemanticChecker
- type GraphTransformer
- type GraphVertexTransformer
- type GraphWalker
- type Hook
- type HookAction
- type InputMode
- type InputOpts
- type InstanceDiff
- type InstanceInfo
- type InstanceState
- type InstanceType
- type Interpolater
- type InterpolationScope
- type MissingProviderTransformer
- type MissingProvisionerTransformer
- type MockEvalContext
- func (c *MockEvalContext) CloseProvider(n string) error
- func (c *MockEvalContext) CloseProvisioner(n string) error
- func (c *MockEvalContext) ConfigureProvider(n string, cfg *ResourceConfig) error
- func (c *MockEvalContext) Diff() (*Diff, *sync.RWMutex)
- func (c *MockEvalContext) Hook(fn func(Hook) (HookAction, error)) error
- func (c *MockEvalContext) InitProvider(n string) (ResourceProvider, error)
- func (c *MockEvalContext) InitProvisioner(n string) (ResourceProvisioner, error)
- func (c *MockEvalContext) Input() UIInput
- func (c *MockEvalContext) Interpolate(config *config.RawConfig, resource *Resource) (*ResourceConfig, error)
- func (c *MockEvalContext) ParentProviderConfig(n string) *ResourceConfig
- func (c *MockEvalContext) Path() []string
- func (c *MockEvalContext) Provider(n string) ResourceProvider
- func (c *MockEvalContext) ProviderInput(n string) map[string]interface{}
- func (c *MockEvalContext) Provisioner(n string) ResourceProvisioner
- func (c *MockEvalContext) SetProviderConfig(n string, cfg *ResourceConfig) error
- func (c *MockEvalContext) SetProviderInput(n string, cfg map[string]interface{})
- func (c *MockEvalContext) SetVariables(n string, vs map[string]string)
- func (c *MockEvalContext) State() (*State, *sync.RWMutex)
- type MockHook
- func (h *MockHook) PostApply(n *InstanceInfo, s *InstanceState, e error) (HookAction, error)
- func (h *MockHook) PostDiff(n *InstanceInfo, d *InstanceDiff) (HookAction, error)
- func (h *MockHook) PostProvision(n *InstanceInfo, provId string) (HookAction, error)
- func (h *MockHook) PostProvisionResource(n *InstanceInfo, s *InstanceState) (HookAction, error)
- func (h *MockHook) PostRefresh(n *InstanceInfo, s *InstanceState) (HookAction, error)
- func (h *MockHook) PostStateUpdate(s *State) (HookAction, error)
- func (h *MockHook) PreApply(n *InstanceInfo, s *InstanceState, d *InstanceDiff) (HookAction, error)
- func (h *MockHook) PreDiff(n *InstanceInfo, s *InstanceState) (HookAction, error)
- func (h *MockHook) PreProvision(n *InstanceInfo, provId string) (HookAction, error)
- func (h *MockHook) PreProvisionResource(n *InstanceInfo, s *InstanceState) (HookAction, error)
- func (h *MockHook) PreRefresh(n *InstanceInfo, s *InstanceState) (HookAction, error)
- func (h *MockHook) ProvisionOutput(n *InstanceInfo, provId string, msg string)
- type MockResourceProvider
- func (p *MockResourceProvider) Apply(info *InstanceInfo, state *InstanceState, diff *InstanceDiff) (*InstanceState, error)
- func (p *MockResourceProvider) Close() error
- func (p *MockResourceProvider) Configure(c *ResourceConfig) error
- func (p *MockResourceProvider) Diff(info *InstanceInfo, state *InstanceState, desired *ResourceConfig) (*InstanceDiff, error)
- func (p *MockResourceProvider) Input(input UIInput, c *ResourceConfig) (*ResourceConfig, error)
- func (p *MockResourceProvider) Refresh(info *InstanceInfo, s *InstanceState) (*InstanceState, error)
- func (p *MockResourceProvider) Resources() []ResourceType
- func (p *MockResourceProvider) Validate(c *ResourceConfig) ([]string, []error)
- func (p *MockResourceProvider) ValidateResource(t string, c *ResourceConfig) ([]string, []error)
- type MockResourceProvisioner
- type MockUIInput
- type MockUIOutput
- type ModuleDestroyTransformer
- type ModuleDiff
- type ModuleInputTransformer
- type ModuleState
- type NilHook
- func (*NilHook) PostApply(*InstanceInfo, *InstanceState, error) (HookAction, error)
- func (*NilHook) PostDiff(*InstanceInfo, *InstanceDiff) (HookAction, error)
- func (*NilHook) PostProvision(*InstanceInfo, string) (HookAction, error)
- func (*NilHook) PostProvisionResource(*InstanceInfo, *InstanceState) (HookAction, error)
- func (*NilHook) PostRefresh(*InstanceInfo, *InstanceState) (HookAction, error)
- func (*NilHook) PostStateUpdate(*State) (HookAction, error)
- func (*NilHook) PreApply(*InstanceInfo, *InstanceState, *InstanceDiff) (HookAction, error)
- func (*NilHook) PreDiff(*InstanceInfo, *InstanceState) (HookAction, error)
- func (*NilHook) PreProvision(*InstanceInfo, string) (HookAction, error)
- func (*NilHook) PreProvisionResource(*InstanceInfo, *InstanceState) (HookAction, error)
- func (*NilHook) PreRefresh(*InstanceInfo, *InstanceState) (HookAction, error)
- func (*NilHook) ProvisionOutput(*InstanceInfo, string, string)
- type NullGraphWalker
- func (NullGraphWalker) EnterEvalTree(v dag.Vertex, n EvalNode) EvalNode
- func (NullGraphWalker) EnterPath([]string) EvalContext
- func (NullGraphWalker) EnterVertex(dag.Vertex)
- func (NullGraphWalker) ExitEvalTree(dag.Vertex, interface{}, error) error
- func (NullGraphWalker) ExitPath([]string)
- func (NullGraphWalker) ExitVertex(dag.Vertex, error)
- type OrphanTransformer
- type Plan
- type PrefixUIInput
- type ProviderTransformer
- type ProvisionerTransformer
- type ProvisionerUIOutput
- type ProxyTransformer
- type PruneDestroyTransformer
- type PruneProviderTransformer
- type PruneProvisionerTransformer
- type RemoteState
- type Resource
- type ResourceAddress
- type ResourceAttrDiff
- type ResourceConfig
- type ResourceCountTransformer
- type ResourceDependency
- type ResourceFlag
- type ResourceProvider
- type ResourceProviderCloser
- type ResourceProviderFactory
- type ResourceProvisioner
- type ResourceProvisionerCloser
- type ResourceProvisionerConfig
- type ResourceProvisionerFactory
- type ResourceState
- type ResourceStateV1
- type ResourceType
- type RootTransformer
- type SemanticCheckModulesExist
- type SemanticChecker
- type Semaphore
- type State
- func (s *State) AddModule(path []string) *ModuleState
- func (s *State) Children(path []string) []*ModuleState
- func (s *State) DeepCopy() *State
- func (s *State) Empty() bool
- func (s *State) Equal(other *State) bool
- func (s *State) GoString() string
- func (s *State) IncrementSerialMaybe(other *State)
- func (s *State) IsRemote() bool
- func (s *State) ModuleByPath(path []string) *ModuleState
- func (s *State) ModuleOrphans(path []string, c *config.Config) [][]string
- func (s *State) RootModule() *ModuleState
- func (s *State) String() string
- type StateV1
- type TaintedTransformer
- type TargetsTransformer
- type TransitiveReductionTransformer
- type UIInput
- type UIOutput
- type UnorderedSemanticCheckRunner
- type VertexTransformer
Constants ¶
const RootModuleName = "root"
RootModuleName is the name given to the root module implicitly.
const (
// StateVersion is the current version for our state file
StateVersion = 1
)
const ( // VarEnvPrefix is the prefix of variables that are read from // the environment to set variables here. VarEnvPrefix = "TF_VAR_" )
const Version = "0.6.0"
The main version number that is being run at the moment.
const VersionPrerelease = ""
A pre-release marker for the version. If this is "" (empty string) then it means that it is a final release. Otherwise, this is a pre-release such as "dev" (in development), "beta", "rc1", etc.
Variables ¶
var RootModulePath = []string{RootModuleName}
RootModulePath is the path for the root module.
Functions ¶
func Eval ¶
func Eval(n EvalNode, ctx EvalContext) (interface{}, error)
Eval evaluates the given EvalNode with the given context, properly evaluating all args in the correct order.
func EvalRaw ¶
func EvalRaw(n EvalNode, ctx EvalContext) (interface{}, error)
EvalRaw is like Eval except that it returns all errors, even if they signal something normal such as EvalEarlyExitError.
func GraphDot ¶
func GraphDot(g *Graph, opts *GraphDotOpts) (string, error)
GraphDot returns the dot formatting of a visual representation of the given Terraform graph.
func ParseResourceIndex ¶
func ParseResourcePath ¶
func ProviderSatisfies ¶
func ProviderSatisfies(p ResourceProvider, n string) bool
Types ¶
type AddOutputOrphanTransformer ¶
type AddOutputOrphanTransformer struct {
State *State
}
AddOutputOrphanTransformer is a transformer that adds output orphans to the graph. Output orphans are outputs that are no longer in the configuration and therefore need to be removed from the state.
func (*AddOutputOrphanTransformer) Transform ¶
func (t *AddOutputOrphanTransformer) Transform(g *Graph) error
type BasicGraphBuilder ¶
type BasicGraphBuilder struct { Steps []GraphTransformer Validate bool }
BasicGraphBuilder is a GraphBuilder that builds a graph out of a series of transforms and (optionally) validates the graph is a valid structure.
type BuiltinEvalContext ¶
type BuiltinEvalContext struct { // PathValue is the Path that this context is operating within. PathValue []string // Interpolater setting below affect the interpolation of variables. // // The InterpolaterVars are the exact value for ${var.foo} values. // The map is shared between all contexts and is a mapping of // PATH to KEY to VALUE. Because it is shared by all contexts as well // as the Interpolater itself, it is protected by InterpolaterVarLock // which must be locked during any access to the map. Interpolater *Interpolater InterpolaterVars map[string]map[string]string InterpolaterVarLock *sync.Mutex Hooks []Hook InputValue UIInput Providers map[string]ResourceProviderFactory ProviderCache map[string]ResourceProvider ProviderConfigCache map[string]*ResourceConfig ProviderInputConfig map[string]map[string]interface{} ProviderLock *sync.Mutex Provisioners map[string]ResourceProvisionerFactory ProvisionerCache map[string]ResourceProvisioner ProvisionerLock *sync.Mutex DiffValue *Diff DiffLock *sync.RWMutex StateValue *State StateLock *sync.RWMutex // contains filtered or unexported fields }
BuiltinEvalContext is an EvalContext implementation that is used by Terraform by default.
func (*BuiltinEvalContext) CloseProvider ¶
func (ctx *BuiltinEvalContext) CloseProvider(n string) error
func (*BuiltinEvalContext) CloseProvisioner ¶
func (ctx *BuiltinEvalContext) CloseProvisioner(n string) error
func (*BuiltinEvalContext) ConfigureProvider ¶
func (ctx *BuiltinEvalContext) ConfigureProvider( n string, cfg *ResourceConfig) error
func (*BuiltinEvalContext) Hook ¶
func (ctx *BuiltinEvalContext) Hook(fn func(Hook) (HookAction, error)) error
func (*BuiltinEvalContext) InitProvider ¶
func (ctx *BuiltinEvalContext) InitProvider(n string) (ResourceProvider, error)
func (*BuiltinEvalContext) InitProvisioner ¶
func (ctx *BuiltinEvalContext) InitProvisioner( n string) (ResourceProvisioner, error)
func (*BuiltinEvalContext) Input ¶
func (ctx *BuiltinEvalContext) Input() UIInput
func (*BuiltinEvalContext) Interpolate ¶
func (ctx *BuiltinEvalContext) Interpolate( cfg *config.RawConfig, r *Resource) (*ResourceConfig, error)
func (*BuiltinEvalContext) ParentProviderConfig ¶
func (ctx *BuiltinEvalContext) ParentProviderConfig(n string) *ResourceConfig
func (*BuiltinEvalContext) Path ¶
func (ctx *BuiltinEvalContext) Path() []string
func (*BuiltinEvalContext) Provider ¶
func (ctx *BuiltinEvalContext) Provider(n string) ResourceProvider
func (*BuiltinEvalContext) ProviderInput ¶
func (ctx *BuiltinEvalContext) ProviderInput(n string) map[string]interface{}
func (*BuiltinEvalContext) Provisioner ¶
func (ctx *BuiltinEvalContext) Provisioner(n string) ResourceProvisioner
func (*BuiltinEvalContext) SetProviderConfig ¶
func (ctx *BuiltinEvalContext) SetProviderConfig( n string, cfg *ResourceConfig) error
func (*BuiltinEvalContext) SetProviderInput ¶
func (ctx *BuiltinEvalContext) SetProviderInput(n string, c map[string]interface{})
func (*BuiltinEvalContext) SetVariables ¶
func (ctx *BuiltinEvalContext) SetVariables(n string, vs map[string]string)
type BuiltinGraphBuilder ¶
type BuiltinGraphBuilder struct { // Root is the root module of the graph to build. Root *module.Tree // Diff is the diff. The proper module diffs will be looked up. Diff *Diff // State is the global state. The proper module states will be looked // up by graph path. State *State // Providers is the list of providers supported. Providers []string // Provisioners is the list of provisioners supported. Provisioners []string // Targets is the user-specified list of resources to target. Targets []string // Destroy is set to true when we're in a `terraform destroy` or a // `terraform plan -destroy` Destroy bool // Determines whether the GraphBuilder should perform graph validation before // returning the Graph. Generally you want this to be done, except when you'd // like to inspect a problematic graph. Validate bool // Verbose is set to true when the graph should be built "worst case", // skipping any prune steps. This is used for early cycle detection during // Validate and for manual inspection via `terraform graph -verbose`. Verbose bool }
BuiltinGraphBuilder is responsible for building the complete graph that Terraform uses for execution. It is an opinionated builder that defines the step order required to build a complete graph as is used and expected by Terraform.
If you require a custom graph, you'll have to build it up manually on your own by building a new GraphBuilder implementation.
func (*BuiltinGraphBuilder) Build ¶
func (b *BuiltinGraphBuilder) Build(path []string) (*Graph, error)
Build builds the graph according to the steps returned by Steps.
func (*BuiltinGraphBuilder) Steps ¶
func (b *BuiltinGraphBuilder) Steps(path []string) []GraphTransformer
Steps returns the ordered list of GraphTransformers that must be executed to build a complete graph.
type CallbackUIOutput ¶
type CallbackUIOutput struct {
OutputFn func(string)
}
func (*CallbackUIOutput) Output ¶
func (o *CallbackUIOutput) Output(v string)
type CloseProviderTransformer ¶
type CloseProviderTransformer struct{}
CloseProviderTransformer is a GraphTransformer that adds nodes to the graph that will close open provider connections that aren't needed anymore. A provider connection is not needed anymore once all depended resources in the graph are evaluated.
func (*CloseProviderTransformer) Transform ¶
func (t *CloseProviderTransformer) Transform(g *Graph) error
type CloseProvisionerTransformer ¶
type CloseProvisionerTransformer struct{}
CloseProvisionerTransformer is a GraphTransformer that adds nodes to the graph that will close open provisioner connections that aren't needed anymore. A provisioner connection is not needed anymore once all depended resources in the graph are evaluated.
func (*CloseProvisionerTransformer) Transform ¶
func (t *CloseProvisionerTransformer) Transform(g *Graph) error
type ConfigTransformer ¶
ConfigTransformer is a GraphTransformer that adds the configuration to the graph. The module used to configure this transformer must be the root module. We'll look up the child module by the Path in the Graph.
func (*ConfigTransformer) Transform ¶
func (t *ConfigTransformer) Transform(g *Graph) error
type Context ¶
type Context struct {
// contains filtered or unexported fields
}
Context represents all the context that Terraform needs in order to perform operations on infrastructure. This structure is built using NewContext. See the documentation for that.
func NewContext ¶
func NewContext(opts *ContextOpts) *Context
NewContext creates a new Context structure.
Once a Context is creator, the pointer values within ContextOpts should not be mutated in any way, since the pointers are copied, not the values themselves.
func (*Context) Apply ¶
Apply applies the changes represented by this context and returns the resulting state.
In addition to returning the resulting state, this context is updated with the latest state.
func (*Context) Graph ¶
func (c *Context) Graph(g *ContextGraphOpts) (*Graph, error)
Graph returns the graph for this config.
func (*Context) Input ¶
Input asks for input to fill variables and provider configurations. This modifies the configuration in-place, so asking for Input twice may result in different UI output showing different current values.
func (*Context) Plan ¶
Plan generates an execution plan for the given context.
The execution plan encapsulates the context and can be stored in order to reinstantiate a context later for Apply.
Plan also updates the diff of this context to be the diff generated by the plan, so Apply can be called after.
func (*Context) Refresh ¶
Refresh goes through all the resources in the state and refreshes them to their latest state. This will update the state that this context works with, along with returning it.
Even in the case an error is returned, the state will be returned and will potentially be partially updated.
func (*Context) SetVariable ¶
SetVariable sets a variable after a context has already been built.
func (*Context) Stop ¶
func (c *Context) Stop()
Stop stops the running task.
Stop will block until the task completes.
type ContextGraphOpts ¶
type ContextGraphWalker ¶
type ContextGraphWalker struct { NullGraphWalker // Configurable values Context *Context Operation walkOperation // Outputs, do not set these. Do not read these while the graph // is being walked. ValidationWarnings []string ValidationErrors []error // contains filtered or unexported fields }
ContextGraphWalker is the GraphWalker implementation used with the Context struct to walk and evaluate the graph.
func (*ContextGraphWalker) EnterEvalTree ¶
func (w *ContextGraphWalker) EnterEvalTree(v dag.Vertex, n EvalNode) EvalNode
func (*ContextGraphWalker) EnterPath ¶
func (w *ContextGraphWalker) EnterPath(path []string) EvalContext
func (*ContextGraphWalker) ExitEvalTree ¶
func (w *ContextGraphWalker) ExitEvalTree( v dag.Vertex, output interface{}, err error) error
type ContextOpts ¶
type ContextOpts struct { Destroy bool Diff *Diff Hooks []Hook Module *module.Tree Parallelism int State *State Providers map[string]ResourceProviderFactory Provisioners map[string]ResourceProvisionerFactory Targets []string Variables map[string]string UIInput UIInput }
ContextOpts are the user-configurable options to create a context with NewContext.
type CreateBeforeDestroyTransformer ¶
type CreateBeforeDestroyTransformer struct{}
CreateBeforeDestroyTransformer is a GraphTransformer that modifies the destroys of some nodes so that the creation happens before the destroy.
func (*CreateBeforeDestroyTransformer) Transform ¶
func (t *CreateBeforeDestroyTransformer) Transform(g *Graph) error
type DeposedTransformer ¶
type DeposedTransformer struct { // State is the global state. We'll automatically find the correct // ModuleState based on the Graph.Path that is being transformed. State *State // View, if non-empty, is the ModuleState.View used around the state // to find deposed resources. View string }
DeposedTransformer is a GraphTransformer that adds deposed resources to the graph.
func (*DeposedTransformer) Transform ¶
func (t *DeposedTransformer) Transform(g *Graph) error
type DestroyTransformer ¶
type DestroyTransformer struct {
FullDestroy bool
}
DestroyTransformer is a GraphTransformer that creates the destruction nodes for things that _might_ be destroyed.
func (*DestroyTransformer) Transform ¶
func (t *DestroyTransformer) Transform(g *Graph) error
type Diff ¶
type Diff struct { // Modules contains all the modules that have a diff Modules []*ModuleDiff }
Diff trackes the changes that are necessary to apply a configuration to an existing infrastructure.
func (*Diff) AddModule ¶
func (d *Diff) AddModule(path []string) *ModuleDiff
AddModule adds the module with the given path to the diff.
This should be the preferred method to add module diffs since it allows us to optimize lookups later as well as control sorting.
func (*Diff) ModuleByPath ¶
func (d *Diff) ModuleByPath(path []string) *ModuleDiff
ModuleByPath is used to lookup the module diff for the given path. This should be the prefered lookup mechanism as it allows for future lookup optimizations.
func (*Diff) RootModule ¶
func (d *Diff) RootModule() *ModuleDiff
RootModule returns the ModuleState for the root module
type DiffAttrType ¶
type DiffAttrType byte
DiffAttrType is an enum type that says whether a resource attribute diff is an input attribute (comes from the configuration) or an output attribute (comes as a result of applying the configuration). An example input would be "ami" for AWS and an example output would be "private_ip".
const ( DiffAttrUnknown DiffAttrType = iota DiffAttrInput DiffAttrOutput )
type DiffChangeType ¶
type DiffChangeType byte
DiffChangeType is an enum with the kind of changes a diff has planned.
const ( DiffInvalid DiffChangeType = iota DiffNone DiffCreate DiffUpdate DiffDestroy DiffDestroyCreate )
type DisableProviderTransformer ¶
type DisableProviderTransformer struct{}
DisableProviderTransformer "disables" any providers that are only depended on by modules.
func (*DisableProviderTransformer) Transform ¶
func (t *DisableProviderTransformer) Transform(g *Graph) error
type EphemeralState ¶
type EphemeralState struct { // ConnInfo is used for the providers to export information which is // used to connect to the resource for provisioning. For example, // this could contain SSH or WinRM credentials. ConnInfo map[string]string `json:"-"` }
EphemeralState is used for transient state that is only kept in-memory
type EvalApply ¶
type EvalApply struct { Info *InstanceInfo State **InstanceState Diff **InstanceDiff Provider *ResourceProvider Output **InstanceState CreateNew *bool Error *error }
EvalApply is an EvalNode implementation that writes the diff to the full diff.
type EvalApplyPost ¶
type EvalApplyPost struct { Info *InstanceInfo State **InstanceState Error *error }
EvalApplyPost is an EvalNode implementation that does the post-Apply work
func (*EvalApplyPost) Eval ¶
func (n *EvalApplyPost) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalApplyProvisioners ¶
type EvalApplyProvisioners struct { Info *InstanceInfo State **InstanceState Resource *config.Resource InterpResource *Resource CreateNew *bool Tainted *bool Error *error }
EvalApplyProvisioners is an EvalNode implementation that executes the provisioners for a resource.
TODO(mitchellh): This should probably be split up into a more fine-grained ApplyProvisioner (single) that is looped over.
func (*EvalApplyProvisioners) Eval ¶
func (n *EvalApplyProvisioners) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalBuildProviderConfig ¶
type EvalBuildProviderConfig struct { Provider string Config **ResourceConfig Output **ResourceConfig }
EvalBuildProviderConfig outputs a *ResourceConfig that is properly merged with parents and inputs on top of what is configured in the file.
func (*EvalBuildProviderConfig) Eval ¶
func (n *EvalBuildProviderConfig) Eval(ctx EvalContext) (interface{}, error)
type EvalCheckPreventDestroy ¶
type EvalCheckPreventDestroy struct { Resource *config.Resource Diff **InstanceDiff }
EvalPreventDestroy is an EvalNode implementation that returns an error if a resource has PreventDestroy configured and the diff would destroy the resource.
func (*EvalCheckPreventDestroy) Eval ¶
func (n *EvalCheckPreventDestroy) Eval(ctx EvalContext) (interface{}, error)
type EvalClearPrimaryState ¶
type EvalClearPrimaryState struct {
Name string
}
EvalClearPrimaryState is an EvalNode implementation that clears the primary instance from a resource state.
func (*EvalClearPrimaryState) Eval ¶
func (n *EvalClearPrimaryState) Eval(ctx EvalContext) (interface{}, error)
type EvalCloseProvider ¶
type EvalCloseProvider struct {
Name string
}
EvalCloseProvider is an EvalNode implementation that closes provider connections that aren't needed anymore.
func (*EvalCloseProvider) Eval ¶
func (n *EvalCloseProvider) Eval(ctx EvalContext) (interface{}, error)
type EvalCloseProvisioner ¶
type EvalCloseProvisioner struct {
Name string
}
EvalCloseProvisioner is an EvalNode implementation that closes provisioner connections that aren't needed anymore.
func (*EvalCloseProvisioner) Eval ¶
func (n *EvalCloseProvisioner) Eval(ctx EvalContext) (interface{}, error)
type EvalCompareDiff ¶
type EvalCompareDiff struct { Info *InstanceInfo One, Two **InstanceDiff }
EvalCompareDiff is an EvalNode implementation that compares two diffs and errors if the diffs are not equal.
func (*EvalCompareDiff) Eval ¶
func (n *EvalCompareDiff) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalConfigProvider ¶
type EvalConfigProvider struct { Provider string Config **ResourceConfig }
EvalConfigProvider is an EvalNode implementation that configures a provider that is already initialized and retrieved.
func (*EvalConfigProvider) Eval ¶
func (n *EvalConfigProvider) Eval(ctx EvalContext) (interface{}, error)
type EvalContext ¶
type EvalContext interface { // Path is the current module path. Path() []string // Hook is used to call hook methods. The callback is called for each // hook and should return the hook action to take and the error. Hook(func(Hook) (HookAction, error)) error // Input is the UIInput object for interacting with the UI. Input() UIInput // InitProvider initializes the provider with the given name and // returns the implementation of the resource provider or an error. // // It is an error to initialize the same provider more than once. InitProvider(string) (ResourceProvider, error) // Provider gets the provider instance with the given name (already // initialized) or returns nil if the provider isn't initialized. Provider(string) ResourceProvider // CloseProvider closes provider connections that aren't needed anymore. CloseProvider(string) error // ConfigureProvider configures the provider with the given // configuration. This is a separate context call because this call // is used to store the provider configuration for inheritance lookups // with ParentProviderConfig(). ConfigureProvider(string, *ResourceConfig) error SetProviderConfig(string, *ResourceConfig) error ParentProviderConfig(string) *ResourceConfig // ProviderInput and SetProviderInput are used to configure providers // from user input. ProviderInput(string) map[string]interface{} SetProviderInput(string, map[string]interface{}) // InitProvisioner initializes the provisioner with the given name and // returns the implementation of the resource provisioner or an error. // // It is an error to initialize the same provisioner more than once. InitProvisioner(string) (ResourceProvisioner, error) // Provisioner gets the provisioner instance with the given name (already // initialized) or returns nil if the provisioner isn't initialized. Provisioner(string) ResourceProvisioner // CloseProvisioner closes provisioner connections that aren't needed // anymore. CloseProvisioner(string) error // Interpolate takes the given raw configuration and completes // the interpolations, returning the processed ResourceConfig. // // The resource argument is optional. If given, it is the resource // that is currently being acted upon. Interpolate(*config.RawConfig, *Resource) (*ResourceConfig, error) // SetVariables sets the variables for the module within // this context with the name n. This function call is additive: // the second parameter is merged with any previous call. SetVariables(string, map[string]string) // Diff returns the global diff as well as the lock that should // be used to modify that diff. Diff() (*Diff, *sync.RWMutex) // State returns the global state as well as the lock that should // be used to modify that state. State() (*State, *sync.RWMutex) }
EvalContext is the interface that is given to eval nodes to execute.
type EvalCountFixZeroOneBoundary ¶
EvalCountFixZeroOneBoundary is an EvalNode that fixes up the state when there is a resource count with zero/one boundary, i.e. fixing a resource named "aws_instance.foo" to "aws_instance.foo.0" and vice-versa.
func (*EvalCountFixZeroOneBoundary) Eval ¶
func (n *EvalCountFixZeroOneBoundary) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalDeleteOutput ¶
type EvalDeleteOutput struct {
Name string
}
EvalDeleteOutput is an EvalNode implementation that deletes an output from the state.
func (*EvalDeleteOutput) Eval ¶
func (n *EvalDeleteOutput) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalDeposeState ¶
type EvalDeposeState struct {
Name string
}
EvalDeposeState is an EvalNode implementation that takes the primary out of a state and makes it Deposed. This is done at the beginning of create-before-destroy calls so that the create can create while preserving the old state of the to-be-destroyed resource.
func (*EvalDeposeState) Eval ¶
func (n *EvalDeposeState) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalDiff ¶
type EvalDiff struct { Info *InstanceInfo Config **ResourceConfig Provider *ResourceProvider State **InstanceState Output **InstanceDiff OutputState **InstanceState }
EvalDiff is an EvalNode implementation that does a refresh for a resource.
type EvalDiffDestroy ¶
type EvalDiffDestroy struct { Info *InstanceInfo State **InstanceState Output **InstanceDiff }
EvalDiffDestroy is an EvalNode implementation that returns a plain destroy diff.
func (*EvalDiffDestroy) Eval ¶
func (n *EvalDiffDestroy) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalDiffDestroyModule ¶
type EvalDiffDestroyModule struct {
Path []string
}
EvalDiffDestroyModule is an EvalNode implementation that writes the diff to the full diff.
func (*EvalDiffDestroyModule) Eval ¶
func (n *EvalDiffDestroyModule) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalDiffTainted ¶
type EvalDiffTainted struct { Name string Diff **InstanceDiff }
EvalDiffTainted is an EvalNode implementation that writes the diff to the full diff.
func (*EvalDiffTainted) Eval ¶
func (n *EvalDiffTainted) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalEarlyExitError ¶
type EvalEarlyExitError struct{}
EvalEarlyExitError is a special error return value that can be returned by eval nodes that does an early exit.
func (EvalEarlyExitError) Error ¶
func (EvalEarlyExitError) Error() string
type EvalFilterDiff ¶
type EvalFilterDiff struct { // Input and output Diff **InstanceDiff Output **InstanceDiff // Destroy, if true, will only include a destroy diff if it is set. Destroy bool }
EvalFilterDiff is an EvalNode implementation that filters the diff according to some filter.
func (*EvalFilterDiff) Eval ¶
func (n *EvalFilterDiff) Eval(ctx EvalContext) (interface{}, error)
type EvalGetProvider ¶
type EvalGetProvider struct { Name string Output *ResourceProvider }
EvalGetProvider is an EvalNode implementation that retrieves an already initialized provider instance for the given name.
func (*EvalGetProvider) Eval ¶
func (n *EvalGetProvider) Eval(ctx EvalContext) (interface{}, error)
type EvalGetProvisioner ¶
type EvalGetProvisioner struct { Name string Output *ResourceProvisioner }
EvalGetProvisioner is an EvalNode implementation that retrieves an already initialized provisioner instance for the given name.
func (*EvalGetProvisioner) Eval ¶
func (n *EvalGetProvisioner) Eval(ctx EvalContext) (interface{}, error)
type EvalIf ¶
type EvalIf struct { If func(EvalContext) (bool, error) Then EvalNode Else EvalNode }
EvalIf is an EvalNode that is a conditional.
type EvalInitProvider ¶
type EvalInitProvider struct {
Name string
}
EvalInitProvider is an EvalNode implementation that initializes a provider and returns nothing. The provider can be retrieved again with the EvalGetProvider node.
func (*EvalInitProvider) Eval ¶
func (n *EvalInitProvider) Eval(ctx EvalContext) (interface{}, error)
type EvalInitProvisioner ¶
type EvalInitProvisioner struct {
Name string
}
EvalInitProvisioner is an EvalNode implementation that initializes a provisioner and returns nothing. The provisioner can be retrieved again with the EvalGetProvisioner node.
func (*EvalInitProvisioner) Eval ¶
func (n *EvalInitProvisioner) Eval(ctx EvalContext) (interface{}, error)
type EvalInputProvider ¶
type EvalInputProvider struct { Name string Provider *ResourceProvider Config **ResourceConfig }
EvalInputProvider is an EvalNode implementation that asks for input for the given provider configurations.
func (*EvalInputProvider) Eval ¶
func (n *EvalInputProvider) Eval(ctx EvalContext) (interface{}, error)
type EvalInstanceInfo ¶
type EvalInstanceInfo struct {
Info *InstanceInfo
}
EvalInstanceInfo is an EvalNode implementation that fills in the InstanceInfo as much as it can.
func (*EvalInstanceInfo) Eval ¶
func (n *EvalInstanceInfo) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalInterpolate ¶
type EvalInterpolate struct { Config *config.RawConfig Resource *Resource Output **ResourceConfig }
EvalInterpolate is an EvalNode implementation that takes a raw configuration and interpolates it.
func (*EvalInterpolate) Eval ¶
func (n *EvalInterpolate) Eval(ctx EvalContext) (interface{}, error)
type EvalNode ¶
type EvalNode interface { // Eval evaluates this node with the given context. The second parameter // are the argument values. These will match in order and 1-1 with the // results of the Args() return value. Eval(EvalContext) (interface{}, error) }
EvalNode is the interface that must be implemented by graph nodes to evaluate/execute.
func CloseProviderEvalTree ¶
CloseProviderEvalTree returns the evaluation tree for closing provider connections that aren't needed anymore.
func EvalFilter ¶
func EvalFilter(node EvalNode, fn EvalNodeFilterFunc) EvalNode
EvalFilter runs the filter on the given node and returns the final filtered value. This should be called rather than checking the EvalNode directly since this will properly handle EvalNodeFilterables.
type EvalNodeFilterFunc ¶
EvalNodeFilterFunc is the callback used to replace a node with another to node. To not do the replacement, just return the input node.
func EvalNodeFilterOp ¶
func EvalNodeFilterOp(op walkOperation) EvalNodeFilterFunc
EvalNodeFilterOp returns a filter function that filters nodes that include themselves in specific operations.
type EvalNodeFilterable ¶
type EvalNodeFilterable interface { EvalNode Filter(EvalNodeFilterFunc) }
EvalNodeFilterable is an interface that can be implemented by EvalNodes to allow filtering of sub-elements. Note that this isn't a common thing to implement and you probably don't need it.
type EvalNodeOpFilterable ¶
type EvalNodeOpFilterable interface {
IncludeInOp(walkOperation) bool
}
EvalNodeOpFilterable is an interface that EvalNodes can implement to be filterable by the operation that is being run on Terraform.
type EvalNoop ¶
type EvalNoop struct{}
EvalNoop is an EvalNode that does nothing.
func (EvalNoop) Eval ¶
func (EvalNoop) Eval(EvalContext) (interface{}, error)
type EvalOpFilter ¶
type EvalOpFilter struct { // Ops is the list of operations to include this node in. Ops []walkOperation // Node is the node to execute Node EvalNode }
EvalOpFilter is an EvalNode implementation that is a proxy to another node but filters based on the operation.
func (*EvalOpFilter) Eval ¶
func (n *EvalOpFilter) Eval(ctx EvalContext) (interface{}, error)
TODO: test
func (*EvalOpFilter) IncludeInOp ¶
func (n *EvalOpFilter) IncludeInOp(op walkOperation) bool
EvalNodeOpFilterable impl.
type EvalReadDiff ¶
type EvalReadDiff struct { Name string Diff **InstanceDiff }
EvalReadDiff is an EvalNode implementation that writes the diff to the full diff.
func (*EvalReadDiff) Eval ¶
func (n *EvalReadDiff) Eval(ctx EvalContext) (interface{}, error)
type EvalReadState ¶
type EvalReadState struct { Name string Output **InstanceState }
EvalReadState is an EvalNode implementation that reads the primary InstanceState for a specific resource out of the state.
func (*EvalReadState) Eval ¶
func (n *EvalReadState) Eval(ctx EvalContext) (interface{}, error)
type EvalReadStateDeposed ¶
type EvalReadStateDeposed struct { Name string Output **InstanceState // Index indicates which instance in the Deposed list to target, or -1 for // the last item. Index int }
EvalReadStateDeposed is an EvalNode implementation that reads the deposed InstanceState for a specific resource out of the state
func (*EvalReadStateDeposed) Eval ¶
func (n *EvalReadStateDeposed) Eval(ctx EvalContext) (interface{}, error)
type EvalReadStateTainted ¶
type EvalReadStateTainted struct { Name string Output **InstanceState // Index indicates which instance in the Tainted list to target, or -1 for // the last item. Index int }
EvalReadStateTainted is an EvalNode implementation that reads a tainted InstanceState for a specific resource out of the state
func (*EvalReadStateTainted) Eval ¶
func (n *EvalReadStateTainted) Eval(ctx EvalContext) (interface{}, error)
type EvalRefresh ¶
type EvalRefresh struct { Provider *ResourceProvider State **InstanceState Info *InstanceInfo Output **InstanceState }
EvalRefresh is an EvalNode implementation that does a refresh for a resource.
func (*EvalRefresh) Eval ¶
func (n *EvalRefresh) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalRequireState ¶
type EvalRequireState struct {
State **InstanceState
}
EvalRequireState is an EvalNode implementation that early exits if the state doesn't have an ID.
func (*EvalRequireState) Eval ¶
func (n *EvalRequireState) Eval(ctx EvalContext) (interface{}, error)
type EvalReturnError ¶
type EvalReturnError struct {
Error *error
}
EvalReturnError is an EvalNode implementation that returns an error if it is present.
This is useful for scenarios where an error has been captured by another EvalNode (like EvalApply) for special EvalTree-based error handling, and that handling has completed, so the error should be returned normally.
func (*EvalReturnError) Eval ¶
func (n *EvalReturnError) Eval(ctx EvalContext) (interface{}, error)
type EvalSequence ¶
type EvalSequence struct {
Nodes []EvalNode
}
EvalSequence is an EvalNode that evaluates in sequence.
func (*EvalSequence) Eval ¶
func (n *EvalSequence) Eval(ctx EvalContext) (interface{}, error)
func (*EvalSequence) Filter ¶
func (n *EvalSequence) Filter(fn EvalNodeFilterFunc)
EvalNodeFilterable impl.
type EvalSetProviderConfig ¶
type EvalSetProviderConfig struct { Provider string Config **ResourceConfig }
EvalSetProviderConfig sets the parent configuration for a provider without configuring that provider, validating it, etc.
func (*EvalSetProviderConfig) Eval ¶
func (n *EvalSetProviderConfig) Eval(ctx EvalContext) (interface{}, error)
type EvalSetVariables ¶
EvalSetVariables is an EvalNode implementation that sets the variables explicitly for interpolation later.
func (*EvalSetVariables) Eval ¶
func (n *EvalSetVariables) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalUndeposeState ¶
type EvalUndeposeState struct {
Name string
}
EvalUndeposeState is an EvalNode implementation that reads the InstanceState for a specific resource out of the state.
func (*EvalUndeposeState) Eval ¶
func (n *EvalUndeposeState) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalUpdateStateHook ¶
type EvalUpdateStateHook struct{}
EvalUpdateStateHook is an EvalNode implementation that calls the PostStateUpdate hook with the current state.
func (*EvalUpdateStateHook) Eval ¶
func (n *EvalUpdateStateHook) Eval(ctx EvalContext) (interface{}, error)
type EvalValidateCount ¶
EvalValidateCount is an EvalNode implementation that validates the count of a resource.
func (*EvalValidateCount) Eval ¶
func (n *EvalValidateCount) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalValidateError ¶
EvalValidateError is the error structure returned if there were validation errors.
func (*EvalValidateError) Error ¶
func (e *EvalValidateError) Error() string
type EvalValidateProvider ¶
type EvalValidateProvider struct { Provider *ResourceProvider Config **ResourceConfig }
EvalValidateProvider is an EvalNode implementation that validates the configuration of a resource.
func (*EvalValidateProvider) Eval ¶
func (n *EvalValidateProvider) Eval(ctx EvalContext) (interface{}, error)
type EvalValidateProvisioner ¶
type EvalValidateProvisioner struct { Provisioner *ResourceProvisioner Config **ResourceConfig }
EvalValidateProvisioner is an EvalNode implementation that validates the configuration of a resource.
func (*EvalValidateProvisioner) Eval ¶
func (n *EvalValidateProvisioner) Eval(ctx EvalContext) (interface{}, error)
type EvalValidateResource ¶
type EvalValidateResource struct { Provider *ResourceProvider Config **ResourceConfig ResourceName string ResourceType string }
EvalValidateResource is an EvalNode implementation that validates the configuration of a resource.
func (*EvalValidateResource) Eval ¶
func (n *EvalValidateResource) Eval(ctx EvalContext) (interface{}, error)
type EvalVariableBlock ¶
type EvalVariableBlock struct { Config **ResourceConfig Variables map[string]string }
EvalVariableBlock is an EvalNode implementation that evaluates the given configuration, and uses the final values as a way to set the mapping.
func (*EvalVariableBlock) Eval ¶
func (n *EvalVariableBlock) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalWriteDiff ¶
type EvalWriteDiff struct { Name string Diff **InstanceDiff }
EvalWriteDiff is an EvalNode implementation that writes the diff to the full diff.
func (*EvalWriteDiff) Eval ¶
func (n *EvalWriteDiff) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalWriteOutput ¶
EvalWriteOutput is an EvalNode implementation that writes the output for the given name to the current state.
func (*EvalWriteOutput) Eval ¶
func (n *EvalWriteOutput) Eval(ctx EvalContext) (interface{}, error)
TODO: test
type EvalWriteState ¶
type EvalWriteState struct { Name string ResourceType string Provider string Dependencies []string State **InstanceState }
EvalWriteState is an EvalNode implementation that writes the primary InstanceState for a specific resource into the state.
func (*EvalWriteState) Eval ¶
func (n *EvalWriteState) Eval(ctx EvalContext) (interface{}, error)
type EvalWriteStateDeposed ¶
type EvalWriteStateDeposed struct { Name string ResourceType string Provider string Dependencies []string State **InstanceState // Index indicates which instance in the Deposed list to target, or -1 to append. Index int }
EvalWriteStateDeposed is an EvalNode implementation that writes an InstanceState out to the Deposed list of a resource in the state.
func (*EvalWriteStateDeposed) Eval ¶
func (n *EvalWriteStateDeposed) Eval(ctx EvalContext) (interface{}, error)
type EvalWriteStateTainted ¶
type EvalWriteStateTainted struct { Name string ResourceType string Provider string Dependencies []string State **InstanceState // Index indicates which instance in the Tainted list to target, or -1 to append. Index int }
EvalWriteStateTainted is an EvalNode implementation that writes an InstanceState out to the Tainted list of a resource in the state.
func (*EvalWriteStateTainted) Eval ¶
func (n *EvalWriteStateTainted) Eval(ctx EvalContext) (interface{}, error)
EvalWriteStateTainted is an EvalNode implementation that writes the one of the tainted InstanceStates for a specific resource out of the state.
type ExpandTransform ¶
type ExpandTransform struct {
Builder GraphBuilder
}
ExpandTransform is a transformer that does a subgraph expansion at graph transform time (vs. at eval time). The benefit of earlier subgraph expansion is that errors with the graph build can be detected at an earlier stage.
type FlattenTransformer ¶
type FlattenTransformer struct{}
FlattenTransformer is a transformer that goes through the graph, finds subgraphs that can be flattened, and flattens them into this graph, removing the prior subgraph node.
func (*FlattenTransformer) Transform ¶
func (t *FlattenTransformer) Transform(g *Graph) error
type Graph ¶
type Graph struct { // Graph is the actual DAG. This is embedded so you can call the DAG // methods directly. dag.AcyclicGraph // Path is the path in the module tree that this Graph represents. // The root is represented by a single element list containing // RootModuleName Path []string // contains filtered or unexported fields }
Graph represents the graph that Terraform uses to represent resources and their dependencies. Each graph represents only one module, but it can contain further modules, which themselves have their own graph.
func (*Graph) ConnectDependent ¶
ConnectDependent connects a GraphNodeDependent to all of its GraphNodeDependables. It returns the list of dependents it was unable to connect to.
func (*Graph) ConnectDependents ¶
func (g *Graph) ConnectDependents()
ConnectDependents goes through the graph, connecting all the GraphNodeDependents to GraphNodeDependables. This is safe to call multiple times.
To get details on whether dependencies could be found/made, the more specific ConnectDependent should be used.
func (*Graph) ConnectFrom ¶
ConnectFrom creates an edge by finding the source from a DependableName and connecting it to the specific vertex.
func (*Graph) ConnectTo ¶
ConnectTo connects a vertex to a raw string of targets that are the result of DependableName, and returns the list of targets that are missing.
func (*Graph) Dependable ¶
Dependable finds the vertices in the graph that have the given dependable names and returns them.
func (*Graph) Walk ¶
func (g *Graph) Walk(walker GraphWalker) error
Walk walks the graph with the given walker for callbacks. The graph will be walked with full parallelism, so the walker should expect to be called in concurrently.
type GraphBuilder ¶
type GraphBuilder interface { // Build builds the graph for the given module path. It is up to // the interface implementation whether this build should expand // the graph or not. Build(path []string) (*Graph, error) }
GraphBuilder is an interface that can be implemented and used with Terraform to build the graph that Terraform walks.
type GraphDotOpts ¶
type GraphDotOpts struct { // Allows some nodes to decide to only show themselves when the user has // requested the "verbose" graph. Verbose bool // Highlight Cycles DrawCycles bool // How many levels to expand modules as we draw MaxDepth int }
GraphDotOpts are the options for generating a dot formatted Graph.
type GraphNodeAddressable ¶
type GraphNodeAddressable interface { ResourceAddress() *ResourceAddress // contains filtered or unexported methods }
GraphNodeAddressable is an interface that all graph nodes for the configuration graph need to implement in order to be be addressed / targeted properly.
type GraphNodeBasicSubgraph ¶
func (*GraphNodeBasicSubgraph) FlattenGraph ¶
func (n *GraphNodeBasicSubgraph) FlattenGraph() *Graph
func (*GraphNodeBasicSubgraph) Name ¶
func (n *GraphNodeBasicSubgraph) Name() string
func (*GraphNodeBasicSubgraph) Subgraph ¶
func (n *GraphNodeBasicSubgraph) Subgraph() *Graph
type GraphNodeCloseProvider ¶
type GraphNodeCloseProvider interface {
CloseProviderName() string
}
GraphNodeCloseProvider is an interface that nodes that can be a close provider must implement. The CloseProviderName returned is the name of the provider they satisfy.
type GraphNodeCloseProvisioner ¶
type GraphNodeCloseProvisioner interface {
CloseProvisionerName() string
}
GraphNodeCloseProvisioner is an interface that nodes that can be a close provisioner must implement. The CloseProvisionerName returned is the name of the provisioner they satisfy.
type GraphNodeConfigModule ¶
GraphNodeConfigModule represents a module within the configuration graph.
func (*GraphNodeConfigModule) ConfigType ¶
func (n *GraphNodeConfigModule) ConfigType() GraphNodeConfigType
func (*GraphNodeConfigModule) DependableName ¶
func (n *GraphNodeConfigModule) DependableName() []string
func (*GraphNodeConfigModule) DependentOn ¶
func (n *GraphNodeConfigModule) DependentOn() []string
func (*GraphNodeConfigModule) Expand ¶
func (n *GraphNodeConfigModule) Expand(b GraphBuilder) (GraphNodeSubgraph, error)
GraphNodeExpandable
func (*GraphNodeConfigModule) Name ¶
func (n *GraphNodeConfigModule) Name() string
func (*GraphNodeConfigModule) ProvidedBy ¶
func (n *GraphNodeConfigModule) ProvidedBy() []string
GraphNodeExpandable
type GraphNodeConfigOutput ¶
GraphNodeConfigOutput represents an output configured within the configuration.
func (*GraphNodeConfigOutput) ConfigType ¶
func (n *GraphNodeConfigOutput) ConfigType() GraphNodeConfigType
func (*GraphNodeConfigOutput) DependableName ¶
func (n *GraphNodeConfigOutput) DependableName() []string
func (*GraphNodeConfigOutput) DependentOn ¶
func (n *GraphNodeConfigOutput) DependentOn() []string
func (*GraphNodeConfigOutput) DestroyEdgeInclude ¶
func (n *GraphNodeConfigOutput) DestroyEdgeInclude(dag.Vertex) bool
GraphNodeDestroyEdgeInclude impl.
func (*GraphNodeConfigOutput) EvalTree ¶
func (n *GraphNodeConfigOutput) EvalTree() EvalNode
GraphNodeEvalable impl.
func (*GraphNodeConfigOutput) Flatten ¶
func (n *GraphNodeConfigOutput) Flatten(p []string) (dag.Vertex, error)
GraphNodeFlattenable impl.
func (*GraphNodeConfigOutput) Name ¶
func (n *GraphNodeConfigOutput) Name() string
func (*GraphNodeConfigOutput) OutputName ¶
func (n *GraphNodeConfigOutput) OutputName() string
func (*GraphNodeConfigOutput) Proxy ¶
func (n *GraphNodeConfigOutput) Proxy() bool
GraphNodeProxy impl.
type GraphNodeConfigOutputFlat ¶
type GraphNodeConfigOutputFlat struct { *GraphNodeConfigOutput PathValue []string }
Same as GraphNodeConfigOutput, but for flattening
func (*GraphNodeConfigOutputFlat) DependableName ¶
func (n *GraphNodeConfigOutputFlat) DependableName() []string
func (*GraphNodeConfigOutputFlat) DependentOn ¶
func (n *GraphNodeConfigOutputFlat) DependentOn() []string
func (*GraphNodeConfigOutputFlat) Name ¶
func (n *GraphNodeConfigOutputFlat) Name() string
func (*GraphNodeConfigOutputFlat) Path ¶
func (n *GraphNodeConfigOutputFlat) Path() []string
type GraphNodeConfigProvider ¶
type GraphNodeConfigProvider struct {
Provider *config.ProviderConfig
}
GraphNodeConfigProvider represents a configured provider within the configuration graph. These are only immediately in the graph when an explicit `provider` configuration block is in the configuration.
func (*GraphNodeConfigProvider) ConfigType ¶
func (n *GraphNodeConfigProvider) ConfigType() GraphNodeConfigType
func (*GraphNodeConfigProvider) DependableName ¶
func (n *GraphNodeConfigProvider) DependableName() []string
func (*GraphNodeConfigProvider) DependentOn ¶
func (n *GraphNodeConfigProvider) DependentOn() []string
func (*GraphNodeConfigProvider) DotNode ¶
func (n *GraphNodeConfigProvider) DotNode(name string, opts *GraphDotOpts) *dot.Node
GraphNodeDotter impl.
func (*GraphNodeConfigProvider) DotOrigin ¶
func (n *GraphNodeConfigProvider) DotOrigin() bool
GraphNodeDotterOrigin impl.
func (*GraphNodeConfigProvider) EvalTree ¶
func (n *GraphNodeConfigProvider) EvalTree() EvalNode
GraphNodeEvalable impl.
func (*GraphNodeConfigProvider) Flatten ¶
func (n *GraphNodeConfigProvider) Flatten(p []string) (dag.Vertex, error)
GraphNodeFlattenable impl.
func (*GraphNodeConfigProvider) Name ¶
func (n *GraphNodeConfigProvider) Name() string
func (*GraphNodeConfigProvider) ProviderConfig ¶
func (n *GraphNodeConfigProvider) ProviderConfig() *config.RawConfig
GraphNodeProvider implementation
func (*GraphNodeConfigProvider) ProviderName ¶
func (n *GraphNodeConfigProvider) ProviderName() string
GraphNodeProvider implementation
type GraphNodeConfigProviderFlat ¶
type GraphNodeConfigProviderFlat struct { *GraphNodeConfigProvider PathValue []string }
Same as GraphNodeConfigProvider, but for flattening
func (*GraphNodeConfigProviderFlat) DependableName ¶
func (n *GraphNodeConfigProviderFlat) DependableName() []string
func (*GraphNodeConfigProviderFlat) DependentOn ¶
func (n *GraphNodeConfigProviderFlat) DependentOn() []string
func (*GraphNodeConfigProviderFlat) Name ¶
func (n *GraphNodeConfigProviderFlat) Name() string
func (*GraphNodeConfigProviderFlat) Path ¶
func (n *GraphNodeConfigProviderFlat) Path() []string
func (*GraphNodeConfigProviderFlat) ProviderName ¶
func (n *GraphNodeConfigProviderFlat) ProviderName() string
type GraphNodeConfigResource ¶
type GraphNodeConfigResource struct { Resource *config.Resource // If this is set to anything other than destroyModeNone, then this // resource represents a resource that will be destroyed in some way. DestroyMode GraphNodeDestroyMode // Used during DynamicExpand to target indexes Targets []ResourceAddress Path []string }
GraphNodeConfigResource represents a resource within the config graph.
func (*GraphNodeConfigResource) ConfigType ¶
func (n *GraphNodeConfigResource) ConfigType() GraphNodeConfigType
func (*GraphNodeConfigResource) CountDependentOn ¶
func (n *GraphNodeConfigResource) CountDependentOn() []string
GraphNodeCountDependent impl.
func (*GraphNodeConfigResource) DependableName ¶
func (n *GraphNodeConfigResource) DependableName() []string
func (*GraphNodeConfigResource) DependentOn ¶
func (n *GraphNodeConfigResource) DependentOn() []string
GraphNodeDependent impl.
func (*GraphNodeConfigResource) DestroyNode ¶
func (n *GraphNodeConfigResource) DestroyNode(mode GraphNodeDestroyMode) GraphNodeDestroy
GraphNodeDestroyable
func (*GraphNodeConfigResource) DotNode ¶
func (n *GraphNodeConfigResource) DotNode(name string, opts *GraphDotOpts) *dot.Node
GraphNodeDotter impl.
func (*GraphNodeConfigResource) DynamicExpand ¶
func (n *GraphNodeConfigResource) DynamicExpand(ctx EvalContext) (*Graph, error)
GraphNodeDynamicExpandable impl.
func (*GraphNodeConfigResource) EvalTree ¶
func (n *GraphNodeConfigResource) EvalTree() EvalNode
GraphNodeEvalable impl.
func (*GraphNodeConfigResource) Flatten ¶
func (n *GraphNodeConfigResource) Flatten(p []string) (dag.Vertex, error)
GraphNodeFlattenable impl.
func (*GraphNodeConfigResource) Name ¶
func (n *GraphNodeConfigResource) Name() string
func (*GraphNodeConfigResource) ProvidedBy ¶
func (n *GraphNodeConfigResource) ProvidedBy() []string
GraphNodeProviderConsumer
func (*GraphNodeConfigResource) ProvisionedBy ¶
func (n *GraphNodeConfigResource) ProvisionedBy() []string
GraphNodeProvisionerConsumer
func (*GraphNodeConfigResource) ResourceAddress ¶
func (n *GraphNodeConfigResource) ResourceAddress() *ResourceAddress
GraphNodeAddressable impl.
func (*GraphNodeConfigResource) SetTargets ¶
func (n *GraphNodeConfigResource) SetTargets(targets []ResourceAddress)
GraphNodeTargetable impl.
func (*GraphNodeConfigResource) VarWalk ¶
func (n *GraphNodeConfigResource) VarWalk(fn func(config.InterpolatedVariable))
VarWalk calls a callback for all the variables that this resource depends on.
type GraphNodeConfigResourceFlat ¶
type GraphNodeConfigResourceFlat struct { *GraphNodeConfigResource PathValue []string }
Same as GraphNodeConfigResource, but for flattening
func (*GraphNodeConfigResourceFlat) DependableName ¶
func (n *GraphNodeConfigResourceFlat) DependableName() []string
func (*GraphNodeConfigResourceFlat) DependentOn ¶
func (n *GraphNodeConfigResourceFlat) DependentOn() []string
func (*GraphNodeConfigResourceFlat) DestroyNode ¶
func (n *GraphNodeConfigResourceFlat) DestroyNode(mode GraphNodeDestroyMode) GraphNodeDestroy
GraphNodeDestroyable impl.
func (*GraphNodeConfigResourceFlat) Name ¶
func (n *GraphNodeConfigResourceFlat) Name() string
func (*GraphNodeConfigResourceFlat) Path ¶
func (n *GraphNodeConfigResourceFlat) Path() []string
func (*GraphNodeConfigResourceFlat) ProvidedBy ¶
func (n *GraphNodeConfigResourceFlat) ProvidedBy() []string
func (*GraphNodeConfigResourceFlat) ProvisionedBy ¶
func (n *GraphNodeConfigResourceFlat) ProvisionedBy() []string
type GraphNodeConfigType ¶
type GraphNodeConfigType int
GraphNodeConfigType is an enum for the type of thing that a graph node represents from the configuration.
const ( GraphNodeConfigTypeInvalid GraphNodeConfigType = 0 GraphNodeConfigTypeResource GraphNodeConfigType = iota GraphNodeConfigTypeProvider GraphNodeConfigTypeModule GraphNodeConfigTypeOutput GraphNodeConfigTypeVariable )
func (GraphNodeConfigType) String ¶
func (i GraphNodeConfigType) String() string
type GraphNodeConfigVariable ¶
type GraphNodeConfigVariable struct { Variable *config.Variable // Value, if non-nil, will be used to set the value of the variable // during evaluation. If this is nil, evaluation will do nothing. // // Module is the name of the module to set the variables on. Module string Value *config.RawConfig // contains filtered or unexported fields }
GraphNodeConfigVariable represents a Variable in the config.
func (*GraphNodeConfigVariable) ConfigType ¶
func (n *GraphNodeConfigVariable) ConfigType() GraphNodeConfigType
func (*GraphNodeConfigVariable) DependableName ¶
func (n *GraphNodeConfigVariable) DependableName() []string
func (*GraphNodeConfigVariable) DependentOn ¶
func (n *GraphNodeConfigVariable) DependentOn() []string
func (*GraphNodeConfigVariable) DestroyEdgeInclude ¶
func (n *GraphNodeConfigVariable) DestroyEdgeInclude(v dag.Vertex) bool
GraphNodeDestroyEdgeInclude impl.
func (*GraphNodeConfigVariable) EvalTree ¶
func (n *GraphNodeConfigVariable) EvalTree() EvalNode
GraphNodeEvalable impl.
func (*GraphNodeConfigVariable) Flatten ¶
func (n *GraphNodeConfigVariable) Flatten(p []string) (dag.Vertex, error)
GraphNodeFlattenable impl.
func (*GraphNodeConfigVariable) Name ¶
func (n *GraphNodeConfigVariable) Name() string
func (*GraphNodeConfigVariable) Proxy ¶
func (n *GraphNodeConfigVariable) Proxy() bool
GraphNodeProxy impl.
func (*GraphNodeConfigVariable) VariableName ¶
func (n *GraphNodeConfigVariable) VariableName() string
type GraphNodeConfigVariableFlat ¶
type GraphNodeConfigVariableFlat struct { *GraphNodeConfigVariable PathValue []string }
func (*GraphNodeConfigVariableFlat) DependableName ¶
func (n *GraphNodeConfigVariableFlat) DependableName() []string
func (*GraphNodeConfigVariableFlat) DependentOn ¶
func (n *GraphNodeConfigVariableFlat) DependentOn() []string
func (*GraphNodeConfigVariableFlat) Name ¶
func (n *GraphNodeConfigVariableFlat) Name() string
func (*GraphNodeConfigVariableFlat) Path ¶
func (n *GraphNodeConfigVariableFlat) Path() []string
type GraphNodeCountDependent ¶
type GraphNodeCountDependent interface {
CountDependentOn() []string
}
GraphNodeCountDependent is implemented by resources for giving only the dependencies they have from the "count" field.
type GraphNodeDependable ¶
type GraphNodeDependable interface {
DependableName() []string
}
GraphNodeDependable is an interface which says that a node can be depended on (an edge can be placed between this node and another) according to the well-known name returned by DependableName.
DependableName can return multiple names it is known by.
type GraphNodeDependent ¶
type GraphNodeDependent interface {
DependentOn() []string
}
GraphNodeDependent is an interface which says that a node depends on another GraphNodeDependable by some name. By implementing this interface, Graph.ConnectDependents() can be called multiple times safely and efficiently.
type GraphNodeDestroy ¶
type GraphNodeDestroy interface { dag.Vertex // CreateBeforeDestroy is called to check whether this node // should be created before it is destroyed. The CreateBeforeDestroy // transformer uses this information to setup the graph. CreateBeforeDestroy() bool // CreateNode returns the node used for the create side of this // destroy. This must already exist within the graph. CreateNode() dag.Vertex }
GraphNodeDestroy is the interface that must implemented by nodes that destroy.
type GraphNodeDestroyEdgeInclude ¶
GraphNodeEdgeInclude can be implemented to not include something as an edge within the destroy graph. This is usually done because it might cause unnecessary cycles.
type GraphNodeDestroyMode ¶
type GraphNodeDestroyMode byte
const ( DestroyNone GraphNodeDestroyMode = 0 DestroyPrimary GraphNodeDestroyMode = 1 << iota DestroyTainted )
type GraphNodeDestroyPrunable ¶
type GraphNodeDestroyPrunable interface { // DestroyInclude is called to check if this node should be included // with the given state. The state and diff must NOT be modified. DestroyInclude(*ModuleDiff, *ModuleState) bool }
GraphNodeDestroyPrunable is the interface that can be implemented to signal that this node can be pruned depending on state.
type GraphNodeDestroyable ¶
type GraphNodeDestroyable interface { // DestroyNode returns the node used for the destroy with the given // mode. If this returns nil, then a destroy node for that mode // will not be added. DestroyNode(GraphNodeDestroyMode) GraphNodeDestroy }
GraphNodeDestroyable is the interface that nodes that can be destroyed must implement. This is used to automatically handle the creation of destroy nodes in the graph and the dependency ordering of those destroys.
type GraphNodeDotOrigin ¶
type GraphNodeDotOrigin interface {
DotOrigin() bool
}
type GraphNodeDotter ¶
type GraphNodeDotter interface { // Dot is called to return the dot formatting for the node. // The first parameter is the title of the node. // The second parameter includes user-specified options that affect the dot // graph. See GraphDotOpts below for details. DotNode(string, *GraphDotOpts) *dot.Node }
GraphNodeDotter can be implemented by a node to cause it to be included in the dot graph. The Dot method will be called which is expected to return a representation of this node.
type GraphNodeDynamicExpandable ¶
type GraphNodeDynamicExpandable interface {
DynamicExpand(EvalContext) (*Graph, error)
}
GraphNodeDynamicExpandable is an interface that nodes can implement to signal that they can be expanded at eval-time (hence dynamic). These nodes are given the eval context and are expected to return a new subgraph.
type GraphNodeEvalable ¶
type GraphNodeEvalable interface {
EvalTree() EvalNode
}
GraphNodeEvalable is the interface that graph nodes must implement to enable valuation.
type GraphNodeExpandable ¶
type GraphNodeExpandable interface {
Expand(GraphBuilder) (GraphNodeSubgraph, error)
}
GraphNodeExapndable is an interface that nodes can implement to signal that they can be expanded. Expanded nodes turn into GraphNodeSubgraph nodes within the graph.
type GraphNodeFlatGraph ¶
type GraphNodeFlatGraph interface {
FlattenGraph() *Graph
}
GraphNodeFlatGraph must be implemented by nodes that have subgraphs that they want flattened into the graph.
type GraphNodeFlattenable ¶
GraphNodeFlattenable must be implemented by all nodes that can be flattened. If a FlattenGraph returns any nodes that can't be flattened, it will be an error.
If Flatten returns nil for the Vertex along with a nil error, it will removed from the graph.
type GraphNodeOutput ¶
type GraphNodeOutput interface {
OutputName() string
}
GraphNodeOutput is an interface that nodes that are outputs must implement. The OutputName returned is the name of the output key that they manage.
type GraphNodeProvider ¶
GraphNodeProvider is an interface that nodes that can be a provider must implement. The ProviderName returned is the name of the provider they satisfy.
type GraphNodeProviderConsumer ¶
type GraphNodeProviderConsumer interface {
ProvidedBy() []string
}
GraphNodeProviderConsumer is an interface that nodes that require a provider must implement. ProvidedBy must return the name of the provider to use.
type GraphNodeProvisioner ¶
type GraphNodeProvisioner interface {
ProvisionerName() string
}
GraphNodeProvisioner is an interface that nodes that can be a provisioner must implement. The ProvisionerName returned is the name of the provisioner they satisfy.
type GraphNodeProvisionerConsumer ¶
type GraphNodeProvisionerConsumer interface {
ProvisionedBy() []string
}
GraphNodeProvisionerConsumer is an interface that nodes that require a provisioner must implement. ProvisionedBy must return the name of the provisioner to use.
type GraphNodeProxy ¶
type GraphNodeProxy interface {
Proxy() bool
}
GraphNodeProxy must be implemented by nodes that are proxies.
A node that is a proxy says that anything that depends on this node (the proxy), should also copy all the things that the proxy itself depends on. Example:
A => proxy => C
Should transform into (two edges):
A => proxy => C A => C
The purpose for this is because some transforms only look at direct edge connections and the proxy generally isn't meaningful in those situations, so we should complete all the edges.
type GraphNodeStateRepresentative ¶
type GraphNodeStateRepresentative interface {
StateId() []string
}
GraphNodeStateRepresentative is an interface that can be implemented by a node to say that it is representing a resource in the state.
type GraphNodeSubPath ¶
type GraphNodeSubPath interface {
Path() []string
}
GraphNodeSubPath says that a node is part of a graph with a different path, and the context should be adjusted accordingly.
type GraphNodeSubgraph ¶
type GraphNodeSubgraph interface {
Subgraph() *Graph
}
GraphNodeSubgraph is an interface a node can implement if it has a larger subgraph that should be walked.
type GraphNodeTargetable ¶
type GraphNodeTargetable interface { GraphNodeAddressable SetTargets([]ResourceAddress) }
GraphNodeTargetable is an interface for graph nodes to implement when they need to be told about incoming targets. This is useful for nodes that need to respect targets as they dynamically expand. Note that the list of targets provided will contain every target provided, and each implementing graph node must filter this list to targets considered relevant.
type GraphProxyEdge ¶
GraphProxyEdge is the edge that is used for proxied edges.
type GraphSemanticChecker ¶
GraphSemanticChecker is the interface that semantic checks across the entire Terraform graph implement.
The graph should NOT be modified by the semantic checker.
type GraphTransformer ¶
GraphTransformer is the interface that transformers implement. This interface is only for transforms that need entire graph visibility.
type GraphVertexTransformer ¶
GraphVertexTransformer is an interface that transforms a single Vertex within with graph. This is a specialization of GraphTransformer that makes it easy to do vertex replacement.
The GraphTransformer that runs through the GraphVertexTransformers is VertexTransformer.
type GraphWalker ¶
type GraphWalker interface { EnterPath([]string) EvalContext ExitPath([]string) EnterVertex(dag.Vertex) ExitVertex(dag.Vertex, error) EnterEvalTree(dag.Vertex, EvalNode) EvalNode ExitEvalTree(dag.Vertex, interface{}, error) error }
GraphWalker is an interface that can be implemented that when used with Graph.Walk will invoke the given callbacks under certain events.
type Hook ¶
type Hook interface { // PreApply and PostApply are called before and after a single // resource is applied. The error argument in PostApply is the // error, if any, that was returned from the provider Apply call itself. PreApply(*InstanceInfo, *InstanceState, *InstanceDiff) (HookAction, error) PostApply(*InstanceInfo, *InstanceState, error) (HookAction, error) // PreDiff and PostDiff are called before and after a single resource // resource is diffed. PreDiff(*InstanceInfo, *InstanceState) (HookAction, error) PostDiff(*InstanceInfo, *InstanceDiff) (HookAction, error) // Provisioning hooks // // All should be self-explanatory. ProvisionOutput is called with // output sent back by the provisioners. This will be called multiple // times as output comes in, but each call should represent a line of // output. The ProvisionOutput method cannot control whether the // hook continues running. PreProvisionResource(*InstanceInfo, *InstanceState) (HookAction, error) PostProvisionResource(*InstanceInfo, *InstanceState) (HookAction, error) PreProvision(*InstanceInfo, string) (HookAction, error) PostProvision(*InstanceInfo, string) (HookAction, error) ProvisionOutput(*InstanceInfo, string, string) // PreRefresh and PostRefresh are called before and after a single // resource state is refreshed, respectively. PreRefresh(*InstanceInfo, *InstanceState) (HookAction, error) PostRefresh(*InstanceInfo, *InstanceState) (HookAction, error) // PostStateUpdate is called after the state is updated. PostStateUpdate(*State) (HookAction, error) }
Hook is the interface that must be implemented to hook into various parts of Terraform, allowing you to inspect or change behavior at runtime.
There are MANY hook points into Terraform. If you only want to implement some hook points, but not all (which is the likely case), then embed the NilHook into your struct, which implements all of the interface but does nothing. Then, override only the functions you want to implement.
type HookAction ¶
type HookAction byte
HookAction is an enum of actions that can be taken as a result of a hook callback. This allows you to modify the behavior of Terraform at runtime.
const ( // HookActionContinue continues with processing as usual. HookActionContinue HookAction = iota // HookActionHalt halts immediately: no more hooks are processed // and the action that Terraform was about to take is cancelled. HookActionHalt )
type InputMode ¶
type InputMode byte
InputMode defines what sort of input will be asked for when Input is called on Context.
const ( // InputModeVar asks for all variables InputModeVar InputMode = 1 << iota // InputModeVarUnset asks for variables which are not set yet InputModeVarUnset // InputModeProvider asks for provider variables InputModeProvider // InputModeStd is the standard operating mode and asks for both variables // and providers. InputModeStd = InputModeVar | InputModeProvider )
type InputOpts ¶
type InputOpts struct { // Id is a unique ID for the question being asked that might be // used for logging or to look up a prior answered question. Id string // Query is a human-friendly question for inputting this value. Query string // Description is a description about what this option is. Be wary // that this will probably be in a terminal so split lines as you see // necessary. Description string // Default will be the value returned if no data is entered. Default string }
InputOpts are options for asking for input.
type InstanceDiff ¶
type InstanceDiff struct { Attributes map[string]*ResourceAttrDiff Destroy bool DestroyTainted bool }
InstanceDiff is the diff of a resource from some state to another.
func (*InstanceDiff) ChangeType ¶
func (d *InstanceDiff) ChangeType() DiffChangeType
ChangeType returns the DiffChangeType represented by the diff for this single instance.
func (*InstanceDiff) Empty ¶
func (d *InstanceDiff) Empty() bool
Empty returns true if this diff encapsulates no changes.
func (*InstanceDiff) GoString ¶
func (d *InstanceDiff) GoString() string
func (*InstanceDiff) RequiresNew ¶
func (d *InstanceDiff) RequiresNew() bool
RequiresNew returns true if the diff requires the creation of a new resource (implying the destruction of the old).
func (*InstanceDiff) Same ¶
func (d *InstanceDiff) Same(d2 *InstanceDiff) (bool, string)
Same checks whether or not two InstanceDiff's are the "same". When we say "same", it is not necessarily exactly equal. Instead, it is just checking that the same attributes are changing, a destroy isn't suddenly happening, etc.
type InstanceInfo ¶
type InstanceInfo struct { // Id is a unique name to represent this instance. This is not related // to InstanceState.ID in any way. Id string // ModulePath is the complete path of the module containing this // instance. ModulePath []string // Type is the resource type of this instance Type string }
InstanceInfo is used to hold information about the instance and/or resource being modified.
func (*InstanceInfo) HumanId ¶
func (i *InstanceInfo) HumanId() string
HumanId is a unique Id that is human-friendly and useful for UI elements.
type InstanceState ¶
type InstanceState struct { // A unique ID for this resource. This is opaque to Terraform // and is only meant as a lookup mechanism for the providers. ID string `json:"id"` // Attributes are basic information about the resource. Any keys here // are accessible in variable format within Terraform configurations: // ${resourcetype.name.attribute}. Attributes map[string]string `json:"attributes,omitempty"` // Ephemeral is used to store any state associated with this instance // that is necessary for the Terraform run to complete, but is not // persisted to a state file. Ephemeral EphemeralState `json:"-"` // Meta is a simple K/V map that is persisted to the State but otherwise // ignored by Terraform core. It's meant to be used for accounting by // external client code. Meta map[string]string `json:"meta,omitempty"` }
InstanceState is used to track the unique state information belonging to a given instance.
func (*InstanceState) Empty ¶
func (s *InstanceState) Empty() bool
func (*InstanceState) Equal ¶
func (s *InstanceState) Equal(other *InstanceState) bool
func (*InstanceState) GoString ¶
func (i *InstanceState) GoString() string
func (*InstanceState) MergeDiff ¶
func (s *InstanceState) MergeDiff(d *InstanceDiff) *InstanceState
MergeDiff takes a ResourceDiff and merges the attributes into this resource state in order to generate a new state. This new state can be used to provide updated attribute lookups for variable interpolation.
If the diff attribute requires computing the value, and hence won't be available until apply, the value is replaced with the computeID.
func (*InstanceState) String ¶
func (i *InstanceState) String() string
type InstanceType ¶
type InstanceType int
InstanceType is an enum of the various types of instances store in the State
const ( TypeInvalid InstanceType = iota TypePrimary TypeTainted TypeDeposed )
func ParseInstanceType ¶
func ParseInstanceType(s string) (InstanceType, error)
func (InstanceType) String ¶
func (i InstanceType) String() string
type Interpolater ¶
type Interpolater struct { Operation walkOperation Module *module.Tree State *State StateLock *sync.RWMutex Variables map[string]string }
Interpolater is the structure responsible for determining the values for interpolations such as `aws_instance.foo.bar`.
func (*Interpolater) Values ¶
func (i *Interpolater) Values( scope *InterpolationScope, vars map[string]config.InterpolatedVariable) (map[string]ast.Variable, error)
Values returns the values for all the variables in the given map.
type InterpolationScope ¶
InterpolationScope is the current scope of execution. This is required since some variables which are interpolated are dependent on what we're operating on and where we are.
type MissingProviderTransformer ¶
type MissingProviderTransformer struct { // Providers is the list of providers we support. Providers []string }
MissingProviderTransformer is a GraphTransformer that adds nodes for missing providers into the graph. Specifically, it creates provider configuration nodes for all the providers that we support. These are pruned later during an optimization pass.
func (*MissingProviderTransformer) Transform ¶
func (t *MissingProviderTransformer) Transform(g *Graph) error
type MissingProvisionerTransformer ¶
type MissingProvisionerTransformer struct { // Provisioners is the list of provisioners we support. Provisioners []string }
MissingProvisionerTransformer is a GraphTransformer that adds nodes for missing provisioners into the graph. Specifically, it creates provisioner configuration nodes for all the provisioners that we support. These are pruned later during an optimization pass.
func (*MissingProvisionerTransformer) Transform ¶
func (t *MissingProvisionerTransformer) Transform(g *Graph) error
type MockEvalContext ¶
type MockEvalContext struct { HookCalled bool HookHook Hook HookError error InputCalled bool InputInput UIInput InitProviderCalled bool InitProviderName string InitProviderProvider ResourceProvider InitProviderError error ProviderCalled bool ProviderName string ProviderProvider ResourceProvider CloseProviderCalled bool CloseProviderName string CloseProviderProvider ResourceProvider ProviderInputCalled bool ProviderInputName string ProviderInputConfig map[string]interface{} SetProviderInputCalled bool SetProviderInputName string SetProviderInputConfig map[string]interface{} ConfigureProviderCalled bool ConfigureProviderName string ConfigureProviderConfig *ResourceConfig ConfigureProviderError error SetProviderConfigCalled bool SetProviderConfigName string SetProviderConfigConfig *ResourceConfig ParentProviderConfigCalled bool ParentProviderConfigName string ParentProviderConfigConfig *ResourceConfig InitProvisionerCalled bool InitProvisionerName string InitProvisionerProvisioner ResourceProvisioner InitProvisionerError error ProvisionerCalled bool ProvisionerName string ProvisionerProvisioner ResourceProvisioner CloseProvisionerCalled bool CloseProvisionerName string CloseProvisionerProvisioner ResourceProvisioner InterpolateCalled bool InterpolateConfig *config.RawConfig InterpolateResource *Resource InterpolateConfigResult *ResourceConfig InterpolateError error PathCalled bool PathPath []string SetVariablesCalled bool SetVariablesModule string SetVariablesVariables map[string]string DiffCalled bool DiffDiff *Diff DiffLock *sync.RWMutex StateCalled bool StateState *State StateLock *sync.RWMutex }
MockEvalContext is a mock version of EvalContext that can be used for tests.
func (*MockEvalContext) CloseProvider ¶
func (c *MockEvalContext) CloseProvider(n string) error
func (*MockEvalContext) CloseProvisioner ¶
func (c *MockEvalContext) CloseProvisioner(n string) error
func (*MockEvalContext) ConfigureProvider ¶
func (c *MockEvalContext) ConfigureProvider(n string, cfg *ResourceConfig) error
func (*MockEvalContext) Hook ¶
func (c *MockEvalContext) Hook(fn func(Hook) (HookAction, error)) error
func (*MockEvalContext) InitProvider ¶
func (c *MockEvalContext) InitProvider(n string) (ResourceProvider, error)
func (*MockEvalContext) InitProvisioner ¶
func (c *MockEvalContext) InitProvisioner(n string) (ResourceProvisioner, error)
func (*MockEvalContext) Input ¶
func (c *MockEvalContext) Input() UIInput
func (*MockEvalContext) Interpolate ¶
func (c *MockEvalContext) Interpolate( config *config.RawConfig, resource *Resource) (*ResourceConfig, error)
func (*MockEvalContext) ParentProviderConfig ¶
func (c *MockEvalContext) ParentProviderConfig(n string) *ResourceConfig
func (*MockEvalContext) Path ¶
func (c *MockEvalContext) Path() []string
func (*MockEvalContext) Provider ¶
func (c *MockEvalContext) Provider(n string) ResourceProvider
func (*MockEvalContext) ProviderInput ¶
func (c *MockEvalContext) ProviderInput(n string) map[string]interface{}
func (*MockEvalContext) Provisioner ¶
func (c *MockEvalContext) Provisioner(n string) ResourceProvisioner
func (*MockEvalContext) SetProviderConfig ¶
func (c *MockEvalContext) SetProviderConfig( n string, cfg *ResourceConfig) error
func (*MockEvalContext) SetProviderInput ¶
func (c *MockEvalContext) SetProviderInput(n string, cfg map[string]interface{})
func (*MockEvalContext) SetVariables ¶
func (c *MockEvalContext) SetVariables(n string, vs map[string]string)
type MockHook ¶
type MockHook struct { PreApplyCalled bool PreApplyInfo *InstanceInfo PreApplyDiff *InstanceDiff PreApplyState *InstanceState PreApplyReturn HookAction PreApplyError error PostApplyCalled bool PostApplyInfo *InstanceInfo PostApplyState *InstanceState PostApplyError error PostApplyReturn HookAction PostApplyReturnError error PreDiffCalled bool PreDiffInfo *InstanceInfo PreDiffState *InstanceState PreDiffReturn HookAction PreDiffError error PostDiffCalled bool PostDiffInfo *InstanceInfo PostDiffDiff *InstanceDiff PostDiffReturn HookAction PostDiffError error PreProvisionResourceCalled bool PreProvisionResourceInfo *InstanceInfo PreProvisionInstanceState *InstanceState PreProvisionResourceReturn HookAction PreProvisionResourceError error PostProvisionResourceCalled bool PostProvisionResourceInfo *InstanceInfo PostProvisionInstanceState *InstanceState PostProvisionResourceReturn HookAction PostProvisionResourceError error PreProvisionCalled bool PreProvisionInfo *InstanceInfo PreProvisionProvisionerId string PreProvisionReturn HookAction PreProvisionError error PostProvisionCalled bool PostProvisionInfo *InstanceInfo PostProvisionProvisionerId string PostProvisionReturn HookAction PostProvisionError error ProvisionOutputCalled bool ProvisionOutputInfo *InstanceInfo ProvisionOutputProvisionerId string ProvisionOutputMessage string PostRefreshCalled bool PostRefreshInfo *InstanceInfo PostRefreshState *InstanceState PostRefreshReturn HookAction PostRefreshError error PreRefreshCalled bool PreRefreshInfo *InstanceInfo PreRefreshState *InstanceState PreRefreshReturn HookAction PreRefreshError error PostStateUpdateCalled bool PostStateUpdateState *State PostStateUpdateReturn HookAction PostStateUpdateError error }
MockHook is an implementation of Hook that can be used for tests. It records all of its function calls.
func (*MockHook) PostApply ¶
func (h *MockHook) PostApply(n *InstanceInfo, s *InstanceState, e error) (HookAction, error)
func (*MockHook) PostDiff ¶
func (h *MockHook) PostDiff(n *InstanceInfo, d *InstanceDiff) (HookAction, error)
func (*MockHook) PostProvision ¶
func (h *MockHook) PostProvision(n *InstanceInfo, provId string) (HookAction, error)
func (*MockHook) PostProvisionResource ¶
func (h *MockHook) PostProvisionResource(n *InstanceInfo, s *InstanceState) (HookAction, error)
func (*MockHook) PostRefresh ¶
func (h *MockHook) PostRefresh(n *InstanceInfo, s *InstanceState) (HookAction, error)
func (*MockHook) PostStateUpdate ¶
func (h *MockHook) PostStateUpdate(s *State) (HookAction, error)
func (*MockHook) PreApply ¶
func (h *MockHook) PreApply(n *InstanceInfo, s *InstanceState, d *InstanceDiff) (HookAction, error)
func (*MockHook) PreDiff ¶
func (h *MockHook) PreDiff(n *InstanceInfo, s *InstanceState) (HookAction, error)
func (*MockHook) PreProvision ¶
func (h *MockHook) PreProvision(n *InstanceInfo, provId string) (HookAction, error)
func (*MockHook) PreProvisionResource ¶
func (h *MockHook) PreProvisionResource(n *InstanceInfo, s *InstanceState) (HookAction, error)
func (*MockHook) PreRefresh ¶
func (h *MockHook) PreRefresh(n *InstanceInfo, s *InstanceState) (HookAction, error)
func (*MockHook) ProvisionOutput ¶
func (h *MockHook) ProvisionOutput( n *InstanceInfo, provId string, msg string)
type MockResourceProvider ¶
type MockResourceProvider struct { sync.Mutex // Anything you want, in case you need to store extra data with the mock. Meta interface{} CloseCalled bool CloseError error InputCalled bool InputInput UIInput InputConfig *ResourceConfig InputReturnConfig *ResourceConfig InputReturnError error InputFn func(UIInput, *ResourceConfig) (*ResourceConfig, error) ApplyCalled bool ApplyInfo *InstanceInfo ApplyState *InstanceState ApplyDiff *InstanceDiff ApplyFn func(*InstanceInfo, *InstanceState, *InstanceDiff) (*InstanceState, error) ApplyReturn *InstanceState ApplyReturnError error ConfigureCalled bool ConfigureConfig *ResourceConfig ConfigureFn func(*ResourceConfig) error ConfigureReturnError error DiffCalled bool DiffInfo *InstanceInfo DiffState *InstanceState DiffDesired *ResourceConfig DiffFn func(*InstanceInfo, *InstanceState, *ResourceConfig) (*InstanceDiff, error) DiffReturn *InstanceDiff DiffReturnError error RefreshCalled bool RefreshInfo *InstanceInfo RefreshState *InstanceState RefreshFn func(*InstanceInfo, *InstanceState) (*InstanceState, error) RefreshReturn *InstanceState RefreshReturnError error ResourcesCalled bool ResourcesReturn []ResourceType ValidateCalled bool ValidateConfig *ResourceConfig ValidateFn func(*ResourceConfig) ([]string, []error) ValidateReturnWarns []string ValidateReturnErrors []error ValidateResourceFn func(string, *ResourceConfig) ([]string, []error) ValidateResourceCalled bool ValidateResourceType string ValidateResourceConfig *ResourceConfig ValidateResourceReturnWarns []string ValidateResourceReturnErrors []error }
MockResourceProvider implements ResourceProvider but mocks out all the calls for testing purposes.
func (*MockResourceProvider) Apply ¶
func (p *MockResourceProvider) Apply( info *InstanceInfo, state *InstanceState, diff *InstanceDiff) (*InstanceState, error)
func (*MockResourceProvider) Close ¶
func (p *MockResourceProvider) Close() error
func (*MockResourceProvider) Configure ¶
func (p *MockResourceProvider) Configure(c *ResourceConfig) error
func (*MockResourceProvider) Diff ¶
func (p *MockResourceProvider) Diff( info *InstanceInfo, state *InstanceState, desired *ResourceConfig) (*InstanceDiff, error)
func (*MockResourceProvider) Input ¶
func (p *MockResourceProvider) Input( input UIInput, c *ResourceConfig) (*ResourceConfig, error)
func (*MockResourceProvider) Refresh ¶
func (p *MockResourceProvider) Refresh( info *InstanceInfo, s *InstanceState) (*InstanceState, error)
func (*MockResourceProvider) Resources ¶
func (p *MockResourceProvider) Resources() []ResourceType
func (*MockResourceProvider) Validate ¶
func (p *MockResourceProvider) Validate(c *ResourceConfig) ([]string, []error)
func (*MockResourceProvider) ValidateResource ¶
func (p *MockResourceProvider) ValidateResource(t string, c *ResourceConfig) ([]string, []error)
type MockResourceProvisioner ¶
type MockResourceProvisioner struct { // Anything you want, in case you need to store extra data with the mock. Meta interface{} ApplyCalled bool ApplyOutput UIOutput ApplyState *InstanceState ApplyConfig *ResourceConfig ApplyFn func(*InstanceState, *ResourceConfig) error ApplyReturnError error ValidateCalled bool ValidateConfig *ResourceConfig ValidateFn func(c *ResourceConfig) ([]string, []error) ValidateReturnWarns []string ValidateReturnErrors []error }
MockResourceProvisioner implements ResourceProvisioner but mocks out all the calls for testing purposes.
func (*MockResourceProvisioner) Apply ¶
func (p *MockResourceProvisioner) Apply( output UIOutput, state *InstanceState, c *ResourceConfig) error
func (*MockResourceProvisioner) Validate ¶
func (p *MockResourceProvisioner) Validate(c *ResourceConfig) ([]string, []error)
type MockUIInput ¶
type MockUIInput struct { InputCalled bool InputOpts *InputOpts InputReturnMap map[string]string InputReturnString string InputReturnError error InputFn func(*InputOpts) (string, error) }
MockUIInput is an implementation of UIInput that can be used for tests.
type MockUIOutput ¶
MockUIOutput is an implementation of UIOutput that can be used for tests.
func (*MockUIOutput) Output ¶
func (o *MockUIOutput) Output(v string)
type ModuleDestroyTransformer ¶
type ModuleDestroyTransformer struct{}
ModuleDestroyTransformer is a GraphTransformer that adds a node to the graph that will just mark the full module for destroy in the destroy scenario.
func (*ModuleDestroyTransformer) Transform ¶
func (t *ModuleDestroyTransformer) Transform(g *Graph) error
type ModuleDiff ¶
type ModuleDiff struct { Path []string Resources map[string]*InstanceDiff Destroy bool // Set only by the destroy plan }
ModuleDiff tracks the differences between resources to apply within a single module.
func (*ModuleDiff) ChangeType ¶
func (d *ModuleDiff) ChangeType() DiffChangeType
ChangeType returns the type of changes that the diff for this module includes.
At a module level, this will only be DiffNone, DiffUpdate, DiffDestroy, or DiffCreate. If an instance within the module has a DiffDestroyCreate then this will register as a DiffCreate for a module.
func (*ModuleDiff) Empty ¶
func (d *ModuleDiff) Empty() bool
Empty returns true if the diff has no changes within this module.
func (*ModuleDiff) Instances ¶
func (d *ModuleDiff) Instances(id string) []*InstanceDiff
Instances returns the instance diffs for the id given. This can return multiple instance diffs if there are counts within the resource.
func (*ModuleDiff) IsRoot ¶
func (d *ModuleDiff) IsRoot() bool
IsRoot says whether or not this module diff is for the root module.
func (*ModuleDiff) String ¶
func (d *ModuleDiff) String() string
String outputs the diff in a long but command-line friendly output format that users can read to quickly inspect a diff.
type ModuleInputTransformer ¶
ModuleInputTransformer is a GraphTransformer that adds a node to the graph for setting the module input variables for the remainder of the graph.
func (*ModuleInputTransformer) Transform ¶
func (t *ModuleInputTransformer) Transform(g *Graph) error
type ModuleState ¶
type ModuleState struct { // Path is the import path from the root module. Modules imports are // always disjoint, so the path represents amodule tree Path []string `json:"path"` // Outputs declared by the module and maintained for each module // even though only the root module technically needs to be kept. // This allows operators to inspect values at the boundaries. Outputs map[string]string `json:"outputs"` // Resources is a mapping of the logically named resource to // the state of the resource. Each resource may actually have // N instances underneath, although a user only needs to think // about the 1:1 case. Resources map[string]*ResourceState `json:"resources"` // Dependencies are a list of things that this module relies on // existing to remain intact. For example: an module may depend // on a VPC ID given by an aws_vpc resource. // // Terraform uses this information to build valid destruction // orders and to warn the user if they're destroying a module that // another resource depends on. // // Things can be put into this list that may not be managed by // Terraform. If Terraform doesn't find a matching ID in the // overall state, then it assumes it isn't managed and doesn't // worry about it. Dependencies []string `json:"depends_on,omitempty"` }
ModuleState is used to track all the state relevant to a single module. Previous to Terraform 0.3, all state belonged to the "root" module.
func (*ModuleState) Equal ¶
func (m *ModuleState) Equal(other *ModuleState) bool
Equal tests whether one module state is equal to another.
func (*ModuleState) GoString ¶
func (m *ModuleState) GoString() string
func (*ModuleState) IsRoot ¶
func (m *ModuleState) IsRoot() bool
IsRoot says whether or not this module diff is for the root module.
func (*ModuleState) Orphans ¶
func (m *ModuleState) Orphans(c *config.Config) []string
Orphans returns a list of keys of resources that are in the State but aren't present in the configuration itself. Hence, these keys represent the state of resources that are orphans.
func (*ModuleState) String ¶
func (m *ModuleState) String() string
func (*ModuleState) View ¶
func (m *ModuleState) View(id string) *ModuleState
View returns a view with the given resource prefix.
type NilHook ¶
type NilHook struct{}
NilHook is a Hook implementation that does nothing. It exists only to simplify implementing hooks. You can embed this into your Hook implementation and only implement the functions you are interested in.
func (*NilHook) PostApply ¶
func (*NilHook) PostApply(*InstanceInfo, *InstanceState, error) (HookAction, error)
func (*NilHook) PostDiff ¶
func (*NilHook) PostDiff(*InstanceInfo, *InstanceDiff) (HookAction, error)
func (*NilHook) PostProvision ¶
func (*NilHook) PostProvision(*InstanceInfo, string) (HookAction, error)
func (*NilHook) PostProvisionResource ¶
func (*NilHook) PostProvisionResource(*InstanceInfo, *InstanceState) (HookAction, error)
func (*NilHook) PostRefresh ¶
func (*NilHook) PostRefresh(*InstanceInfo, *InstanceState) (HookAction, error)
func (*NilHook) PostStateUpdate ¶
func (*NilHook) PostStateUpdate(*State) (HookAction, error)
func (*NilHook) PreApply ¶
func (*NilHook) PreApply(*InstanceInfo, *InstanceState, *InstanceDiff) (HookAction, error)
func (*NilHook) PreDiff ¶
func (*NilHook) PreDiff(*InstanceInfo, *InstanceState) (HookAction, error)
func (*NilHook) PreProvision ¶
func (*NilHook) PreProvision(*InstanceInfo, string) (HookAction, error)
func (*NilHook) PreProvisionResource ¶
func (*NilHook) PreProvisionResource(*InstanceInfo, *InstanceState) (HookAction, error)
func (*NilHook) PreRefresh ¶
func (*NilHook) PreRefresh(*InstanceInfo, *InstanceState) (HookAction, error)
func (*NilHook) ProvisionOutput ¶
func (*NilHook) ProvisionOutput( *InstanceInfo, string, string)
type NullGraphWalker ¶
type NullGraphWalker struct{}
NullGraphWalker is a GraphWalker implementation that does nothing. This can be embedded within other GraphWalker implementations for easily implementing all the required functions.
func (NullGraphWalker) EnterEvalTree ¶
func (NullGraphWalker) EnterEvalTree(v dag.Vertex, n EvalNode) EvalNode
func (NullGraphWalker) EnterPath ¶
func (NullGraphWalker) EnterPath([]string) EvalContext
func (NullGraphWalker) EnterVertex ¶
func (NullGraphWalker) EnterVertex(dag.Vertex)
func (NullGraphWalker) ExitEvalTree ¶
func (NullGraphWalker) ExitEvalTree(dag.Vertex, interface{}, error) error
func (NullGraphWalker) ExitPath ¶
func (NullGraphWalker) ExitPath([]string)
func (NullGraphWalker) ExitVertex ¶
func (NullGraphWalker) ExitVertex(dag.Vertex, error)
type OrphanTransformer ¶
type OrphanTransformer struct { // State is the global state. We require the global state to // properly find module orphans at our path. State *State // Module is the root module. We'll look up the proper configuration // using the graph path. Module *module.Tree // Targets are user-specified resources to target. We need to be aware of // these so we don't improperly identify orphans when they've just been // filtered out of the graph via targeting. Targeting bool // View, if non-nil will set a view on the module state. View string }
OrphanTransformer is a GraphTransformer that adds orphans to the graph. This transformer adds both resource and module orphans.
func (*OrphanTransformer) Transform ¶
func (t *OrphanTransformer) Transform(g *Graph) error
type Plan ¶
type Plan struct { Diff *Diff Module *module.Tree State *State Vars map[string]string // contains filtered or unexported fields }
Plan represents a single Terraform execution plan, which contains all the information necessary to make an infrastructure change.
func ReadPlan ¶
ReadPlan reads a plan structure out of a reader in the format that was written by WritePlan.
func (*Plan) Context ¶
func (p *Plan) Context(opts *ContextOpts) *Context
Context returns a Context with the data encapsulated in this plan.
The following fields in opts are overridden by the plan: Config, Diff, State, Variables.
type PrefixUIInput ¶
PrefixUIInput is an implementation of UIInput that prefixes the ID with a string, allowing queries to be namespaced.
type ProviderTransformer ¶
type ProviderTransformer struct{}
ProviderTransformer is a GraphTransformer that maps resources to providers within the graph. This will error if there are any resources that don't map to proper resources.
func (*ProviderTransformer) Transform ¶
func (t *ProviderTransformer) Transform(g *Graph) error
type ProvisionerTransformer ¶
type ProvisionerTransformer struct{}
ProvisionerTransformer is a GraphTransformer that maps resources to provisioners within the graph. This will error if there are any resources that don't map to proper resources.
func (*ProvisionerTransformer) Transform ¶
func (t *ProvisionerTransformer) Transform(g *Graph) error
type ProvisionerUIOutput ¶
type ProvisionerUIOutput struct { Info *InstanceInfo Type string Hooks []Hook }
ProvisionerUIOutput is an implementation of UIOutput that calls a hook for the output so that the hooks can handle it.
func (*ProvisionerUIOutput) Output ¶
func (o *ProvisionerUIOutput) Output(msg string)
type ProxyTransformer ¶
type ProxyTransformer struct{}
ProxyTransformer is a transformer that goes through the graph, finds vertices that are marked as proxies, and connects through their dependents. See above for what a proxy is.
func (*ProxyTransformer) Transform ¶
func (t *ProxyTransformer) Transform(g *Graph) error
type PruneDestroyTransformer ¶
PruneDestroyTransformer is a GraphTransformer that removes the destroy nodes that aren't in the diff.
func (*PruneDestroyTransformer) Transform ¶
func (t *PruneDestroyTransformer) Transform(g *Graph) error
type PruneProviderTransformer ¶
type PruneProviderTransformer struct{}
PruneProviderTransformer is a GraphTransformer that prunes all the providers that aren't needed from the graph. A provider is unneeded if no resource or module is using that provider.
func (*PruneProviderTransformer) Transform ¶
func (t *PruneProviderTransformer) Transform(g *Graph) error
type PruneProvisionerTransformer ¶
type PruneProvisionerTransformer struct{}
PruneProvisionerTransformer is a GraphTransformer that prunes all the provisioners that aren't needed from the graph. A provisioner is unneeded if no resource or module is using that provisioner.
func (*PruneProvisionerTransformer) Transform ¶
func (t *PruneProvisionerTransformer) Transform(g *Graph) error
type RemoteState ¶
type RemoteState struct { // Type controls the client we use for the remote state Type string `json:"type"` // Config is used to store arbitrary configuration that // is type specific Config map[string]string `json:"config"` }
RemoteState is used to track the information about a remote state store that we push/pull state to.
func (*RemoteState) Empty ¶
func (r *RemoteState) Empty() bool
func (*RemoteState) Equals ¶
func (r *RemoteState) Equals(other *RemoteState) bool
func (*RemoteState) GoString ¶
func (r *RemoteState) GoString() string
type Resource ¶
type Resource struct { // These are all used by the new EvalNode stuff. Name string Type string CountIndex int // These aren't really used anymore anywhere, but we keep them around // since we haven't done a proper cleanup yet. Id string Info *InstanceInfo Config *ResourceConfig Dependencies []string Diff *InstanceDiff Provider ResourceProvider State *InstanceState Provisioners []*ResourceProvisionerConfig Flags ResourceFlag TaintedIndex int }
Resource encapsulates a resource, its configuration, its provider, its current state, and potentially a desired diff from the state it wants to reach.
type ResourceAddress ¶
type ResourceAddress struct { // Addresses a resource falling somewhere in the module path // When specified alone, addresses all resources within a module path Path []string // Addresses a specific resource that occurs in a list Index int InstanceType InstanceType Name string Type string }
ResourceAddress is a way of identifying an individual resource (or, eventually, a subset of resources) within the state. It is used for Targets.
func ParseResourceAddress ¶
func ParseResourceAddress(s string) (*ResourceAddress, error)
func (*ResourceAddress) Equals ¶
func (addr *ResourceAddress) Equals(raw interface{}) bool
type ResourceAttrDiff ¶
type ResourceAttrDiff struct { Old string // Old Value New string // New Value NewComputed bool // True if new value is computed (unknown currently) NewRemoved bool // True if this attribute is being removed NewExtra interface{} // Extra information for the provider RequiresNew bool // True if change requires new resource Type DiffAttrType }
ResourceAttrDiff is the diff of a single attribute of a resource.
func (*ResourceAttrDiff) GoString ¶
func (d *ResourceAttrDiff) GoString() string
type ResourceConfig ¶
type ResourceConfig struct { ComputedKeys []string Raw map[string]interface{} Config map[string]interface{} // contains filtered or unexported fields }
ResourceConfig holds the configuration given for a resource. This is done instead of a raw `map[string]interface{}` type so that rich methods can be added to it to make dealing with it easier.
func NewResourceConfig ¶
func NewResourceConfig(c *config.RawConfig) *ResourceConfig
NewResourceConfig creates a new ResourceConfig from a config.RawConfig.
func (*ResourceConfig) CheckSet ¶
func (c *ResourceConfig) CheckSet(keys []string) []error
CheckSet checks that the given list of configuration keys is properly set. If not, errors are returned for each unset key.
This is useful to be called in the Validate method of a ResourceProvider.
func (*ResourceConfig) Get ¶
func (c *ResourceConfig) Get(k string) (interface{}, bool)
Get looks up a configuration value by key and returns the value.
The second return value is true if the get was successful. Get will not succeed if the value is being computed.
func (*ResourceConfig) GetRaw ¶
func (c *ResourceConfig) GetRaw(k string) (interface{}, bool)
GetRaw looks up a configuration value by key and returns the value, from the raw, uninterpolated config.
The second return value is true if the get was successful. Get will not succeed if the value is being computed.
func (*ResourceConfig) IsComputed ¶
func (c *ResourceConfig) IsComputed(k string) bool
IsComputed returns whether the given key is computed or not.
func (*ResourceConfig) IsSet ¶
func (c *ResourceConfig) IsSet(k string) bool
IsSet checks if the key in the configuration is set. A key is set if it has a value or the value is being computed (is unknown currently).
This function should be used rather than checking the keys of the raw configuration itself, since a key may be omitted from the raw configuration if it is being computed.
type ResourceCountTransformer ¶
type ResourceCountTransformer struct { Resource *config.Resource Destroy bool Targets []ResourceAddress }
ResourceCountTransformer is a GraphTransformer that expands the count out for a specific resource.
func (*ResourceCountTransformer) Transform ¶
func (t *ResourceCountTransformer) Transform(g *Graph) error
type ResourceDependency ¶
type ResourceDependency struct { // ID of the resource that we depend on. This ID should map // directly to another ResourceState's ID. ID string }
ResourceDependency maps a resource to another resource that it depends on to remain intact and uncorrupted.
type ResourceFlag ¶
type ResourceFlag byte
ResourceKind specifies what kind of instance we're working with, whether its a primary instance, a tainted instance, or an orphan.
const ( FlagPrimary ResourceFlag = 1 << iota FlagTainted FlagOrphan FlagHasTainted FlagReplacePrimary FlagDeposed )
type ResourceProvider ¶
type ResourceProvider interface { // Input is called to ask the provider to ask the user for input // for completing the configuration if necesarry. // // This may or may not be called, so resource provider writers shouldn't // rely on this being available to set some default values for validate // later. Example of a situation where this wouldn't be called is if // the user is not using a TTY. Input(UIInput, *ResourceConfig) (*ResourceConfig, error) // Validate is called once at the beginning with the raw configuration // (no interpolation done) and can return a list of warnings and/or // errors. // // This is called once with the provider configuration only. It may not // be called at all if no provider configuration is given. // // This should not assume that any values of the configurations are valid. // The primary use case of this call is to check that required keys are // set. Validate(*ResourceConfig) ([]string, []error) // ValidateResource is called once at the beginning with the raw // configuration (no interpolation done) and can return a list of warnings // and/or errors. // // This is called once per resource. // // This should not assume any of the values in the resource configuration // are valid since it is possible they have to be interpolated still. // The primary use case of this call is to check that the required keys // are set and that the general structure is correct. ValidateResource(string, *ResourceConfig) ([]string, []error) // Configure configures the provider itself with the configuration // given. This is useful for setting things like access keys. // // This won't be called at all if no provider configuration is given. // // Configure returns an error if it occurred. Configure(*ResourceConfig) error // Resources returns all the available resource types that this provider // knows how to manage. Resources() []ResourceType // Apply applies a diff to a specific resource and returns the new // resource state along with an error. // // If the resource state given has an empty ID, then a new resource // is expected to be created. Apply( *InstanceInfo, *InstanceState, *InstanceDiff) (*InstanceState, error) // Diff diffs a resource versus a desired state and returns // a diff. Diff( *InstanceInfo, *InstanceState, *ResourceConfig) (*InstanceDiff, error) // Refresh refreshes a resource and updates all of its attributes // with the latest information. Refresh(*InstanceInfo, *InstanceState) (*InstanceState, error) }
ResourceProvider is an interface that must be implemented by any resource provider: the thing that creates and manages the resources in a Terraform configuration.
type ResourceProviderCloser ¶
type ResourceProviderCloser interface {
Close() error
}
ResourceProviderCloser is an interface that providers that can close connections that aren't needed anymore must implement.
type ResourceProviderFactory ¶
type ResourceProviderFactory func() (ResourceProvider, error)
ResourceProviderFactory is a function type that creates a new instance of a resource provider.
func ResourceProviderFactoryFixed ¶
func ResourceProviderFactoryFixed(p ResourceProvider) ResourceProviderFactory
ResourceProviderFactoryFixed is a helper that creates a ResourceProviderFactory that just returns some fixed provider.
type ResourceProvisioner ¶
type ResourceProvisioner interface { // Validate is called once at the beginning with the raw // configuration (no interpolation done) and can return a list of warnings // and/or errors. // // This is called once per resource. // // This should not assume any of the values in the resource configuration // are valid since it is possible they have to be interpolated still. // The primary use case of this call is to check that the required keys // are set and that the general structure is correct. Validate(*ResourceConfig) ([]string, []error) // Apply runs the provisioner on a specific resource and returns the new // resource state along with an error. Instead of a diff, the ResourceConfig // is provided since provisioners only run after a resource has been // newly created. Apply(UIOutput, *InstanceState, *ResourceConfig) error }
ResourceProvisioner is an interface that must be implemented by any resource provisioner: the thing that initializes resources in a Terraform configuration.
type ResourceProvisionerCloser ¶
type ResourceProvisionerCloser interface {
Close() error
}
ResourceProvisionerCloser is an interface that provisioners that can close connections that aren't needed anymore must implement.
type ResourceProvisionerConfig ¶
type ResourceProvisionerConfig struct { Type string Provisioner ResourceProvisioner Config *ResourceConfig RawConfig *config.RawConfig ConnInfo *config.RawConfig }
ResourceProvisionerConfig is used to pair a provisioner with its provided configuration. This allows us to use singleton instances of each ResourceProvisioner and to keep the relevant configuration instead of instantiating a new Provisioner for each resource.
type ResourceProvisionerFactory ¶
type ResourceProvisionerFactory func() (ResourceProvisioner, error)
ResourceProvisionerFactory is a function type that creates a new instance of a resource provisioner.
type ResourceState ¶
type ResourceState struct { // This is filled in and managed by Terraform, and is the resource // type itself such as "mycloud_instance". If a resource provider sets // this value, it won't be persisted. Type string `json:"type"` // Dependencies are a list of things that this resource relies on // existing to remain intact. For example: an AWS instance might // depend on a subnet (which itself might depend on a VPC, and so // on). // // Terraform uses this information to build valid destruction // orders and to warn the user if they're destroying a resource that // another resource depends on. // // Things can be put into this list that may not be managed by // Terraform. If Terraform doesn't find a matching ID in the // overall state, then it assumes it isn't managed and doesn't // worry about it. Dependencies []string `json:"depends_on,omitempty"` // Primary is the current active instance for this resource. // It can be replaced but only after a successful creation. // This is the instances on which providers will act. Primary *InstanceState `json:"primary"` // Tainted is used to track any underlying instances that // have been created but are in a bad or unknown state and // need to be cleaned up subsequently. In the // standard case, there is only at most a single instance. // However, in pathological cases, it is possible for the number // of instances to accumulate. Tainted []*InstanceState `json:"tainted,omitempty"` // Deposed is used in the mechanics of CreateBeforeDestroy: the existing // Primary is Deposed to get it out of the way for the replacement Primary to // be created by Apply. If the replacement Primary creates successfully, the // Deposed instance is cleaned up. If there were problems creating the // replacement, the instance remains in the Deposed list so it can be // destroyed in a future run. Functionally, Deposed instances are very // similar to Tainted instances in that Terraform is only tracking them in // order to remember to destroy them. Deposed []*InstanceState `json:"deposed,omitempty"` // Provider is used when a resource is connected to a provider with an alias. // If this string is empty, the resource is connected to the default provider, // e.g. "aws_instance" goes with the "aws" provider. // If the resource block contained a "provider" key, that value will be set here. Provider string `json:"provider,omitempty"` }
ResourceState holds the state of a resource that is used so that a provider can find and manage an existing resource as well as for storing attributes that are used to populate variables of child resources.
Attributes has attributes about the created resource that are queryable in interpolation: "${type.id.attr}"
Extra is just extra data that a provider can return that we store for later, but is not exposed in any way to the user.
func (*ResourceState) Equal ¶
func (s *ResourceState) Equal(other *ResourceState) bool
Equal tests whether two ResourceStates are equal.
func (*ResourceState) GoString ¶
func (s *ResourceState) GoString() string
func (*ResourceState) String ¶
func (s *ResourceState) String() string
func (*ResourceState) Taint ¶
func (r *ResourceState) Taint()
Taint takes the primary state and marks it as tainted. If there is no primary state, this does nothing.
type ResourceStateV1 ¶
type ResourceStateV1 struct { // This is filled in and managed by Terraform, and is the resource // type itself such as "mycloud_instance". If a resource provider sets // this value, it won't be persisted. Type string // A unique ID for this resource. This is opaque to Terraform // and is only meant as a lookup mechanism for the providers. ID string // Attributes are basic information about the resource. Any keys here // are accessible in variable format within Terraform configurations: // ${resourcetype.name.attribute}. Attributes map[string]string // ConnInfo is used for the providers to export information which is // used to connect to the resource for provisioning. For example, // this could contain SSH or WinRM credentials. ConnInfo map[string]string // Extra information that the provider can store about a resource. // This data is opaque, never shown to the user, and is sent back to // the provider as-is for whatever purpose appropriate. Extra map[string]interface{} // Dependencies are a list of things that this resource relies on // existing to remain intact. For example: an AWS instance might // depend on a subnet (which itself might depend on a VPC, and so // on). // // Terraform uses this information to build valid destruction // orders and to warn the user if they're destroying a resource that // another resource depends on. // // Things can be put into this list that may not be managed by // Terraform. If Terraform doesn't find a matching ID in the // overall state, then it assumes it isn't managed and doesn't // worry about it. Dependencies []ResourceDependency }
/ ResourceState holds the state of a resource that is used so that a provider can find and manage an existing resource as well as for storing attributes that are uesd to populate variables of child resources.
Attributes has attributes about the created resource that are queryable in interpolation: "${type.id.attr}"
Extra is just extra data that a provider can return that we store for later, but is not exposed in any way to the user.
func (*ResourceStateV1) GoString ¶
func (s *ResourceStateV1) GoString() string
func (*ResourceStateV1) MergeDiff ¶
func (s *ResourceStateV1) MergeDiff(d *InstanceDiff) *ResourceStateV1
MergeDiff takes a ResourceDiff and merges the attributes into this resource state in order to generate a new state. This new state can be used to provide updated attribute lookups for variable interpolation.
If the diff attribute requires computing the value, and hence won't be available until apply, the value is replaced with the computeID.
type ResourceType ¶
type ResourceType struct {
Name string
}
ResourceType is a type of resource that a resource provider can manage.
type RootTransformer ¶
type RootTransformer struct{}
RootTransformer is a GraphTransformer that adds a root to the graph.
func (*RootTransformer) Transform ¶
func (t *RootTransformer) Transform(g *Graph) error
type SemanticCheckModulesExist ¶
type SemanticCheckModulesExist struct{}
SemanticCheckModulesExist is an implementation of SemanticChecker that verifies that all the modules that are referenced in the graph exist.
type SemanticChecker ¶
SemanticChecker is the interface that semantic checks across the Terraform graph implement. Errors are accumulated. Even after an error is returned, child vertices in the graph will still be visited.
The graph should NOT be modified by the semantic checker.
The order in which vertices are visited is left unspecified, so the semantic checks should not rely on that.
type Semaphore ¶
type Semaphore chan struct{}
Semaphore is a wrapper around a channel to provide utility methods to clarify that we are treating the channel as a semaphore
func NewSemaphore ¶
NewSemaphore creates a semaphore that allows up to a given limit of simultaneous acquisitions
func (Semaphore) Acquire ¶
func (s Semaphore) Acquire()
Acquire is used to acquire an available slot. Blocks until available.
func (Semaphore) Release ¶
func (s Semaphore) Release()
Release is used to return a slot. Acquire must be called as a pre-condition.
func (Semaphore) TryAcquire ¶
TryAcquire is used to do a non-blocking acquire. Returns a bool indicating success
type State ¶
type State struct { // Version is the protocol version. Currently only "1". Version int `json:"version"` // Serial is incremented on any operation that modifies // the State file. It is used to detect potentially conflicting // updates. Serial int64 `json:"serial"` // Remote is used to track the metadata required to // pull and push state files from a remote storage endpoint. Remote *RemoteState `json:"remote,omitempty"` // Modules contains all the modules in a breadth-first order Modules []*ModuleState `json:"modules"` }
State keeps track of a snapshot state-of-the-world that Terraform can use to keep track of what real world resources it is actually managing. This is the latest format as of Terraform 0.3
func ReadState ¶
ReadState reads a state structure out of a reader in the format that was written by WriteState.
func (*State) AddModule ¶
func (s *State) AddModule(path []string) *ModuleState
AddModule adds the module with the given path to the state.
This should be the preferred method to add module states since it allows us to optimize lookups later as well as control sorting.
func (*State) Children ¶
func (s *State) Children(path []string) []*ModuleState
Children returns the ModuleStates that are direct children of the given path. If the path is "root", for example, then children returned might be "root.child", but not "root.child.grandchild".
func (*State) DeepCopy ¶
DeepCopy performs a deep copy of the state structure and returns a new structure.
func (*State) IncrementSerialMaybe ¶
IncrementSerialMaybe increments the serial number of this state if it different from the other state.
func (*State) IsRemote ¶
IsRemote returns true if State represents a state that exists and is remote.
func (*State) ModuleByPath ¶
func (s *State) ModuleByPath(path []string) *ModuleState
ModuleByPath is used to lookup the module state for the given path. This should be the prefered lookup mechanism as it allows for future lookup optimizations.
func (*State) ModuleOrphans ¶
ModuleOrphans returns all the module orphans in this state by returning their full paths. These paths can be used with ModuleByPath to return the actual state.
func (*State) RootModule ¶
func (s *State) RootModule() *ModuleState
RootModule returns the ModuleState for the root module
type StateV1 ¶
type StateV1 struct { Outputs map[string]string Resources map[string]*ResourceStateV1 Tainted map[string]struct{} // contains filtered or unexported fields }
StateV1 is used to represent the state of Terraform files before 0.3. It is automatically upgraded to a modern State representation on start.
func ReadStateV1 ¶
ReadStateV1 reads a state structure out of a reader in the format that was written by WriteState.
type TaintedTransformer ¶
type TaintedTransformer struct { // State is the global state. We'll automatically find the correct // ModuleState based on the Graph.Path that is being transformed. State *State // View, if non-empty, is the ModuleState.View used around the state // to find tainted resources. View string }
TaintedTransformer is a GraphTransformer that adds tainted resources to the graph.
func (*TaintedTransformer) Transform ¶
func (t *TaintedTransformer) Transform(g *Graph) error
type TargetsTransformer ¶
type TargetsTransformer struct { // List of targeted resource names specified by the user Targets []string // Set to true when we're in a `terraform destroy` or a // `terraform plan -destroy` Destroy bool }
TargetsTransformer is a GraphTransformer that, when the user specifies a list of resources to target, limits the graph to only those resources and their dependencies.
func (*TargetsTransformer) Transform ¶
func (t *TargetsTransformer) Transform(g *Graph) error
type TransitiveReductionTransformer ¶
type TransitiveReductionTransformer struct{}
TransitiveReductionTransformer is a GraphTransformer that performs finds the transitive reduction of the graph. For a definition of transitive reduction, see Wikipedia.
func (*TransitiveReductionTransformer) Transform ¶
func (t *TransitiveReductionTransformer) Transform(g *Graph) error
type UIInput ¶
UIInput is the interface that must be implemented to ask for input from this user. This should forward the request to wherever the user inputs things to ask for values.
type UIOutput ¶
type UIOutput interface {
Output(string)
}
UIOutput is the interface that must be implemented to output data to the end user.
type UnorderedSemanticCheckRunner ¶
type UnorderedSemanticCheckRunner struct {
Checks []SemanticChecker
}
UnorderedSemanticCheckRunner is an implementation of GraphSemanticChecker that runs a list of SemanticCheckers against the vertices of the graph in no specified order.
type VertexTransformer ¶
type VertexTransformer struct {
Transforms []GraphVertexTransformer
}
VertexTransformer is a GraphTransformer that transforms vertices using the GraphVertexTransformers. The Transforms are run in sequential order. If a transform replaces a vertex then the next transform will see the new vertex.
func (*VertexTransformer) Transform ¶
func (t *VertexTransformer) Transform(g *Graph) error
Source Files ¶
- context.go
- diff.go
- eval.go
- eval_apply.go
- eval_check_prevent_destroy.go
- eval_context.go
- eval_context_builtin.go
- eval_context_mock.go
- eval_count.go
- eval_diff.go
- eval_error.go
- eval_filter.go
- eval_filter_operation.go
- eval_if.go
- eval_interpolate.go
- eval_noop.go
- eval_output.go
- eval_provider.go
- eval_provisioner.go
- eval_refresh.go
- eval_resource.go
- eval_sequence.go
- eval_state.go
- eval_validate.go
- eval_variable.go
- evaltree_provider.go
- graph.go
- graph_builder.go
- graph_config_node.go
- graph_config_node_module.go
- graph_config_node_output.go
- graph_config_node_provider.go
- graph_config_node_resource.go
- graph_config_node_type.go
- graph_config_node_variable.go
- graph_dot.go
- graph_interface_subgraph.go
- graph_walk.go
- graph_walk_context.go
- graph_walk_operation.go
- graphnodeconfigtype_string.go
- hook.go
- hook_mock.go
- hook_stop.go
- instancetype.go
- instancetype_string.go
- interpolate.go
- path.go
- plan.go
- resource.go
- resource_address.go
- resource_provider.go
- resource_provider_mock.go
- resource_provisioner.go
- resource_provisioner_mock.go
- semantics.go
- state.go
- state_v1.go
- transform.go
- transform_config.go
- transform_deposed.go
- transform_destroy.go
- transform_expand.go
- transform_flatten.go
- transform_module.go
- transform_orphan.go
- transform_output.go
- transform_provider.go
- transform_provisioner.go
- transform_proxy.go
- transform_resource.go
- transform_root.go
- transform_tainted.go
- transform_targets.go
- transform_transitive_reduction.go
- transform_vertex.go
- ui_input.go
- ui_input_mock.go
- ui_input_prefix.go
- ui_output.go
- ui_output_callback.go
- ui_output_mock.go
- ui_output_provisioner.go
- util.go
- version.go
- walkoperation_string.go