terraform

package
Version: v0.8.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 15, 2017 License: MPL-2.0 Imports: 40 Imported by: 0

Documentation

Index

Constants

View Source
const RootModuleName = "root"

RootModuleName is the name given to the root module implicitly.

View Source
const (
	// StateVersion is the current version for our state file
	StateVersion = 3
)
View Source
const (
	// VarEnvPrefix is the prefix of variables that are read from
	// the environment to set variables here.
	VarEnvPrefix = "TF_VAR_"
)
View Source
const Version = "0.8.7"

The main version number that is being run at the moment.

View Source
const VersionHeader = "Terraform-Version"

VersionHeader is the header name used to send the current terraform version in http requests.

View Source
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

View Source
var GraphTypeMap = map[string]GraphType{
	"apply":        GraphTypeApply,
	"plan":         GraphTypePlan,
	"plan-destroy": GraphTypePlanDestroy,
	"legacy":       GraphTypeLegacy,
}

GraphTypeMap is a mapping of human-readable string to GraphType. This is useful to use as the mechanism for human input for configurable graph types.

View Source
var RootModulePath = []string{RootModuleName}

RootModulePath is the path for the root module.

View Source
var SemVersion = version.Must(version.NewVersion(Version))

SemVersion is an instance of version.Version. This has the secondary benefit of verifying during tests and init time that our version is a proper semantic version, which should always be the case.

Functions

func CloseDebugInfo added in v0.7.9

func CloseDebugInfo() error

CloseDebugInfo is the exported interface to Close the debug info handler. The debug handler needs to be closed before program exit, so we export this function to be deferred in the appropriate entrypoint for our executable.

func Eval added in v0.4.0

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 added in v0.4.0

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 *dag.DotOpts) (string, error)

GraphDot returns the dot formatting of a visual representation of the given Terraform graph.

func ParseResourceIndex added in v0.5.0

func ParseResourceIndex(s string) (int, error)

func ParseResourcePath added in v0.5.0

func ParseResourcePath(s string) []string

func PathCacheKey added in v0.4.0

func PathCacheKey(path []string) string

PathCacheKey returns a cache key for a module path.

TODO: test

func ProviderHasDataSource added in v0.7.0

func ProviderHasDataSource(p ResourceProvider, n string) bool

func ProviderHasResource added in v0.7.0

func ProviderHasResource(p ResourceProvider, n string) bool

func ReadStateV1 added in v0.3.0

func ReadStateV1(jsonBytes []byte) (*stateV1, error)

func ReferenceFromInterpolatedVar added in v0.7.8

func ReferenceFromInterpolatedVar(v config.InterpolatedVariable) []string

ReferenceFromInterpolatedVar returns the reference from this variable, or an empty string if there is no reference.

func ReferenceModulePath added in v0.8.0

func ReferenceModulePath(p []string) []string

Returns the reference name for a module path. The path "foo" would return "module.foo". If this is a deeply nested module, it will be every parent as well. For example: ["foo", "bar"] would return both "module.foo" and "module.foo.module.bar"

func ReferencesFromConfig added in v0.7.8

func ReferencesFromConfig(c *config.RawConfig) []string

ReferencesFromConfig returns the references that a configuration has based on the interpolated variables in a configuration.

func SetDebugInfo added in v0.7.9

func SetDebugInfo(path string) error

SetDebugInfo initializes the debug handler with a backing file in the provided directory. This must be called before any other terraform package operations or not at all. Once his is called, CloseDebugInfo should be called before program exit.

func Variables added in v0.7.1

func Variables(
	m *module.Tree,
	override map[string]interface{}) (map[string]interface{}, error)

Variables returns the fully loaded set of variables to use with ContextOpts and NewContext, loading any additional variables from the environment or any other sources.

The given module tree doesn't need to be loaded.

func VersionString added in v0.7.0

func VersionString() string

func WritePlan

func WritePlan(d *Plan, dst io.Writer) error

WritePlan writes a plan somewhere in a binary format.

func WriteState

func WriteState(d *State, dst io.Writer) error

WriteState writes a state somewhere in a binary format.

Types

type AddOutputOrphanTransformer added in v0.5.0

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.

NOTE: This is the _old_ way to add output orphans that is used with legacy graph builders. The new way is OrphanOutputTransformer.

func (*AddOutputOrphanTransformer) Transform added in v0.5.0

func (t *AddOutputOrphanTransformer) Transform(g *Graph) error

type ApplyGraphBuilder added in v0.7.8

type ApplyGraphBuilder struct {
	// Module is the root module for the graph to build.
	Module *module.Tree

	// Diff is the diff to apply.
	Diff *Diff

	// State is the current state
	State *State

	// Providers is the list of providers supported.
	Providers []string

	// Provisioners is the list of provisioners supported.
	Provisioners []string

	// Targets are resources to target. This is only required to make sure
	// unnecessary outputs aren't included in the apply graph. The plan
	// builder successfully handles targeting resources. In the future,
	// outputs should go into the diff so that this is unnecessary.
	Targets []string

	// DisableReduce, if true, will not reduce the graph. Great for testing.
	DisableReduce bool

	// Destroy, if true, represents a pure destroy operation
	Destroy bool

	// Validate will do structural validation of the graph.
	Validate bool
}

ApplyGraphBuilder implements GraphBuilder and is responsible for building a graph for applying a Terraform diff.

Because the graph is built from the diff (vs. the config or state), this helps ensure that the apply-time graph doesn't modify any resources that aren't explicitly in the diff. There are other scenarios where the diff can be deviated, so this is just one layer of protection.

func (*ApplyGraphBuilder) Build added in v0.7.8

func (b *ApplyGraphBuilder) Build(path []string) (*Graph, error)

See GraphBuilder

func (*ApplyGraphBuilder) Steps added in v0.7.8

func (b *ApplyGraphBuilder) Steps() []GraphTransformer

See GraphBuilder

type AttachProviderConfigTransformer added in v0.7.8

type AttachProviderConfigTransformer struct {
	Module *module.Tree // Module is the root module for the config
}

AttachProviderConfigTransformer goes through the graph and attaches provider configuration structures to nodes that implement the interfaces above.

The attached configuration structures are directly from the configuration. If they're going to be modified, a copy should be made.

func (*AttachProviderConfigTransformer) Transform added in v0.7.8

func (t *AttachProviderConfigTransformer) Transform(g *Graph) error

type AttachResourceConfigTransformer added in v0.7.8

type AttachResourceConfigTransformer struct {
	Module *module.Tree // Module is the root module for the config
}

AttachResourceConfigTransformer goes through the graph and attaches resource configuration structures to nodes that implement the interfaces above.

The attached configuration structures are directly from the configuration. If they're going to be modified, a copy should be made.

func (*AttachResourceConfigTransformer) Transform added in v0.7.8

func (t *AttachResourceConfigTransformer) Transform(g *Graph) error

type AttachStateTransformer added in v0.7.8

type AttachStateTransformer struct {
	State *State // State is the root state
}

AttachStateTransformer goes through the graph and attaches state to nodes that implement the interfaces above.

func (*AttachStateTransformer) Transform added in v0.7.8

func (t *AttachStateTransformer) Transform(g *Graph) error

type BasicGraphBuilder added in v0.4.0

type BasicGraphBuilder struct {
	Steps    []GraphTransformer
	Validate bool
	// Optional name to add to the graph debug log
	Name string
}

BasicGraphBuilder is a GraphBuilder that builds a graph out of a series of transforms and (optionally) validates the graph is a valid structure.

func (*BasicGraphBuilder) Build added in v0.4.0

func (b *BasicGraphBuilder) Build(path []string) (*Graph, error)

type BuiltinEvalContext added in v0.4.0

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]interface{}
	InterpolaterVarLock *sync.Mutex

	Components          contextComponentFactory
	Hooks               []Hook
	InputValue          UIInput
	ProviderCache       map[string]ResourceProvider
	ProviderConfigCache map[string]*ResourceConfig
	ProviderInputConfig map[string]map[string]interface{}
	ProviderLock        *sync.Mutex
	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 added in v0.6.0

func (ctx *BuiltinEvalContext) CloseProvider(n string) error

func (*BuiltinEvalContext) CloseProvisioner added in v0.6.0

func (ctx *BuiltinEvalContext) CloseProvisioner(n string) error

func (*BuiltinEvalContext) ConfigureProvider added in v0.4.0

func (ctx *BuiltinEvalContext) ConfigureProvider(
	n string, cfg *ResourceConfig) error

func (*BuiltinEvalContext) Diff added in v0.4.0

func (ctx *BuiltinEvalContext) Diff() (*Diff, *sync.RWMutex)

func (*BuiltinEvalContext) Hook added in v0.4.0

func (ctx *BuiltinEvalContext) Hook(fn func(Hook) (HookAction, error)) error

func (*BuiltinEvalContext) InitProvider added in v0.4.0

func (ctx *BuiltinEvalContext) InitProvider(n string) (ResourceProvider, error)

func (*BuiltinEvalContext) InitProvisioner added in v0.4.0

func (ctx *BuiltinEvalContext) InitProvisioner(
	n string) (ResourceProvisioner, error)

func (*BuiltinEvalContext) Input added in v0.4.0

func (ctx *BuiltinEvalContext) Input() UIInput

func (*BuiltinEvalContext) Interpolate added in v0.4.0

func (ctx *BuiltinEvalContext) Interpolate(
	cfg *config.RawConfig, r *Resource) (*ResourceConfig, error)

func (*BuiltinEvalContext) ParentProviderConfig added in v0.4.0

func (ctx *BuiltinEvalContext) ParentProviderConfig(n string) *ResourceConfig

func (*BuiltinEvalContext) Path added in v0.4.0

func (ctx *BuiltinEvalContext) Path() []string

func (*BuiltinEvalContext) Provider added in v0.4.0

func (ctx *BuiltinEvalContext) Provider(n string) ResourceProvider

func (*BuiltinEvalContext) ProviderInput added in v0.4.0

func (ctx *BuiltinEvalContext) ProviderInput(n string) map[string]interface{}

func (*BuiltinEvalContext) Provisioner added in v0.4.0

func (ctx *BuiltinEvalContext) Provisioner(n string) ResourceProvisioner

func (*BuiltinEvalContext) SetProviderConfig added in v0.4.1

func (ctx *BuiltinEvalContext) SetProviderConfig(
	n string, cfg *ResourceConfig) error

func (*BuiltinEvalContext) SetProviderInput added in v0.4.0

func (ctx *BuiltinEvalContext) SetProviderInput(n string, c map[string]interface{})

func (*BuiltinEvalContext) SetVariables added in v0.4.0

func (ctx *BuiltinEvalContext) SetVariables(n string, vs map[string]interface{})

func (*BuiltinEvalContext) State added in v0.4.0

func (ctx *BuiltinEvalContext) State() (*State, *sync.RWMutex)

type BuiltinGraphBuilder added in v0.4.0

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 added in v0.4.0

func (b *BuiltinGraphBuilder) Build(path []string) (*Graph, error)

Build builds the graph according to the steps returned by Steps.

func (*BuiltinGraphBuilder) Steps added in v0.4.0

func (b *BuiltinGraphBuilder) Steps(path []string) []GraphTransformer

Steps returns the ordered list of GraphTransformers that must be executed to build a complete graph.

type CBDEdgeTransformer added in v0.7.8

type CBDEdgeTransformer struct {
	// Module and State are only needed to look up dependencies in
	// any way possible. Either can be nil if not availabile.
	Module *module.Tree
	State  *State
}

CBDEdgeTransformer modifies the edges of CBD nodes that went through the DestroyEdgeTransformer to have the right dependencies. There are two real tasks here:

1. With CBD, the destroy edge is inverted: the destroy depends on
   the creation.

2. A_d must depend on resources that depend on A. This is to enable
   the destroy to only happen once nodes that depend on A successfully
   update to A. Example: adding a web server updates the load balancer
   before deleting the old web server.

func (*CBDEdgeTransformer) Transform added in v0.7.8

func (t *CBDEdgeTransformer) Transform(g *Graph) error

type CallbackUIOutput added in v0.3.0

type CallbackUIOutput struct {
	OutputFn func(string)
}

func (*CallbackUIOutput) Output added in v0.4.0

func (o *CallbackUIOutput) Output(v string)

type CloseProviderTransformer added in v0.6.0

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 added in v0.6.0

func (t *CloseProviderTransformer) Transform(g *Graph) error

type CloseProvisionerTransformer added in v0.6.0

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 added in v0.6.0

func (t *CloseProvisionerTransformer) Transform(g *Graph) error

type ConcreteProviderNodeFunc added in v0.8.0

type ConcreteProviderNodeFunc func(*NodeAbstractProvider) dag.Vertex

ConcreteProviderNodeFunc is a callback type used to convert an abstract provider to a concrete one of some type.

type ConcreteResourceNodeFunc added in v0.7.8

type ConcreteResourceNodeFunc func(*NodeAbstractResource) dag.Vertex

ConcreteResourceNodeFunc is a callback type used to convert an abstract resource to a concrete one of some type.

type ConfigTransformer added in v0.4.0

type ConfigTransformer struct {
	Concrete ConcreteResourceNodeFunc

	Module *module.Tree
}

ConfigTransformer is a GraphTransformer that adds all the resources from the configuration to the graph.

The module used to configure this transformer must be the root module.

Only resources are added to the graph. Variables, outputs, and providers must be added via other transforms.

Unlike ConfigTransformerOld, this transformer creates a graph with all resources including module resources, rather than creating module nodes that are then "flattened".

func (*ConfigTransformer) Transform added in v0.4.0

func (t *ConfigTransformer) Transform(g *Graph) error

type ConfigTransformerOld added in v0.7.10

type ConfigTransformerOld struct {
	Module *module.Tree
}

ConfigTransformerOld 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 (*ConfigTransformerOld) Transform added in v0.7.10

func (t *ConfigTransformerOld) 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.

Extra functions on Context can be found in context_*.go files.

func NewContext

func NewContext(opts *ContextOpts) (*Context, error)

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

func (c *Context) Apply() (*State, error)

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(typ GraphType, opts *ContextGraphOpts) (*Graph, error)

Graph returns the graph used for the given operation type.

The most extensive or complex graph type is GraphTypePlan.

func (*Context) Import added in v0.7.0

func (c *Context) Import(opts *ImportOpts) (*State, error)

Import takes already-created external resources and brings them under Terraform management. Import requires the exact type, name, and ID of the resources to import.

This operation is idempotent. If the requested resource is already imported, no changes are made to the state.

Further, this operation also gracefully handles partial state. If during an import there is a failure, all previously imported resources remain imported.

func (*Context) Input added in v0.3.0

func (c *Context) Input(mode InputMode) error

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) Interpolater added in v0.8.0

func (c *Context) Interpolater() *Interpolater

Interpolater returns an Interpolater built on a copy of the state that can be used to test interpolation values.

func (*Context) Module added in v0.4.0

func (c *Context) Module() *module.Tree

Module returns the module tree associated with this context.

func (*Context) Plan

func (c *Context) Plan() (*Plan, error)

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

func (c *Context) Refresh() (*State, error)

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 added in v0.4.0

func (c *Context) SetVariable(k string, v interface{})

SetVariable sets a variable after a context has already been built.

func (*Context) ShadowError added in v0.7.8

func (c *Context) ShadowError() error

ShadowError returns any errors caught during a shadow operation.

A shadow operation is an operation run in parallel to a real operation that performs the same tasks using new logic on copied state. The results are compared to ensure that the new logic works the same as the old logic. The shadow never affects the real operation or return values.

The result of the shadow operation are only available through this function call after a real operation is complete.

For API consumers of Context, you can safely ignore this function completely if you have no interest in helping report experimental feature errors to Terraform maintainers. Otherwise, please call this function after every operation and report this to the user.

IMPORTANT: Shadow errors are _never_ critical: they _never_ affect the real state or result of a real operation. They are purely informational to assist in future Terraform versions being more stable. Please message this effectively to the end user.

This must be called only when no other operation is running (refresh, plan, etc.). The result can be used in parallel to any other operation running.

func (*Context) Stop

func (c *Context) Stop()

Stop stops the running task.

Stop will block until the task completes.

func (*Context) Validate

func (c *Context) Validate() ([]string, []error)

Validate validates the configuration and returns any warnings or errors.

func (*Context) Variables added in v0.4.0

func (c *Context) Variables() map[string]interface{}

Variables will return the mapping of variables that were defined for this Context. If Input was called, this mapping may be different than what was given.

type ContextGraphOpts added in v0.5.0

type ContextGraphOpts struct {
	// If true, validates the graph structure (checks for cycles).
	Validate bool

	// Legacy graphs only: won't prune the graph
	Verbose bool
}

type ContextGraphWalker added in v0.4.0

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 added in v0.4.0

func (w *ContextGraphWalker) EnterEvalTree(v dag.Vertex, n EvalNode) EvalNode

func (*ContextGraphWalker) EnterPath added in v0.5.0

func (w *ContextGraphWalker) EnterPath(path []string) EvalContext

func (*ContextGraphWalker) ExitEvalTree added in v0.4.0

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
	StateFutureAllowed bool
	Providers          map[string]ResourceProviderFactory
	Provisioners       map[string]ResourceProvisionerFactory
	Shadow             bool
	Targets            []string
	Variables          map[string]interface{}

	UIInput UIInput
}

ContextOpts are the user-configurable options to create a context with NewContext.

type CountBoundaryTransformer added in v0.7.8

type CountBoundaryTransformer struct{}

CountBoundaryTransformer adds a node that depends on everything else so that it runs last in order to clean up the state for nodes that are on the "count boundary": "foo.0" when only one exists becomes "foo"

func (*CountBoundaryTransformer) Transform added in v0.7.8

func (t *CountBoundaryTransformer) Transform(g *Graph) error

type CreateBeforeDestroyTransformer added in v0.4.0

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 added in v0.4.0

func (t *CreateBeforeDestroyTransformer) Transform(g *Graph) error

type DataSource added in v0.7.0

type DataSource struct {
	Name string
}

DataSource is a data source that a resource provider implements.

type DebugHook added in v0.7.9

type DebugHook struct{}

DebugHook implements all methods of the terraform.Hook interface, and writes the arguments to a file in the archive. When a suitable format for the argument isn't available, the argument is encoded using json.Marshal. If the debug handler is nil, all DebugHook methods are noop, so no time is spent in marshaling the data structures.

func (*DebugHook) PostApply added in v0.7.9

func (*DebugHook) PostApply(ii *InstanceInfo, is *InstanceState, err error) (HookAction, error)

func (*DebugHook) PostDiff added in v0.7.9

func (*DebugHook) PostDiff(ii *InstanceInfo, id *InstanceDiff) (HookAction, error)

func (*DebugHook) PostImportState added in v0.7.9

func (*DebugHook) PostImportState(ii *InstanceInfo, iss []*InstanceState) (HookAction, error)

func (*DebugHook) PostProvision added in v0.7.9

func (*DebugHook) PostProvision(ii *InstanceInfo, s string) (HookAction, error)

func (*DebugHook) PostProvisionResource added in v0.7.9

func (*DebugHook) PostProvisionResource(ii *InstanceInfo, is *InstanceState) (HookAction, error)

func (*DebugHook) PostRefresh added in v0.7.9

func (*DebugHook) PostRefresh(ii *InstanceInfo, is *InstanceState) (HookAction, error)

func (*DebugHook) PostStateUpdate added in v0.7.9

func (*DebugHook) PostStateUpdate(*State) (HookAction, error)

skip logging this for now, since it could be huge

func (*DebugHook) PreApply added in v0.7.9

func (*DebugHook) PreApply(ii *InstanceInfo, is *InstanceState, id *InstanceDiff) (HookAction, error)

func (*DebugHook) PreDiff added in v0.7.9

func (*DebugHook) PreDiff(ii *InstanceInfo, is *InstanceState) (HookAction, error)

func (*DebugHook) PreImportState added in v0.7.9

func (*DebugHook) PreImportState(ii *InstanceInfo, s string) (HookAction, error)

func (*DebugHook) PreProvision added in v0.7.9

func (*DebugHook) PreProvision(ii *InstanceInfo, s string) (HookAction, error)

func (*DebugHook) PreProvisionResource added in v0.7.9

func (*DebugHook) PreProvisionResource(ii *InstanceInfo, is *InstanceState) (HookAction, error)

func (*DebugHook) PreRefresh added in v0.7.9

func (*DebugHook) PreRefresh(ii *InstanceInfo, is *InstanceState) (HookAction, error)

func (*DebugHook) ProvisionOutput added in v0.7.9

func (*DebugHook) ProvisionOutput(ii *InstanceInfo, s1 string, s2 string)

type DeposedTransformer added in v0.4.0

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 added in v0.4.0

func (t *DeposedTransformer) Transform(g *Graph) error

type DestroyEdge added in v0.7.8

type DestroyEdge struct {
	S, T dag.Vertex
}

DestroyEdge is an edge that represents a standard "destroy" relationship: Target depends on Source because Source is destroying.

func (*DestroyEdge) Hashcode added in v0.7.8

func (e *DestroyEdge) Hashcode() interface{}

func (*DestroyEdge) Source added in v0.7.8

func (e *DestroyEdge) Source() dag.Vertex

func (*DestroyEdge) Target added in v0.7.8

func (e *DestroyEdge) Target() dag.Vertex

type DestroyEdgeTransformer added in v0.7.8

type DestroyEdgeTransformer struct {
	// These are needed to properly build the graph of dependencies
	// to determine what a destroy node depends on. Any of these can be nil.
	Module *module.Tree
	State  *State
}

DestroyEdgeTransformer is a GraphTransformer that creates the proper references for destroy resources. Destroy resources are more complex in that they must be depend on the destruction of resources that in turn depend on the CREATION of the node being destroy.

That is complicated. Visually:

B_d -> A_d -> A -> B

Notice that A destroy depends on B destroy, while B create depends on A create. They're inverted. This must be done for example because often dependent resources will block parent resources from deleting. Concrete example: VPC with subnets, the VPC can't be deleted while there are still subnets.

func (*DestroyEdgeTransformer) Transform added in v0.7.8

func (t *DestroyEdgeTransformer) Transform(g *Graph) error

type DestroyPlanGraphBuilder added in v0.7.8

type DestroyPlanGraphBuilder struct {
	// Module is the root module for the graph to build.
	Module *module.Tree

	// State is the current state
	State *State

	// Targets are resources to target
	Targets []string

	// Validate will do structural validation of the graph.
	Validate bool
}

DestroyPlanGraphBuilder implements GraphBuilder and is responsible for planning a pure-destroy.

Planning a pure destroy operation is simple because we can ignore most ordering configuration and simply reverse the state.

func (*DestroyPlanGraphBuilder) Build added in v0.7.8

func (b *DestroyPlanGraphBuilder) Build(path []string) (*Graph, error)

See GraphBuilder

func (*DestroyPlanGraphBuilder) Steps added in v0.7.8

See GraphBuilder

type DestroyTransformer added in v0.4.0

type DestroyTransformer struct {
	FullDestroy bool
}

DestroyTransformer is a GraphTransformer that creates the destruction nodes for things that _might_ be destroyed.

func (*DestroyTransformer) Transform added in v0.4.0

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 added in v0.3.0

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) DeepCopy added in v0.7.8

func (d *Diff) DeepCopy() *Diff

DeepCopy performs a deep copy of all parts of the Diff, making the resulting Diff safe to use without modifying this one.

func (*Diff) Empty

func (d *Diff) Empty() bool

Empty returns true if the diff has no changes.

func (*Diff) Equal added in v0.7.8

func (d *Diff) Equal(d2 *Diff) bool

Equal compares two diffs for exact equality.

This is different from the Same comparison that is supported which checks for operation equality taking into account computed values. Equal instead checks for exact equality.

func (*Diff) ModuleByPath added in v0.3.0

func (d *Diff) ModuleByPath(path []string) *ModuleDiff

ModuleByPath is used to lookup the module diff for the given path. This should be the preferred lookup mechanism as it allows for future lookup optimizations.

func (*Diff) Prune added in v0.7.10

func (d *Diff) Prune()

Prune cleans out unused structures in the diff without affecting the behavior of the diff at all.

This is not safe to call concurrently. This is safe to call on a nil Diff.

func (*Diff) RootModule added in v0.3.0

func (d *Diff) RootModule() *ModuleDiff

RootModule returns the ModuleState for the root module

func (*Diff) String

func (d *Diff) String() string

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 added in v0.3.0

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 DiffTransformer added in v0.7.8

type DiffTransformer struct {
	Concrete ConcreteResourceNodeFunc

	Diff   *Diff
	Module *module.Tree
	State  *State
}

DiffTransformer is a GraphTransformer that adds the elements of the diff to the graph.

This transform is used for example by the ApplyGraphBuilder to ensure that only resources that are being modified are represented in the graph.

Module and State is still required for the DiffTransformer for annotations since the Diff doesn't contain all the information required to build the complete graph (such as create-before-destroy information). The graph is built based on the diff first, though, ensuring that only resources that are being modified are present in the graph.

func (*DiffTransformer) Transform added in v0.7.8

func (t *DiffTransformer) Transform(g *Graph) error

type DisableProviderTransformer added in v0.4.1

type DisableProviderTransformer struct{}

DisableProviderTransformer "disables" any providers that are not actually used by anything. This avoids the provider being initialized and configured. This both saves resources but also avoids errors since configuration may imply initialization which may require auth.

func (*DisableProviderTransformer) Transform added in v0.4.1

func (t *DisableProviderTransformer) Transform(g *Graph) error

type DisableProviderTransformerOld added in v0.7.8

type DisableProviderTransformerOld struct{}

DisableProviderTransformer "disables" any providers that are only depended on by modules.

NOTE: "old" = used by old graph builders, will be removed one day

func (*DisableProviderTransformerOld) Transform added in v0.7.8

func (t *DisableProviderTransformerOld) Transform(g *Graph) error

type EphemeralState added in v0.3.0

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:"-"`

	// Type is used to specify the resource type for this instance. This is only
	// required for import operations (as documented). If the documentation
	// doesn't state that you need to set this, then don't worry about
	// setting it.
	Type string `json:"-"`
}

EphemeralState is used for transient state that is only kept in-memory

func (*EphemeralState) DeepCopy added in v0.7.0

func (e *EphemeralState) DeepCopy() *EphemeralState

type EvalApply added in v0.4.0

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.

func (*EvalApply) Eval added in v0.4.0

func (n *EvalApply) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalApplyPost added in v0.4.0

type EvalApplyPost struct {
	Info  *InstanceInfo
	State **InstanceState
	Error *error
}

EvalApplyPost is an EvalNode implementation that does the post-Apply work

func (*EvalApplyPost) Eval added in v0.4.0

func (n *EvalApplyPost) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalApplyProvisioners added in v0.4.0

type EvalApplyProvisioners struct {
	Info           *InstanceInfo
	State          **InstanceState
	Resource       *config.Resource
	InterpResource *Resource
	CreateNew      *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 added in v0.4.0

func (n *EvalApplyProvisioners) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalBuildProviderConfig added in v0.4.0

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 added in v0.4.0

func (n *EvalBuildProviderConfig) Eval(ctx EvalContext) (interface{}, error)

type EvalCheckPreventDestroy added in v0.5.0

type EvalCheckPreventDestroy struct {
	Resource   *config.Resource
	ResourceId string
	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 added in v0.5.0

func (n *EvalCheckPreventDestroy) Eval(ctx EvalContext) (interface{}, error)

type EvalClearPrimaryState added in v0.4.0

type EvalClearPrimaryState struct {
	Name string
}

EvalClearPrimaryState is an EvalNode implementation that clears the primary instance from a resource state.

func (*EvalClearPrimaryState) Eval added in v0.4.0

func (n *EvalClearPrimaryState) Eval(ctx EvalContext) (interface{}, error)

type EvalCloseProvider added in v0.6.0

type EvalCloseProvider struct {
	Name string
}

EvalCloseProvider is an EvalNode implementation that closes provider connections that aren't needed anymore.

func (*EvalCloseProvider) Eval added in v0.6.0

func (n *EvalCloseProvider) Eval(ctx EvalContext) (interface{}, error)

type EvalCloseProvisioner added in v0.6.0

type EvalCloseProvisioner struct {
	Name string
}

EvalCloseProvisioner is an EvalNode implementation that closes provisioner connections that aren't needed anymore.

func (*EvalCloseProvisioner) Eval added in v0.6.0

func (n *EvalCloseProvisioner) Eval(ctx EvalContext) (interface{}, error)

type EvalCoerceMapVariable added in v0.7.0

type EvalCoerceMapVariable struct {
	Variables  map[string]interface{}
	ModulePath []string
	ModuleTree *module.Tree
}

EvalCoerceMapVariable is an EvalNode implementation that recognizes a specific ambiguous HCL parsing situation and resolves it. In HCL parsing, a bare map literal is indistinguishable from a list of maps w/ one element.

We take all the same inputs as EvalTypeCheckVariable above, since we need both the target type and the proposed value in order to properly coerce.

func (*EvalCoerceMapVariable) Eval added in v0.7.0

func (n *EvalCoerceMapVariable) Eval(ctx EvalContext) (interface{}, error)

Eval implements the EvalNode interface. See EvalCoerceMapVariable for details.

type EvalCompareDiff added in v0.4.0

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 added in v0.4.0

func (n *EvalCompareDiff) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalConfigProvider added in v0.4.0

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 added in v0.4.0

func (n *EvalConfigProvider) Eval(ctx EvalContext) (interface{}, error)

type EvalContext added in v0.4.0

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]interface{})

	// 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 EvalCountCheckComputed added in v0.8.0

type EvalCountCheckComputed struct {
	Resource *config.Resource
}

EvalCountCheckComputed is an EvalNode that checks if a resource count is computed and errors if so. This can possibly happen across a module boundary and we don't yet support this.

func (*EvalCountCheckComputed) Eval added in v0.8.0

func (n *EvalCountCheckComputed) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalCountFixZeroOneBoundary added in v0.4.0

type EvalCountFixZeroOneBoundary struct {
	Resource *config.Resource
}

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 added in v0.4.0

func (n *EvalCountFixZeroOneBoundary) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalCountFixZeroOneBoundaryGlobal added in v0.7.8

type EvalCountFixZeroOneBoundaryGlobal struct{}

EvalCountFixZeroOneBoundaryGlobal 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.

This works on the global state.

func (*EvalCountFixZeroOneBoundaryGlobal) Eval added in v0.7.8

func (n *EvalCountFixZeroOneBoundaryGlobal) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalDeleteOutput added in v0.5.0

type EvalDeleteOutput struct {
	Name string
}

EvalDeleteOutput is an EvalNode implementation that deletes an output from the state.

func (*EvalDeleteOutput) Eval added in v0.5.0

func (n *EvalDeleteOutput) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalDeposeState added in v0.4.0

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 added in v0.4.0

func (n *EvalDeposeState) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalDiff added in v0.4.0

type EvalDiff struct {
	Name        string
	Info        *InstanceInfo
	Config      **ResourceConfig
	Provider    *ResourceProvider
	Diff        **InstanceDiff
	State       **InstanceState
	OutputDiff  **InstanceDiff
	OutputState **InstanceState

	// Resource is needed to fetch the ignore_changes list so we can
	// filter user-requested ignored attributes from the diff.
	Resource *config.Resource
}

EvalDiff is an EvalNode implementation that does a refresh for a resource.

func (*EvalDiff) Eval added in v0.4.0

func (n *EvalDiff) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalDiffDestroy added in v0.4.0

type EvalDiffDestroy struct {
	Info   *InstanceInfo
	State  **InstanceState
	Output **InstanceDiff
}

EvalDiffDestroy is an EvalNode implementation that returns a plain destroy diff.

func (*EvalDiffDestroy) Eval added in v0.4.0

func (n *EvalDiffDestroy) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalDiffDestroyModule added in v0.4.0

type EvalDiffDestroyModule struct {
	Path []string
}

EvalDiffDestroyModule is an EvalNode implementation that writes the diff to the full diff.

func (*EvalDiffDestroyModule) Eval added in v0.4.0

func (n *EvalDiffDestroyModule) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalEarlyExitError added in v0.4.0

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 added in v0.4.0

func (EvalEarlyExitError) Error() string

type EvalFilterDiff added in v0.4.0

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 added in v0.4.0

func (n *EvalFilterDiff) Eval(ctx EvalContext) (interface{}, error)

type EvalGetProvider added in v0.4.0

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 added in v0.4.0

func (n *EvalGetProvider) Eval(ctx EvalContext) (interface{}, error)

type EvalGetProvisioner added in v0.4.0

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 added in v0.4.0

func (n *EvalGetProvisioner) Eval(ctx EvalContext) (interface{}, error)

type EvalIf added in v0.4.0

type EvalIf struct {
	If   func(EvalContext) (bool, error)
	Then EvalNode
	Else EvalNode
}

EvalIf is an EvalNode that is a conditional.

func (*EvalIf) Eval added in v0.4.0

func (n *EvalIf) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalImportState added in v0.7.0

type EvalImportState struct {
	Provider *ResourceProvider
	Info     *InstanceInfo
	Id       string
	Output   *[]*InstanceState
}

EvalImportState is an EvalNode implementation that performs an ImportState operation on a provider. This will return the imported states but won't modify any actual state.

func (*EvalImportState) Eval added in v0.7.0

func (n *EvalImportState) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalImportStateVerify added in v0.7.0

type EvalImportStateVerify struct {
	Info  *InstanceInfo
	Id    string
	State **InstanceState
}

EvalImportStateVerify verifies the state after ImportState and after the refresh to make sure it is non-nil and valid.

func (*EvalImportStateVerify) Eval added in v0.7.0

func (n *EvalImportStateVerify) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalInitProvider added in v0.4.0

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 added in v0.4.0

func (n *EvalInitProvider) Eval(ctx EvalContext) (interface{}, error)

type EvalInitProvisioner added in v0.4.0

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 added in v0.4.0

func (n *EvalInitProvisioner) Eval(ctx EvalContext) (interface{}, error)

type EvalInputProvider added in v0.4.0

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 added in v0.4.0

func (n *EvalInputProvider) Eval(ctx EvalContext) (interface{}, error)

type EvalInstanceInfo added in v0.4.0

type EvalInstanceInfo struct {
	Info *InstanceInfo
}

EvalInstanceInfo is an EvalNode implementation that fills in the InstanceInfo as much as it can.

func (*EvalInstanceInfo) Eval added in v0.4.0

func (n *EvalInstanceInfo) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalInterpolate added in v0.4.0

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 added in v0.4.0

func (n *EvalInterpolate) Eval(ctx EvalContext) (interface{}, error)

type EvalNode added in v0.4.0

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 added in v0.6.0

func CloseProviderEvalTree(n string) EvalNode

CloseProviderEvalTree returns the evaluation tree for closing provider connections that aren't needed anymore.

func EvalFilter added in v0.4.0

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.

func ProviderEvalTree added in v0.4.0

func ProviderEvalTree(n string, config *config.RawConfig) EvalNode

ProviderEvalTree returns the evaluation tree for initializing and configuring providers.

type EvalNodeFilterFunc added in v0.4.0

type EvalNodeFilterFunc func(EvalNode) EvalNode

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 added in v0.4.0

func EvalNodeFilterOp(op walkOperation) EvalNodeFilterFunc

EvalNodeFilterOp returns a filter function that filters nodes that include themselves in specific operations.

type EvalNodeFilterable added in v0.4.0

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 added in v0.4.0

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 added in v0.4.0

type EvalNoop struct{}

EvalNoop is an EvalNode that does nothing.

func (EvalNoop) Eval added in v0.4.0

func (EvalNoop) Eval(EvalContext) (interface{}, error)

type EvalOpFilter added in v0.4.0

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 added in v0.4.0

func (n *EvalOpFilter) Eval(ctx EvalContext) (interface{}, error)

TODO: test

func (*EvalOpFilter) IncludeInOp added in v0.4.0

func (n *EvalOpFilter) IncludeInOp(op walkOperation) bool

EvalNodeOpFilterable impl.

type EvalReadDataApply added in v0.7.0

type EvalReadDataApply struct {
	Provider *ResourceProvider
	Output   **InstanceState
	Diff     **InstanceDiff
	Info     *InstanceInfo
}

EvalReadDataApply is an EvalNode implementation that executes a data resource's ReadDataApply method to read data from the data source.

func (*EvalReadDataApply) Eval added in v0.7.0

func (n *EvalReadDataApply) Eval(ctx EvalContext) (interface{}, error)

type EvalReadDataDiff added in v0.7.0

type EvalReadDataDiff struct {
	Provider    *ResourceProvider
	Output      **InstanceDiff
	OutputState **InstanceState
	Config      **ResourceConfig
	Info        *InstanceInfo

	// Set Previous when re-evaluating diff during apply, to ensure that
	// the "Destroy" flag is preserved.
	Previous **InstanceDiff
}

EvalReadDataDiff is an EvalNode implementation that executes a data resource's ReadDataDiff method to discover what attributes it exports.

func (*EvalReadDataDiff) Eval added in v0.7.0

func (n *EvalReadDataDiff) Eval(ctx EvalContext) (interface{}, error)

type EvalReadDiff added in v0.4.0

type EvalReadDiff struct {
	Name string
	Diff **InstanceDiff
}

EvalReadDiff is an EvalNode implementation that writes the diff to the full diff.

func (*EvalReadDiff) Eval added in v0.4.0

func (n *EvalReadDiff) Eval(ctx EvalContext) (interface{}, error)

type EvalReadState added in v0.4.0

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 added in v0.4.0

func (n *EvalReadState) Eval(ctx EvalContext) (interface{}, error)

type EvalReadStateDeposed added in v0.4.0

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 added in v0.4.0

func (n *EvalReadStateDeposed) Eval(ctx EvalContext) (interface{}, error)

type EvalRefresh added in v0.4.0

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 added in v0.4.0

func (n *EvalRefresh) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalRequireState added in v0.4.0

type EvalRequireState struct {
	State **InstanceState
}

EvalRequireState is an EvalNode implementation that early exits if the state doesn't have an ID.

func (*EvalRequireState) Eval added in v0.4.0

func (n *EvalRequireState) Eval(ctx EvalContext) (interface{}, error)

type EvalReturnError added in v0.4.0

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 added in v0.4.0

func (n *EvalReturnError) Eval(ctx EvalContext) (interface{}, error)

type EvalSequence added in v0.4.0

type EvalSequence struct {
	Nodes []EvalNode
}

EvalSequence is an EvalNode that evaluates in sequence.

func (*EvalSequence) Eval added in v0.4.0

func (n *EvalSequence) Eval(ctx EvalContext) (interface{}, error)

func (*EvalSequence) Filter added in v0.4.0

func (n *EvalSequence) Filter(fn EvalNodeFilterFunc)

EvalNodeFilterable impl.

type EvalSetProviderConfig added in v0.4.1

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 added in v0.4.1

func (n *EvalSetProviderConfig) Eval(ctx EvalContext) (interface{}, error)

type EvalSetVariables added in v0.4.0

type EvalSetVariables struct {
	Module    *string
	Variables map[string]interface{}
}

EvalSetVariables is an EvalNode implementation that sets the variables explicitly for interpolation later.

func (*EvalSetVariables) Eval added in v0.4.0

func (n *EvalSetVariables) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalTypeCheckVariable added in v0.6.15

type EvalTypeCheckVariable struct {
	Variables  map[string]interface{}
	ModulePath []string
	ModuleTree *module.Tree
}

EvalTypeCheckVariable is an EvalNode which ensures that the variable values which are assigned as inputs to a module (including the root) match the types which are either declared for the variables explicitly or inferred from the default values.

In order to achieve this three things are required:

- a map of the proposed variable values
- the configuration tree of the module in which the variable is
  declared
- the path to the module (so we know which part of the tree to
  compare the values against).

func (*EvalTypeCheckVariable) Eval added in v0.6.15

func (n *EvalTypeCheckVariable) Eval(ctx EvalContext) (interface{}, error)

type EvalUndeposeState added in v0.4.0

type EvalUndeposeState struct {
	Name  string
	State **InstanceState
}

EvalUndeposeState is an EvalNode implementation that reads the InstanceState for a specific resource out of the state.

func (*EvalUndeposeState) Eval added in v0.4.0

func (n *EvalUndeposeState) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalUpdateStateHook added in v0.4.0

type EvalUpdateStateHook struct{}

EvalUpdateStateHook is an EvalNode implementation that calls the PostStateUpdate hook with the current state.

func (*EvalUpdateStateHook) Eval added in v0.4.0

func (n *EvalUpdateStateHook) Eval(ctx EvalContext) (interface{}, error)

type EvalValidateCount added in v0.4.0

type EvalValidateCount struct {
	Resource *config.Resource
}

EvalValidateCount is an EvalNode implementation that validates the count of a resource.

func (*EvalValidateCount) Eval added in v0.4.0

func (n *EvalValidateCount) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalValidateError added in v0.4.0

type EvalValidateError struct {
	Warnings []string
	Errors   []error
}

EvalValidateError is the error structure returned if there were validation errors.

func (*EvalValidateError) Error added in v0.4.0

func (e *EvalValidateError) Error() string

type EvalValidateProvider added in v0.4.0

type EvalValidateProvider struct {
	Provider *ResourceProvider
	Config   **ResourceConfig
}

EvalValidateProvider is an EvalNode implementation that validates the configuration of a resource.

func (*EvalValidateProvider) Eval added in v0.4.0

func (n *EvalValidateProvider) Eval(ctx EvalContext) (interface{}, error)

type EvalValidateProvisioner added in v0.4.0

type EvalValidateProvisioner struct {
	Provisioner *ResourceProvisioner
	Config      **ResourceConfig
}

EvalValidateProvisioner is an EvalNode implementation that validates the configuration of a resource.

func (*EvalValidateProvisioner) Eval added in v0.4.0

func (n *EvalValidateProvisioner) Eval(ctx EvalContext) (interface{}, error)

type EvalValidateResource added in v0.4.0

type EvalValidateResource struct {
	Provider     *ResourceProvider
	Config       **ResourceConfig
	ResourceName string
	ResourceType string
	ResourceMode config.ResourceMode

	// IgnoreWarnings means that warnings will not be passed through. This allows
	// "just-in-time" passes of validation to continue execution through warnings.
	IgnoreWarnings bool
}

EvalValidateResource is an EvalNode implementation that validates the configuration of a resource.

func (*EvalValidateResource) Eval added in v0.4.0

func (n *EvalValidateResource) Eval(ctx EvalContext) (interface{}, error)

type EvalVariableBlock added in v0.4.0

type EvalVariableBlock struct {
	Config         **ResourceConfig
	VariableValues map[string]interface{}
}

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 added in v0.4.0

func (n *EvalVariableBlock) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalWriteDiff added in v0.4.0

type EvalWriteDiff struct {
	Name string
	Diff **InstanceDiff
}

EvalWriteDiff is an EvalNode implementation that writes the diff to the full diff.

func (*EvalWriteDiff) Eval added in v0.4.0

func (n *EvalWriteDiff) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalWriteOutput added in v0.4.0

type EvalWriteOutput struct {
	Name      string
	Sensitive bool
	Value     *config.RawConfig
}

EvalWriteOutput is an EvalNode implementation that writes the output for the given name to the current state.

func (*EvalWriteOutput) Eval added in v0.4.0

func (n *EvalWriteOutput) Eval(ctx EvalContext) (interface{}, error)

TODO: test

type EvalWriteState added in v0.4.0

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 added in v0.4.0

func (n *EvalWriteState) Eval(ctx EvalContext) (interface{}, error)

type EvalWriteStateDeposed added in v0.4.0

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 added in v0.4.0

func (n *EvalWriteStateDeposed) Eval(ctx EvalContext) (interface{}, error)

type ExpandTransform added in v0.4.0

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.

func (*ExpandTransform) Transform added in v0.4.0

func (t *ExpandTransform) Transform(v dag.Vertex) (dag.Vertex, error)

type FlatConfigTransformer added in v0.7.8

type FlatConfigTransformer struct {
	Concrete ConcreteResourceNodeFunc // What to turn resources into

	Module *module.Tree
}

FlatConfigTransformer is a GraphTransformer that adds the configuration to the graph. The module used to configure this transformer must be the root module.

This transform adds the nodes but doesn't connect any of the references. The ReferenceTransformer should be used for that.

NOTE: In relation to ConfigTransformer: this is a newer generation config transformer. It puts the _entire_ config into the graph (there is no "flattening" step as before).

func (*FlatConfigTransformer) Transform added in v0.7.8

func (t *FlatConfigTransformer) Transform(g *Graph) error

type FlattenTransformer added in v0.5.0

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 added in v0.5.0

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) Add added in v0.4.0

func (g *Graph) Add(v dag.Vertex) dag.Vertex

Add is the same as dag.Graph.Add.

func (*Graph) Annotations added in v0.7.8

func (g *Graph) Annotations(v dag.Vertex) map[string]interface{}

Annotations returns the annotations that are configured for the given vertex. The map is guaranteed to be non-nil but may be empty.

The returned map may be modified to modify the annotations of the vertex.

func (*Graph) ConnectDependent added in v0.4.0

func (g *Graph) ConnectDependent(raw dag.Vertex) []string

ConnectDependent connects a GraphNodeDependent to all of its GraphNodeDependables. It returns the list of dependents it was unable to connect to.

func (*Graph) ConnectDependents added in v0.4.0

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 added in v0.4.0

func (g *Graph) ConnectFrom(source string, target dag.Vertex)

ConnectFrom creates an edge by finding the source from a DependableName and connecting it to the specific vertex.

func (*Graph) ConnectTo added in v0.4.0

func (g *Graph) ConnectTo(v dag.Vertex, targets []string) []string

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 added in v0.4.0

func (g *Graph) Dependable(n string) dag.Vertex

Dependable finds the vertices in the graph that have the given dependable names and returns them.

func (*Graph) DirectedGraph added in v0.8.0

func (g *Graph) DirectedGraph() dag.Grapher

func (*Graph) Remove added in v0.5.0

func (g *Graph) Remove(v dag.Vertex) dag.Vertex

Remove is the same as dag.Graph.Remove

func (*Graph) Replace added in v0.5.0

func (g *Graph) Replace(o, n dag.Vertex) bool

Replace is the same as dag.Graph.Replace

func (*Graph) Walk added in v0.4.0

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 added in v0.4.0

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 GraphNodeAddressable added in v0.4.0

type GraphNodeAddressable interface {
	ResourceAddress() *ResourceAddress
}

GraphNodeAddressable is an interface that all graph nodes for the configuration graph need to implement in order to be be addressed / targeted properly.

type GraphNodeAnnotationInit added in v0.7.8

type GraphNodeAnnotationInit interface {
	AnnotationInit() map[string]interface{}
}

GraphNodeAnnotationInit is an interface that allows a node to initialize it's annotations.

AnnotationInit will be called _once_ when the node is added to a graph for the first time and is expected to return it's initial annotations.

type GraphNodeAttachProvider added in v0.7.8

type GraphNodeAttachProvider interface {
	// Must be implemented to determine the path for the configuration
	GraphNodeSubPath

	// ProviderName with no module prefix. Example: "aws".
	ProviderName() string

	// Sets the configuration
	AttachProvider(*config.ProviderConfig)
}

GraphNodeAttachProvider is an interface that must be implemented by nodes that want provider configurations attached.

type GraphNodeAttachResourceConfig added in v0.7.8

type GraphNodeAttachResourceConfig interface {
	// ResourceAddr is the address to the resource
	ResourceAddr() *ResourceAddress

	// Sets the configuration
	AttachResourceConfig(*config.Resource)
}

GraphNodeAttachResourceConfig is an interface that must be implemented by nodes that want resource configurations attached.

type GraphNodeAttachResourceState added in v0.7.8

type GraphNodeAttachResourceState interface {
	// The address to the resource for the state
	ResourceAddr() *ResourceAddress

	// Sets the state
	AttachResourceState(*ResourceState)
}

GraphNodeAttachResourceState is an interface that can be implemented to request that a ResourceState is attached to the node.

type GraphNodeBasicSubgraph added in v0.4.0

type GraphNodeBasicSubgraph struct {
	NameValue string
	Graph     *Graph
}

func (*GraphNodeBasicSubgraph) FlattenGraph added in v0.5.1

func (n *GraphNodeBasicSubgraph) FlattenGraph() *Graph

func (*GraphNodeBasicSubgraph) Name added in v0.4.0

func (n *GraphNodeBasicSubgraph) Name() string

func (*GraphNodeBasicSubgraph) Subgraph added in v0.4.0

func (n *GraphNodeBasicSubgraph) Subgraph() dag.Grapher

type GraphNodeCloseProvider added in v0.6.0

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 added in v0.6.0

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 added in v0.4.0

type GraphNodeConfigModule struct {
	Path   []string
	Module *config.Module
	Tree   *module.Tree
}

GraphNodeConfigModule represents a module within the configuration graph.

func (*GraphNodeConfigModule) ConfigType added in v0.4.1

func (*GraphNodeConfigModule) DependableName added in v0.4.0

func (n *GraphNodeConfigModule) DependableName() []string

func (*GraphNodeConfigModule) DependentOn added in v0.4.0

func (n *GraphNodeConfigModule) DependentOn() []string

func (*GraphNodeConfigModule) Expand added in v0.4.0

GraphNodeExpandable

func (*GraphNodeConfigModule) Name added in v0.4.0

func (n *GraphNodeConfigModule) Name() string

func (*GraphNodeConfigModule) ProvidedBy added in v0.4.0

func (n *GraphNodeConfigModule) ProvidedBy() []string

GraphNodeExpandable

type GraphNodeConfigOutput added in v0.4.0

type GraphNodeConfigOutput struct {
	Output *config.Output
}

GraphNodeConfigOutput represents an output configured within the configuration.

func (*GraphNodeConfigOutput) ConfigType added in v0.4.1

func (*GraphNodeConfigOutput) DependableName added in v0.4.0

func (n *GraphNodeConfigOutput) DependableName() []string

func (*GraphNodeConfigOutput) DependentOn added in v0.4.0

func (n *GraphNodeConfigOutput) DependentOn() []string

func (*GraphNodeConfigOutput) DestroyEdgeInclude added in v0.5.0

func (n *GraphNodeConfigOutput) DestroyEdgeInclude(dag.Vertex) bool

GraphNodeDestroyEdgeInclude impl.

func (*GraphNodeConfigOutput) EvalTree added in v0.4.0

func (n *GraphNodeConfigOutput) EvalTree() EvalNode

GraphNodeEvalable impl.

func (*GraphNodeConfigOutput) Flatten added in v0.5.0

func (n *GraphNodeConfigOutput) Flatten(p []string) (dag.Vertex, error)

GraphNodeFlattenable impl.

func (*GraphNodeConfigOutput) Name added in v0.4.0

func (n *GraphNodeConfigOutput) Name() string

func (*GraphNodeConfigOutput) OutputName added in v0.5.0

func (n *GraphNodeConfigOutput) OutputName() string

func (*GraphNodeConfigOutput) Proxy added in v0.5.0

func (n *GraphNodeConfigOutput) Proxy() bool

GraphNodeProxy impl.

type GraphNodeConfigOutputFlat added in v0.5.0

type GraphNodeConfigOutputFlat struct {
	*GraphNodeConfigOutput

	PathValue []string
}

Same as GraphNodeConfigOutput, but for flattening

func (*GraphNodeConfigOutputFlat) DependableName added in v0.5.0

func (n *GraphNodeConfigOutputFlat) DependableName() []string

func (*GraphNodeConfigOutputFlat) DependentOn added in v0.5.0

func (n *GraphNodeConfigOutputFlat) DependentOn() []string

func (*GraphNodeConfigOutputFlat) Name added in v0.5.0

func (*GraphNodeConfigOutputFlat) Path added in v0.5.0

func (n *GraphNodeConfigOutputFlat) Path() []string

type GraphNodeConfigProvider added in v0.4.0

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 added in v0.4.1

func (*GraphNodeConfigProvider) DependableName added in v0.4.0

func (n *GraphNodeConfigProvider) DependableName() []string

func (*GraphNodeConfigProvider) DependentOn added in v0.4.0

func (n *GraphNodeConfigProvider) DependentOn() []string

func (*GraphNodeConfigProvider) DotNode added in v0.5.0

func (n *GraphNodeConfigProvider) DotNode(name string, opts *dag.DotOpts) *dag.DotNode

GraphNodeDotter impl.

func (*GraphNodeConfigProvider) DotOrigin added in v0.5.0

func (n *GraphNodeConfigProvider) DotOrigin() bool

GraphNodeDotterOrigin impl.

func (*GraphNodeConfigProvider) EvalTree added in v0.4.0

func (n *GraphNodeConfigProvider) EvalTree() EvalNode

GraphNodeEvalable impl.

func (*GraphNodeConfigProvider) Flatten added in v0.5.0

func (n *GraphNodeConfigProvider) Flatten(p []string) (dag.Vertex, error)

GraphNodeFlattenable impl.

func (*GraphNodeConfigProvider) Name added in v0.4.0

func (n *GraphNodeConfigProvider) Name() string

func (*GraphNodeConfigProvider) ProviderConfig added in v0.4.1

func (n *GraphNodeConfigProvider) ProviderConfig() *config.RawConfig

GraphNodeProvider implementation

func (*GraphNodeConfigProvider) ProviderName added in v0.4.0

func (n *GraphNodeConfigProvider) ProviderName() string

GraphNodeProvider implementation

type GraphNodeConfigProviderFlat added in v0.5.0

type GraphNodeConfigProviderFlat struct {
	*GraphNodeConfigProvider

	PathValue []string
}

Same as GraphNodeConfigProvider, but for flattening

func (*GraphNodeConfigProviderFlat) DependableName added in v0.5.0

func (n *GraphNodeConfigProviderFlat) DependableName() []string

func (*GraphNodeConfigProviderFlat) DependentOn added in v0.5.0

func (n *GraphNodeConfigProviderFlat) DependentOn() []string

func (*GraphNodeConfigProviderFlat) Name added in v0.5.0

func (*GraphNodeConfigProviderFlat) Path added in v0.5.0

func (n *GraphNodeConfigProviderFlat) Path() []string

func (*GraphNodeConfigProviderFlat) ProviderName added in v0.5.0

func (n *GraphNodeConfigProviderFlat) ProviderName() string

type GraphNodeConfigResource added in v0.4.0

type GraphNodeConfigResource struct {
	Resource *config.Resource

	// If set to true, this resource represents a resource
	// that will be destroyed in some way.
	Destroy bool

	// Used during DynamicExpand to target indexes
	Targets []ResourceAddress

	Path []string
}

GraphNodeConfigResource represents a resource within the config graph.

func (*GraphNodeConfigResource) ConfigType added in v0.4.1

func (*GraphNodeConfigResource) Copy added in v0.6.12

func (*GraphNodeConfigResource) CountDependentOn added in v0.5.0

func (n *GraphNodeConfigResource) CountDependentOn() []string

GraphNodeCountDependent impl.

func (*GraphNodeConfigResource) DependableName added in v0.4.0

func (n *GraphNodeConfigResource) DependableName() []string

func (*GraphNodeConfigResource) DependentOn added in v0.4.0

func (n *GraphNodeConfigResource) DependentOn() []string

GraphNodeDependent impl.

func (*GraphNodeConfigResource) DestroyNode added in v0.4.0

func (n *GraphNodeConfigResource) DestroyNode() GraphNodeDestroy

GraphNodeDestroyable

func (*GraphNodeConfigResource) DotNode added in v0.5.0

func (n *GraphNodeConfigResource) DotNode(name string, opts *dag.DotOpts) *dag.DotNode

GraphNodeDotter impl.

func (*GraphNodeConfigResource) DynamicExpand added in v0.4.0

func (n *GraphNodeConfigResource) DynamicExpand(ctx EvalContext) (*Graph, error)

GraphNodeDynamicExpandable impl.

func (*GraphNodeConfigResource) EvalTree added in v0.4.0

func (n *GraphNodeConfigResource) EvalTree() EvalNode

GraphNodeEvalable impl.

func (*GraphNodeConfigResource) Flatten added in v0.5.0

func (n *GraphNodeConfigResource) Flatten(p []string) (dag.Vertex, error)

GraphNodeFlattenable impl.

func (*GraphNodeConfigResource) Name added in v0.4.0

func (n *GraphNodeConfigResource) Name() string

func (*GraphNodeConfigResource) Noop added in v0.6.1

func (n *GraphNodeConfigResource) Noop(opts *NoopOpts) bool

GraphNodeNoopPrunable

func (*GraphNodeConfigResource) ProvidedBy added in v0.4.0

func (n *GraphNodeConfigResource) ProvidedBy() []string

GraphNodeProviderConsumer

func (*GraphNodeConfigResource) ProvisionedBy added in v0.4.0

func (n *GraphNodeConfigResource) ProvisionedBy() []string

GraphNodeProvisionerConsumer

func (*GraphNodeConfigResource) ResourceAddress added in v0.4.0

func (n *GraphNodeConfigResource) ResourceAddress() *ResourceAddress

GraphNodeAddressable impl.

func (*GraphNodeConfigResource) SetTargets added in v0.4.0

func (n *GraphNodeConfigResource) SetTargets(targets []ResourceAddress)

GraphNodeTargetable impl.

func (*GraphNodeConfigResource) VarWalk added in v0.5.0

VarWalk calls a callback for all the variables that this resource depends on.

type GraphNodeConfigResourceFlat added in v0.5.0

type GraphNodeConfigResourceFlat struct {
	*GraphNodeConfigResource

	PathValue []string
}

Same as GraphNodeConfigResource, but for flattening

func (*GraphNodeConfigResourceFlat) DependableName added in v0.5.0

func (n *GraphNodeConfigResourceFlat) DependableName() []string

func (*GraphNodeConfigResourceFlat) DependentOn added in v0.5.0

func (n *GraphNodeConfigResourceFlat) DependentOn() []string

func (*GraphNodeConfigResourceFlat) DestroyNode added in v0.5.0

GraphNodeDestroyable impl.

func (*GraphNodeConfigResourceFlat) Name added in v0.5.0

func (*GraphNodeConfigResourceFlat) Path added in v0.5.0

func (n *GraphNodeConfigResourceFlat) Path() []string

func (*GraphNodeConfigResourceFlat) ProvidedBy added in v0.5.0

func (n *GraphNodeConfigResourceFlat) ProvidedBy() []string

func (*GraphNodeConfigResourceFlat) ProvisionedBy added in v0.5.0

func (n *GraphNodeConfigResourceFlat) ProvisionedBy() []string

type GraphNodeConfigType added in v0.4.1

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 added in v0.4.1

func (i GraphNodeConfigType) String() string

type GraphNodeConfigVariable added in v0.5.0

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

	ModuleTree *module.Tree
	ModulePath []string
}

GraphNodeConfigVariable represents a Variable in the config.

func (*GraphNodeConfigVariable) ConfigType added in v0.5.0

func (*GraphNodeConfigVariable) DependableName added in v0.5.0

func (n *GraphNodeConfigVariable) DependableName() []string

func (*GraphNodeConfigVariable) DependentOn added in v0.5.0

func (n *GraphNodeConfigVariable) DependentOn() []string

func (*GraphNodeConfigVariable) DestroyEdgeInclude added in v0.5.0

func (n *GraphNodeConfigVariable) DestroyEdgeInclude(v dag.Vertex) bool

GraphNodeDestroyEdgeInclude impl.

func (*GraphNodeConfigVariable) EvalTree added in v0.5.0

func (n *GraphNodeConfigVariable) EvalTree() EvalNode

GraphNodeEvalable impl.

func (*GraphNodeConfigVariable) Flatten added in v0.5.0

func (n *GraphNodeConfigVariable) Flatten(p []string) (dag.Vertex, error)

GraphNodeFlattenable impl.

func (*GraphNodeConfigVariable) Name added in v0.5.0

func (n *GraphNodeConfigVariable) Name() string

func (*GraphNodeConfigVariable) Noop added in v0.6.1

func (n *GraphNodeConfigVariable) Noop(opts *NoopOpts) bool

GraphNodeNoopPrunable

func (*GraphNodeConfigVariable) Proxy added in v0.5.0

func (n *GraphNodeConfigVariable) Proxy() bool

GraphNodeProxy impl.

func (*GraphNodeConfigVariable) RemoveIfNotTargeted added in v0.7.0

func (n *GraphNodeConfigVariable) RemoveIfNotTargeted() bool

RemoveIfNotTargeted implements RemovableIfNotTargeted. When targeting is active, variables that are not targeted should be removed from the graph, because otherwise module variables trying to interpolate their references can fail when they're missing the referent resource node.

func (*GraphNodeConfigVariable) VariableName added in v0.5.0

func (n *GraphNodeConfigVariable) VariableName() string

type GraphNodeConfigVariableFlat added in v0.5.0

type GraphNodeConfigVariableFlat struct {
	*GraphNodeConfigVariable

	PathValue []string
}

func (*GraphNodeConfigVariableFlat) DependableName added in v0.5.0

func (n *GraphNodeConfigVariableFlat) DependableName() []string

func (*GraphNodeConfigVariableFlat) DependentOn added in v0.5.0

func (n *GraphNodeConfigVariableFlat) DependentOn() []string

func (*GraphNodeConfigVariableFlat) Name added in v0.5.0

func (*GraphNodeConfigVariableFlat) Noop added in v0.7.0

func (n *GraphNodeConfigVariableFlat) Noop(opts *NoopOpts) bool

func (*GraphNodeConfigVariableFlat) Path added in v0.5.0

func (n *GraphNodeConfigVariableFlat) Path() []string

type GraphNodeCountDependent added in v0.5.0

type GraphNodeCountDependent interface {
	CountDependentOn() []string
}

GraphNodeCountDependent is implemented by resources for giving only the dependencies they have from the "count" field.

type GraphNodeCreator added in v0.7.8

type GraphNodeCreator interface {
	// ResourceAddr is the address of the resource being created or updated
	CreateAddr() *ResourceAddress
}

GraphNodeCreator must be implemented by nodes that create OR update resources.

type GraphNodeDependable added in v0.4.0

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 added in v0.4.0

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 added in v0.4.0

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 added in v0.5.0

type GraphNodeDestroyEdgeInclude interface {
	DestroyEdgeInclude(dag.Vertex) bool
}

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 GraphNodeDestroyPrunable added in v0.4.0

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 added in v0.4.0

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() 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 GraphNodeDestroyer added in v0.7.8

type GraphNodeDestroyer interface {
	dag.Vertex

	// ResourceAddr is the address of the resource that is being
	// destroyed by this node. If this returns nil, then this node
	// is not destroying anything.
	DestroyAddr() *ResourceAddress
}

GraphNodeDestroyer must be implemented by nodes that destroy resources.

type GraphNodeDestroyerCBD added in v0.7.8

type GraphNodeDestroyerCBD interface {
	GraphNodeDestroyer

	// CreateBeforeDestroy returns true if this node represents a node
	// that is doing a CBD.
	CreateBeforeDestroy() bool

	// ModifyCreateBeforeDestroy is called when the CBD state of a node
	// is changed dynamically. This can return an error if this isn't
	// allowed.
	ModifyCreateBeforeDestroy(bool) error
}

GraphNodeDestroyerCBD must be implemented by nodes that might be create-before-destroy destroyers.

type GraphNodeDynamicExpandable added in v0.4.0

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 added in v0.4.0

type GraphNodeEvalable interface {
	EvalTree() EvalNode
}

GraphNodeEvalable is the interface that graph nodes must implement to enable valuation.

type GraphNodeExpandable added in v0.4.0

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 added in v0.5.0

type GraphNodeFlatGraph interface {
	FlattenGraph() *Graph
}

GraphNodeFlatGraph must be implemented by nodes that have subgraphs that they want flattened into the graph.

type GraphNodeFlattenable added in v0.5.0

type GraphNodeFlattenable interface {
	Flatten(path []string) (dag.Vertex, error)
}

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 GraphNodeNoopPrunable added in v0.6.1

type GraphNodeNoopPrunable interface {
	Noop(*NoopOpts) bool
}

GraphNodeNoopPrunable can be implemented by nodes that can be pruned if they are noops.

type GraphNodeOutput added in v0.5.0

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 added in v0.4.0

type GraphNodeProvider interface {
	ProviderName() string
	ProviderConfig() *config.RawConfig
}

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 added in v0.4.0

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 added in v0.4.0

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 added in v0.4.0

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 added in v0.5.0

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 GraphNodeReferenceGlobal added in v0.7.8

type GraphNodeReferenceGlobal interface {
	// Set to true to signal that references and name are fully
	// qualified. See the above docs for more information.
	ReferenceGlobal() bool
}

GraphNodeReferenceGlobal is an interface that can optionally be implemented. If ReferenceGlobal returns true, then the References() and ReferenceableName() must be _fully qualified_ with "module.foo.bar" etc.

This allows a node to reference and be referenced by a specific name that may cross module boundaries. This can be very dangerous so use this wisely.

The primary use case for this is module boundaries (variables coming in).

type GraphNodeReferenceable added in v0.7.8

type GraphNodeReferenceable interface {
	// ReferenceableName is the name by which this can be referenced.
	// This can be either just the type, or include the field. Example:
	// "aws_instance.bar" or "aws_instance.bar.id".
	ReferenceableName() []string
}

GraphNodeReferenceable must be implemented by any node that represents a Terraform thing that can be referenced (resource, module, etc.).

Even if the thing has no name, this should return an empty list. By implementing this and returning a non-nil result, you say that this CAN be referenced and other methods of referencing may still be possible (such as by path!)

type GraphNodeReferencer added in v0.7.8

type GraphNodeReferencer interface {
	// References are the list of things that this node references. This
	// can include fields or just the type, just like GraphNodeReferenceable
	// above.
	References() []string
}

GraphNodeReferencer must be implemented by nodes that reference other Terraform items and therefore depend on them.

type GraphNodeResource

type GraphNodeResource interface {
	ResourceAddr() *ResourceAddress
}

GraphNodeResource is implemented by any nodes that represent a resource. The type of operation cannot be assumed, only that this node represents the given resource.

type GraphNodeStateRepresentative added in v0.4.0

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 added in v0.5.0

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 added in v0.4.0

type GraphNodeSubgraph interface {
	Subgraph() dag.Grapher
}

GraphNodeSubgraph is an interface a node can implement if it has a larger subgraph that should be walked.

type GraphNodeTargetable added in v0.4.0

type GraphNodeTargetable interface {
	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 added in v0.5.0

type GraphProxyEdge struct {
	dag.Edge
}

GraphProxyEdge is the edge that is used for proxied edges.

type GraphSemanticChecker added in v0.4.0

type GraphSemanticChecker interface {
	Check(*dag.Graph) error
}

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 added in v0.4.0

type GraphTransformer interface {
	Transform(*Graph) error
}

GraphTransformer is the interface that transformers implement. This interface is only for transforms that need entire graph visibility.

func GraphTransformIf added in v0.7.8

func GraphTransformIf(f func() bool, then GraphTransformer) GraphTransformer

GraphTransformIf is a helper function that conditionally returns a GraphTransformer given. This is useful for calling inline a sequence of transforms without having to split it up into multiple append() calls.

func GraphTransformMulti added in v0.7.8

func GraphTransformMulti(ts ...GraphTransformer) GraphTransformer

GraphTransformMulti combines multiple graph transformers into a single GraphTransformer that runs all the individual graph transformers.

type GraphType added in v0.8.0

type GraphType byte

GraphType is an enum of the type of graph to create with a Context. The values of the constants may change so they shouldn't be depended on; always use the constant name.

const (
	GraphTypeInvalid GraphType = 0
	GraphTypeLegacy  GraphType = iota
	GraphTypePlan
	GraphTypePlanDestroy
	GraphTypeApply
)

func (GraphType) String added in v0.8.0

func (i GraphType) String() string

type GraphVertexTransformer added in v0.4.0

type GraphVertexTransformer interface {
	Transform(dag.Vertex) (dag.Vertex, error)
}

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 added in v0.4.0

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 GraphWalkerPanicwrapper added in v0.7.9

type GraphWalkerPanicwrapper interface {
	GraphWalker

	// Panic is called when a panic occurs. This will halt the panic from
	// propogating so if the walker wants it to crash still it should panic
	// again. This is called from within a defer so runtime/debug.Stack can
	// be used to get the stack trace of the panic.
	Panic(dag.Vertex, interface{})
}

GrpahWalkerPanicwrapper can be optionally implemented to catch panics that occur while walking the graph. This is not generally recommended since panics should crash Terraform and result in a bug report. However, this is particularly useful for situations like the shadow graph where you don't ever want to cause a panic.

func GraphWalkerPanicwrap added in v0.7.9

func GraphWalkerPanicwrap(w GraphWalker) GraphWalkerPanicwrapper

GraphWalkerPanicwrap wraps an existing Graphwalker to wrap and swallow the panics. This doesn't lose the panics since the panics are still returned as errors as part of a graph walk.

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)

	// PreImportState and PostImportState are called before and after
	// a single resource's state is being improted.
	PreImportState(*InstanceInfo, string) (HookAction, error)
	PostImportState(*InstanceInfo, []*InstanceState) (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 ImportGraphBuilder added in v0.7.0

type ImportGraphBuilder struct {
	// ImportTargets are the list of resources to import.
	ImportTargets []*ImportTarget

	// Module is the module to add to the graph. See ImportOpts.Module.
	Module *module.Tree

	// Providers is the list of providers supported.
	Providers []string
}

ImportGraphBuilder implements GraphBuilder and is responsible for building a graph for importing resources into Terraform. This is a much, much simpler graph than a normal configuration graph.

func (*ImportGraphBuilder) Build added in v0.7.0

func (b *ImportGraphBuilder) Build(path []string) (*Graph, error)

Build builds the graph according to the steps returned by Steps.

func (*ImportGraphBuilder) Steps added in v0.7.0

func (b *ImportGraphBuilder) Steps() []GraphTransformer

Steps returns the ordered list of GraphTransformers that must be executed to build a complete graph.

type ImportOpts added in v0.7.0

type ImportOpts struct {
	// Targets are the targets to import
	Targets []*ImportTarget

	// Module is optional, and specifies a config module that is loaded
	// into the graph and evaluated. The use case for this is to provide
	// provider configuration.
	Module *module.Tree
}

ImportOpts are used as the configuration for Import.

type ImportProviderValidateTransformer added in v0.8.0

type ImportProviderValidateTransformer struct{}

ImportProviderValidateTransformer is a GraphTransformer that goes through the providers in the graph and validates that they only depend on variables.

func (*ImportProviderValidateTransformer) Transform added in v0.8.0

type ImportStateTransformer added in v0.7.0

type ImportStateTransformer struct {
	Targets []*ImportTarget
}

ImportStateTransformer is a GraphTransformer that adds nodes to the graph to represent the imports we want to do for resources.

func (*ImportStateTransformer) Transform added in v0.7.0

func (t *ImportStateTransformer) Transform(g *Graph) error

type ImportTarget added in v0.7.0

type ImportTarget struct {
	// Addr is the full resource address of the resource to import.
	// Example: "module.foo.aws_instance.bar"
	Addr string

	// ID is the ID of the resource to import. This is resource-specific.
	ID string

	// Provider string
	Provider string
}

ImportTarget is a single resource to import.

type InputMode added in v0.3.0

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.
	// InputModeVar must be set for this to have an effect.
	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 added in v0.3.0

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 added in v0.3.0

type InstanceDiff struct {
	Attributes     map[string]*ResourceAttrDiff
	Destroy        bool
	DestroyDeposed bool
	DestroyTainted bool
	// contains filtered or unexported fields
}

InstanceDiff is the diff of a resource from some state to another.

func NewInstanceDiff added in v0.7.0

func NewInstanceDiff() *InstanceDiff

func (*InstanceDiff) ChangeType added in v0.3.0

func (d *InstanceDiff) ChangeType() DiffChangeType

ChangeType returns the DiffChangeType represented by the diff for this single instance.

func (*InstanceDiff) Copy added in v0.7.9

func (d *InstanceDiff) Copy() (*InstanceDiff, error)

func (*InstanceDiff) CopyAttributes added in v0.7.0

func (d *InstanceDiff) CopyAttributes() map[string]*ResourceAttrDiff

Safely copies the Attributes map

func (*InstanceDiff) DeepCopy added in v0.7.8

func (d *InstanceDiff) DeepCopy() *InstanceDiff

DeepCopy performs a deep copy of all parts of the InstanceDiff

func (*InstanceDiff) DelAttribute added in v0.7.0

func (d *InstanceDiff) DelAttribute(key string)

func (*InstanceDiff) Empty added in v0.3.0

func (d *InstanceDiff) Empty() bool

Empty returns true if this diff encapsulates no changes.

func (*InstanceDiff) Equal added in v0.7.8

func (d *InstanceDiff) Equal(d2 *InstanceDiff) bool

Equal compares two diffs for exact equality.

This is different from the Same comparison that is supported which checks for operation equality taking into account computed values. Equal instead checks for exact equality.

func (*InstanceDiff) GetAttribute added in v0.7.0

func (d *InstanceDiff) GetAttribute(key string) (*ResourceAttrDiff, bool)

func (*InstanceDiff) GetAttributesLen added in v0.7.0

func (d *InstanceDiff) GetAttributesLen() int

func (*InstanceDiff) GetDestroy added in v0.7.0

func (d *InstanceDiff) GetDestroy() bool

func (*InstanceDiff) GetDestroyDeposed added in v0.8.0

func (d *InstanceDiff) GetDestroyDeposed() bool

func (*InstanceDiff) GetDestroyTainted added in v0.7.0

func (d *InstanceDiff) GetDestroyTainted() bool

func (*InstanceDiff) GoString added in v0.4.0

func (d *InstanceDiff) GoString() string

func (*InstanceDiff) Lock added in v0.7.9

func (d *InstanceDiff) Lock()

func (*InstanceDiff) RequiresNew added in v0.3.0

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 added in v0.3.0

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.

func (*InstanceDiff) SetAttribute added in v0.7.0

func (d *InstanceDiff) SetAttribute(key string, attr *ResourceAttrDiff)

func (*InstanceDiff) SetDestroy added in v0.7.0

func (d *InstanceDiff) SetDestroy(b bool)

func (*InstanceDiff) SetDestroyDeposed added in v0.8.0

func (d *InstanceDiff) SetDestroyDeposed(b bool)

func (*InstanceDiff) SetTainted added in v0.7.0

func (d *InstanceDiff) SetTainted(b bool)

These methods are properly locked, for use outside other InstanceDiff methods but everywhere else within in the terraform package. TODO refactor the locking scheme

func (*InstanceDiff) Unlock added in v0.7.9

func (d *InstanceDiff) Unlock()

type InstanceInfo added in v0.3.0

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
	// contains filtered or unexported fields
}

InstanceInfo is used to hold information about the instance and/or resource being modified.

func (*InstanceInfo) HumanId added in v0.3.0

func (i *InstanceInfo) HumanId() string

HumanId is a unique Id that is human-friendly and useful for UI elements.

type InstanceState added in v0.3.0

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"`

	// 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"`

	// Tainted is used to mark a resource for recreation.
	Tainted bool `json:"tainted"`
	// contains filtered or unexported fields
}

InstanceState is used to track the unique state information belonging to a given instance.

func (*InstanceState) DeepCopy added in v0.7.0

func (s *InstanceState) DeepCopy() *InstanceState

func (*InstanceState) Empty added in v0.4.0

func (s *InstanceState) Empty() bool

func (*InstanceState) Equal added in v0.4.0

func (s *InstanceState) Equal(other *InstanceState) bool

func (*InstanceState) Lock added in v0.7.3

func (s *InstanceState) Lock()

func (*InstanceState) MergeDiff added in v0.3.0

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) Set added in v0.7.3

func (s *InstanceState) Set(from *InstanceState)

Copy all the Fields from another InstanceState

func (*InstanceState) String added in v0.3.0

func (s *InstanceState) String() string

func (*InstanceState) Unlock added in v0.7.3

func (s *InstanceState) Unlock()

type InstanceType added in v0.4.0

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 added in v0.4.0

func ParseInstanceType(s string) (InstanceType, error)

func (InstanceType) String added in v0.4.0

func (i InstanceType) String() string

type Interpolater added in v0.4.0

type Interpolater struct {
	Operation          walkOperation
	Module             *module.Tree
	State              *State
	StateLock          *sync.RWMutex
	VariableValues     map[string]interface{}
	VariableValuesLock *sync.Mutex
}

Interpolater is the structure responsible for determining the values for interpolations such as `aws_instance.foo.bar`.

func (*Interpolater) Values added in v0.4.0

Values returns the values for all the variables in the given map.

type InterpolationScope added in v0.4.0

type InterpolationScope struct {
	Path     []string
	Resource *Resource
}

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 added in v0.4.0

type MissingProviderTransformer struct {
	// Providers is the list of providers we support.
	Providers []string

	// AllowAny will not check that a provider is supported before adding
	// it to the graph.
	AllowAny bool

	// Concrete, if set, overrides how the providers are made.
	Concrete ConcreteProviderNodeFunc
}

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 added in v0.4.0

func (t *MissingProviderTransformer) Transform(g *Graph) error

type MissingProvisionerTransformer added in v0.4.0

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.

func (*MissingProvisionerTransformer) Transform added in v0.4.0

func (t *MissingProvisionerTransformer) Transform(g *Graph) error

type MockEvalContext added in v0.4.0

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]interface{}

	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 added in v0.6.0

func (c *MockEvalContext) CloseProvider(n string) error

func (*MockEvalContext) CloseProvisioner added in v0.6.0

func (c *MockEvalContext) CloseProvisioner(n string) error

func (*MockEvalContext) ConfigureProvider added in v0.4.0

func (c *MockEvalContext) ConfigureProvider(n string, cfg *ResourceConfig) error

func (*MockEvalContext) Diff added in v0.4.0

func (c *MockEvalContext) Diff() (*Diff, *sync.RWMutex)

func (*MockEvalContext) Hook added in v0.4.0

func (c *MockEvalContext) Hook(fn func(Hook) (HookAction, error)) error

func (*MockEvalContext) InitProvider added in v0.4.0

func (c *MockEvalContext) InitProvider(n string) (ResourceProvider, error)

func (*MockEvalContext) InitProvisioner added in v0.4.0

func (c *MockEvalContext) InitProvisioner(n string) (ResourceProvisioner, error)

func (*MockEvalContext) Input added in v0.4.0

func (c *MockEvalContext) Input() UIInput

func (*MockEvalContext) Interpolate added in v0.4.0

func (c *MockEvalContext) Interpolate(
	config *config.RawConfig, resource *Resource) (*ResourceConfig, error)

func (*MockEvalContext) ParentProviderConfig added in v0.4.0

func (c *MockEvalContext) ParentProviderConfig(n string) *ResourceConfig

func (*MockEvalContext) Path added in v0.4.0

func (c *MockEvalContext) Path() []string

func (*MockEvalContext) Provider added in v0.4.0

func (c *MockEvalContext) Provider(n string) ResourceProvider

func (*MockEvalContext) ProviderInput added in v0.4.0

func (c *MockEvalContext) ProviderInput(n string) map[string]interface{}

func (*MockEvalContext) Provisioner added in v0.4.0

func (c *MockEvalContext) Provisioner(n string) ResourceProvisioner

func (*MockEvalContext) SetProviderConfig added in v0.4.1

func (c *MockEvalContext) SetProviderConfig(
	n string, cfg *ResourceConfig) error

func (*MockEvalContext) SetProviderInput added in v0.4.0

func (c *MockEvalContext) SetProviderInput(n string, cfg map[string]interface{})

func (*MockEvalContext) SetVariables added in v0.4.0

func (c *MockEvalContext) SetVariables(n string, vs map[string]interface{})

func (*MockEvalContext) State added in v0.4.0

func (c *MockEvalContext) State() (*State, *sync.RWMutex)

type MockHook

type MockHook struct {
	sync.Mutex

	PreApplyCalled bool
	PreApplyInfo   *InstanceInfo
	PreApplyDiff   *InstanceDiff
	PreApplyState  *InstanceState
	PreApplyReturn HookAction
	PreApplyError  error

	PostApplyCalled      bool
	PostApplyInfo        *InstanceInfo
	PostApplyState       *InstanceState
	PostApplyError       error
	PostApplyReturn      HookAction
	PostApplyReturnError error
	PostApplyFn          func(*InstanceInfo, *InstanceState, error) (HookAction, 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

	PreImportStateCalled bool
	PreImportStateInfo   *InstanceInfo
	PreImportStateId     string
	PreImportStateReturn HookAction
	PreImportStateError  error

	PostImportStateCalled bool
	PostImportStateInfo   *InstanceInfo
	PostImportStateState  []*InstanceState
	PostImportStateReturn HookAction
	PostImportStateError  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) PostImportState added in v0.7.0

func (h *MockHook) PostImportState(info *InstanceInfo, s []*InstanceState) (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 added in v0.4.0

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) PreImportState added in v0.7.0

func (h *MockHook) PreImportState(info *InstanceInfo, id string) (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 added in v0.3.0

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
	ReadDataApplyCalled            bool
	ReadDataApplyInfo              *InstanceInfo
	ReadDataApplyDiff              *InstanceDiff
	ReadDataApplyFn                func(*InstanceInfo, *InstanceDiff) (*InstanceState, error)
	ReadDataApplyReturn            *InstanceState
	ReadDataApplyReturnError       error
	ReadDataDiffCalled             bool
	ReadDataDiffInfo               *InstanceInfo
	ReadDataDiffDesired            *ResourceConfig
	ReadDataDiffFn                 func(*InstanceInfo, *ResourceConfig) (*InstanceDiff, error)
	ReadDataDiffReturn             *InstanceDiff
	ReadDataDiffReturnError        error
	StopCalled                     bool
	StopFn                         func() error
	StopReturnError                error
	DataSourcesCalled              bool
	DataSourcesReturn              []DataSource
	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
	ValidateDataSourceFn           func(string, *ResourceConfig) ([]string, []error)
	ValidateDataSourceCalled       bool
	ValidateDataSourceType         string
	ValidateDataSourceConfig       *ResourceConfig
	ValidateDataSourceReturnWarns  []string
	ValidateDataSourceReturnErrors []error

	ImportStateCalled      bool
	ImportStateInfo        *InstanceInfo
	ImportStateID          string
	ImportStateReturn      []*InstanceState
	ImportStateReturnError error
	ImportStateFn          func(*InstanceInfo, string) ([]*InstanceState, 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 added in v0.6.0

func (p *MockResourceProvider) Close() error

func (*MockResourceProvider) Configure

func (p *MockResourceProvider) Configure(c *ResourceConfig) error

func (*MockResourceProvider) DataSources added in v0.7.0

func (p *MockResourceProvider) DataSources() []DataSource

func (*MockResourceProvider) Diff

func (p *MockResourceProvider) Diff(
	info *InstanceInfo,
	state *InstanceState,
	desired *ResourceConfig) (*InstanceDiff, error)

func (*MockResourceProvider) ImportState added in v0.7.0

func (p *MockResourceProvider) ImportState(info *InstanceInfo, id string) ([]*InstanceState, error)

func (*MockResourceProvider) Input added in v0.3.0

func (*MockResourceProvider) ReadDataApply added in v0.7.0

func (p *MockResourceProvider) ReadDataApply(
	info *InstanceInfo,
	d *InstanceDiff) (*InstanceState, error)

func (*MockResourceProvider) ReadDataDiff added in v0.7.0

func (p *MockResourceProvider) ReadDataDiff(
	info *InstanceInfo,
	desired *ResourceConfig) (*InstanceDiff, error)

func (*MockResourceProvider) Refresh

func (*MockResourceProvider) Resources

func (p *MockResourceProvider) Resources() []ResourceType

func (*MockResourceProvider) Stop added in v0.8.0

func (p *MockResourceProvider) Stop() error

func (*MockResourceProvider) Validate

func (p *MockResourceProvider) Validate(c *ResourceConfig) ([]string, []error)

func (*MockResourceProvider) ValidateDataSource added in v0.7.0

func (p *MockResourceProvider) ValidateDataSource(t string, c *ResourceConfig) ([]string, []error)

func (*MockResourceProvider) ValidateResource

func (p *MockResourceProvider) ValidateResource(t string, c *ResourceConfig) ([]string, []error)

type MockResourceProvisioner

type MockResourceProvisioner struct {
	sync.Mutex
	// 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 added in v0.3.0

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.

func (*MockUIInput) Input added in v0.3.0

func (i *MockUIInput) Input(opts *InputOpts) (string, error)

type MockUIOutput added in v0.3.0

type MockUIOutput struct {
	OutputCalled  bool
	OutputMessage string
	OutputFn      func(string)
}

MockUIOutput is an implementation of UIOutput that can be used for tests.

func (*MockUIOutput) Output added in v0.3.0

func (o *MockUIOutput) Output(v string)

type ModuleDestroyTransformerOld added in v0.7.8

type ModuleDestroyTransformerOld 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 (*ModuleDestroyTransformerOld) Transform added in v0.7.8

func (t *ModuleDestroyTransformerOld) Transform(g *Graph) error

type ModuleDiff added in v0.3.0

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 added in v0.3.0

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 added in v0.3.0

func (d *ModuleDiff) Empty() bool

Empty returns true if the diff has no changes within this module.

func (*ModuleDiff) Instances added in v0.3.0

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 added in v0.3.0

func (d *ModuleDiff) IsRoot() bool

IsRoot says whether or not this module diff is for the root module.

func (*ModuleDiff) String added in v0.3.0

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 ModuleState added in v0.3.0

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]*OutputState `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"`
	// contains filtered or unexported fields
}

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 added in v0.4.0

func (m *ModuleState) Equal(other *ModuleState) bool

Equal tests whether one module state is equal to another.

func (*ModuleState) IsDescendent added in v0.7.2

func (m *ModuleState) IsDescendent(other *ModuleState) bool

IsDescendent returns true if other is a descendent of this module.

func (*ModuleState) IsRoot added in v0.3.0

func (m *ModuleState) IsRoot() bool

IsRoot says whether or not this module diff is for the root module.

func (*ModuleState) Lock added in v0.7.3

func (s *ModuleState) Lock()

func (*ModuleState) Orphans added in v0.3.0

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 added in v0.3.0

func (m *ModuleState) String() string

func (*ModuleState) Unlock added in v0.7.3

func (s *ModuleState) Unlock()

func (*ModuleState) View added in v0.3.0

func (m *ModuleState) View(id string) *ModuleState

View returns a view with the given resource prefix.

type ModuleVariableTransformer added in v0.7.8

type ModuleVariableTransformer struct {
	Module *module.Tree

	DisablePrune bool // True if pruning unreferenced should be disabled
}

ModuleVariableTransformer is a GraphTransformer that adds all the variables in the configuration to the graph.

This only adds variables that are referenced by other things in the graph. If a module variable is not referenced, it won't be added to the graph.

func (*ModuleVariableTransformer) Transform added in v0.7.8

func (t *ModuleVariableTransformer) Transform(g *Graph) error

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) PostDiff

func (*NilHook) PostImportState added in v0.7.0

func (*NilHook) PostImportState(*InstanceInfo, []*InstanceState) (HookAction, error)

func (*NilHook)