Documentation ¶
Index ¶
- func References(traversals []hcl.Traversal) ([]*addrs.Reference, hcl.Diagnostics)
- func ReferencesInExpr(expr hcl.Expression) ([]*addrs.Reference, hcl.Diagnostics)
- type Data
- type Scope
- func (s *Scope) EvalContext(refs []*addrs.Reference) (*hcl.EvalContext, hcl.Diagnostics)
- func (s *Scope) EvalExpr(expr hcl.Expression, wantType cty.Type) (cty.Value, hcl.Diagnostics)
- func (s *Scope) ExpandBlock(body hcl.Body, schema *hclext.BodySchema) (hcl.Body, hcl.Diagnostics)
- func (s *Scope) Functions() map[string]function.Function
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func References ¶
References finds all of the references in the given set of traversals, returning diagnostics if any of the traversals cannot be interpreted as a reference.
This function does not do any de-duplication of references, since references have source location information embedded in them and so any invalid references that are duplicated should have errors reported for each occurence.
If the returned diagnostics contains errors then the result may be incomplete or invalid. Otherwise, the returned slice has one reference per given traversal, though it is not guaranteed that the references will appear in the same order as the given traversals.
func ReferencesInExpr ¶
ReferencesInExpr is a helper wrapper around References that first searches the given expression for traversals, before converting those traversals to references.
Types ¶
type Data ¶
type Data interface { GetCountAttr(addrs.CountAttr, hcl.Range) (cty.Value, hcl.Diagnostics) GetForEachAttr(addrs.ForEachAttr, hcl.Range) (cty.Value, hcl.Diagnostics) GetLocalValue(addrs.LocalValue, hcl.Range) (cty.Value, hcl.Diagnostics) GetPathAttr(addrs.PathAttr, hcl.Range) (cty.Value, hcl.Diagnostics) GetTerraformAttr(addrs.TerraformAttr, hcl.Range) (cty.Value, hcl.Diagnostics) GetInputVariable(addrs.InputVariable, hcl.Range) (cty.Value, hcl.Diagnostics) }
Data is an interface whose implementations can provide cty.Value representations of objects identified by referenceable addresses from the addrs package.
This interface will grow each time a new type of reference is added, and so implementations outside of the Terraform codebases are not advised.
Each method returns a suitable value and optionally some diagnostics. If the returned diagnostics contains errors then the type of the returned value is used to construct an unknown value of the same type which is then used in place of the requested object so that type checking can still proceed. In cases where it's not possible to even determine a suitable result type, cty.DynamicVal is returned along with errors describing the problem.
type Scope ¶
type Scope struct { // Data is used to resolve references in expressions. Data Data // SelfAddr is the address that the "self" object should be an alias of, // or nil if the "self" object should not be available at all. SelfAddr addrs.Referenceable // BaseDir is the base directory used by any interpolation functions that // accept filesystem paths as arguments. BaseDir string // PureOnly can be set to true to request that any non-pure functions // produce unknown value results rather than actually executing. This is // important during a plan phase to avoid generating results that could // then differ during apply. PureOnly bool // contains filtered or unexported fields }
Scope is the main type in this package, allowing dynamic evaluation of blocks and expressions based on some contextual information that informs which variables and functions will be available.
func (*Scope) EvalContext ¶
EvalContext constructs a HCL expression evaluation context whose variable scope contains sufficient values to satisfy the given set of references.
Most callers should prefer to use the evaluation helper methods that this type offers, but this is here for less common situations where the caller will handle the evaluation calls itself.
func (*Scope) EvalExpr ¶
EvalExpr evaluates a single expression in the receiving context and returns the resulting value. The value will be converted to the given type before it is returned if possible, or else an error diagnostic will be produced describing the conversion error.
Pass an expected type of cty.DynamicPseudoType to skip automatic conversion and just obtain the returned value directly.
If the returned diagnostics contains errors then the result may be incomplete, but will always be of the requested type.
func (*Scope) ExpandBlock ¶
func (s *Scope) ExpandBlock(body hcl.Body, schema *hclext.BodySchema) (hcl.Body, hcl.Diagnostics)
ExpandBlock expands "dynamic" blocks and resources/modules with count/for_each. Note that Terraform only expands dynamic blocks, but TFLint also expands count/for_each here.
Expressions in expanded blocks are evaluated immediately, so all variables contained in attributes specified in the body schema are gathered.