]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blobdiff - vendor/github.com/hashicorp/terraform/terraform/eval_context.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / terraform / eval_context.go
index 86481dedb4bedac1219d2b58f673a7f4a0b424c6..08f3059e263b979607ab512b74f045662ce9f368 100644 (file)
@@ -1,9 +1,16 @@
 package terraform
 
 import (
-       "sync"
-
-       "github.com/hashicorp/terraform/config"
+       "github.com/hashicorp/hcl2/hcl"
+       "github.com/hashicorp/terraform/addrs"
+       "github.com/hashicorp/terraform/configs/configschema"
+       "github.com/hashicorp/terraform/lang"
+       "github.com/hashicorp/terraform/plans"
+       "github.com/hashicorp/terraform/providers"
+       "github.com/hashicorp/terraform/provisioners"
+       "github.com/hashicorp/terraform/states"
+       "github.com/hashicorp/terraform/tfdiags"
+       "github.com/zclconf/go-cty/cty"
 )
 
 // EvalContext is the interface that is given to eval nodes to execute.
@@ -13,7 +20,7 @@ type EvalContext interface {
        Stopped() <-chan struct{}
 
        // Path is the current module path.
-       Path() []string
+       Path() addrs.ModuleInstance
 
        // 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.
@@ -22,68 +29,105 @@ type EvalContext interface {
        // Input is the UIInput object for interacting with the UI.
        Input() UIInput
 
-       // InitProvider initializes the provider with the given type and name, and
+       // InitProvider initializes the provider with the given type and address, and
        // returns the implementation of the resource provider or an error.
        //
        // It is an error to initialize the same provider more than once.
-       InitProvider(typ string, name string) (ResourceProvider, error)
+       InitProvider(typ string, addr addrs.ProviderConfig) (providers.Interface, error)
 
-       // Provider gets the provider instance with the given name (already
+       // Provider gets the provider instance with the given address (already
        // initialized) or returns nil if the provider isn't initialized.
-       Provider(string) ResourceProvider
+       //
+       // This method expects an _absolute_ provider configuration address, since
+       // resources in one module are able to use providers from other modules.
+       // InitProvider must've been called on the EvalContext of the module
+       // that owns the given provider before calling this method.
+       Provider(addrs.AbsProviderConfig) providers.Interface
+
+       // ProviderSchema retrieves the schema for a particular provider, which
+       // must have already been initialized with InitProvider.
+       //
+       // This method expects an _absolute_ provider configuration address, since
+       // resources in one module are able to use providers from other modules.
+       ProviderSchema(addrs.AbsProviderConfig) *ProviderSchema
 
        // CloseProvider closes provider connections that aren't needed anymore.
-       CloseProvider(string) error
+       CloseProvider(addrs.ProviderConfig) 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
+       ConfigureProvider(addrs.ProviderConfig, cty.Value) tfdiags.Diagnostics
 
        // ProviderInput and SetProviderInput are used to configure providers
        // from user input.
-       ProviderInput(string) map[string]interface{}
-       SetProviderInput(string, map[string]interface{})
+       ProviderInput(addrs.ProviderConfig) map[string]cty.Value
+       SetProviderInput(addrs.ProviderConfig, map[string]cty.Value)
 
        // 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)
+       InitProvisioner(string) (provisioners.Interface, error)
 
        // Provisioner gets the provisioner instance with the given name (already
        // initialized) or returns nil if the provisioner isn't initialized.
-       Provisioner(string) ResourceProvisioner
+       Provisioner(string) provisioners.Interface
+
+       // ProvisionerSchema retrieves the main configuration schema for a
+       // particular provisioner, which must have already been initialized with
+       // InitProvisioner.
+       ProvisionerSchema(string) *configschema.Block
 
        // 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.
+       // EvaluateBlock takes the given raw configuration block and associated
+       // schema and evaluates it to produce a value of an object type that
+       // conforms to the implied type of the schema.
+       //
+       // The "self" argument is optional. If given, it is the referenceable
+       // address that the name "self" should behave as an alias for when
+       // evaluating. Set this to nil if the "self" object should not be available.
+       //
+       // The "key" argument is also optional. If given, it is the instance key
+       // of the current object within the multi-instance container it belongs
+       // to. For example, on a resource block with "count" set this should be
+       // set to a different addrs.IntKey for each instance created from that
+       // block. Set this to addrs.NoKey if not appropriate.
+       //
+       // The returned body is an expanded version of the given body, with any
+       // "dynamic" blocks replaced with zero or more static blocks. This can be
+       // used to extract correct source location information about attributes of
+       // the returned object value.
+       EvaluateBlock(body hcl.Body, schema *configschema.Block, self addrs.Referenceable, keyData InstanceKeyEvalData) (cty.Value, hcl.Body, tfdiags.Diagnostics)
+
+       // EvaluateExpr takes the given HCL expression and evaluates it to produce
+       // a value.
+       //
+       // The "self" argument is optional. If given, it is the referenceable
+       // address that the name "self" should behave as an alias for when
+       // evaluating. Set this to nil if the "self" object should not be available.
+       EvaluateExpr(expr hcl.Expression, wantType cty.Type, self addrs.Referenceable) (cty.Value, tfdiags.Diagnostics)
+
+       // EvaluationScope returns a scope that can be used to evaluate reference
+       // addresses in this context.
+       EvaluationScope(self addrs.Referenceable, keyData InstanceKeyEvalData) *lang.Scope
+
+       // SetModuleCallArguments defines values for the variables of a particular
+       // child module call.
        //
-       // The resource argument is optional. If given, it is the resource
-       // that is currently being acted upon.
-       Interpolate(*config.RawConfig, *Resource) (*ResourceConfig, error)
-
-       // InterpolateProvider takes a ProviderConfig and interpolates it with the
-       // stored interpolation scope. Since provider configurations can be
-       // inherited, the interpolation scope may be different from the current
-       // context path. Interplation is otherwise executed the same as in the
-       // Interpolation method.
-       InterpolateProvider(*config.ProviderConfig, *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)
+       // Calling this function multiple times has merging behavior, keeping any
+       // previously-set keys that are not present in the new map.
+       SetModuleCallArguments(addrs.ModuleCallInstance, map[string]cty.Value)
+
+       // Changes returns the writer object that can be used to write new proposed
+       // changes into the global changes set.
+       Changes() *plans.ChangesSync
+
+       // State returns a wrapper object that provides safe concurrent access to
+       // the global state.
+       State() *states.SyncState
 }