Documentation ¶
Overview ¶
Package configschema contains types for describing the expected structure of a configuration block whose shape is not known until runtime.
For example, this is used to describe the expected contents of a resource configuration block, which is defined by the corresponding provider plugin and thus not compiled into Terraform core.
A configschema primarily describes the shape of configuration, but it is also suitable for use with other structures derived from the configuration, such as the cached state of a resource or a resource diff.
This package should not be confused with the package helper/schema, which is the higher-level helper library used to implement providers themselves.
Index ¶
- type Attribute
- type Block
- func (b *Block) CoerceValue(in cty.Value) (cty.Value, error)
- func (b *Block) ContainsSensitive() bool
- func (b *Block) DecoderSpec() hcldec.Spec
- func (b *Block) ImpliedType() cty.Type
- func (b *Block) InternalValidate() error
- func (b *Block) NoneRequired() *Block
- func (b *Block) StaticValidateTraversal(traversal hcl.Traversal) tfdiags.Diagnostics
- type NestedBlock
- type NestingMode
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Attribute ¶
type Attribute struct { // Type is a type specification that the attribute's value must conform to. Type cty.Type // Description is an English-language description of the purpose and // usage of the attribute. A description should be concise and use only // one or two sentences, leaving full definition to longer-form // documentation defined elsewhere. Description string // Required, if set to true, specifies that an omitted or null value is // not permitted. Required bool // Optional, if set to true, specifies that an omitted or null value is // permitted. This field conflicts with Required. Optional bool // Computed, if set to true, specifies that the value comes from the // provider rather than from configuration. If combined with Optional, // then the config may optionally provide an overridden value. Computed bool // Sensitive, if set to true, indicates that an attribute may contain // sensitive information. // // At present nothing is done with this information, but callers are // encouraged to set it where appropriate so that it may be used in the // future to help Terraform mask sensitive information. (Terraform // currently achieves this in a limited sense via other mechanisms.) Sensitive bool }
Attribute represents a configuration attribute, within a block.
type Block ¶
type Block struct { // Attributes describes any attributes that may appear directly inside // the block. Attributes map[string]*Attribute // BlockTypes describes any nested block types that may appear directly // inside the block. BlockTypes map[string]*NestedBlock }
Block represents a configuration block.
"Block" here is a logical grouping construct, though it happens to map directly onto the physical block syntax of Terraform's native configuration syntax. It may be a more a matter of convention in other syntaxes, such as JSON.
When converted to a value, a Block always becomes an instance of an object type derived from its defined attributes and nested blocks
func (*Block) CoerceValue ¶
CoerceValue attempts to force the given value to conform to the type implied by the receiever, while also applying the same validation and transformation rules that would be applied by the decoder specification returned by method DecoderSpec.
This is useful in situations where a configuration must be derived from an already-decoded value. It is always better to decode directly from configuration where possible since then source location information is still available to produce diagnostics, but in special situations this function allows a compatible result to be obtained even if the configuration objects are not available.
If the given value cannot be converted to conform to the receiving schema then an error is returned describing one of possibly many problems. This error may be a cty.PathError indicating a position within the nested data structure where the problem applies.
func (*Block) ContainsSensitive ¶
ContainsSensitive returns true if any of the attributes of the receiving block or any of its descendent blocks are marked as sensitive.
Blocks themselves cannot be sensitive as a whole -- sensitivity is a per-attribute idea -- but sometimes we want to include a whole object decoded from a block in some UI output, and that is safe to do only if none of the contained attributes are sensitive.
func (*Block) DecoderSpec ¶
DecoderSpec returns a hcldec.Spec that can be used to decode a HCL Body using the facilities in the hcldec package.
The returned specification is guaranteed to return a value of the same type returned by method ImpliedType, but it may contain null values if any of the block attributes are defined as optional and/or computed respectively.
func (*Block) ImpliedType ¶
ImpliedType returns the cty.Type that would result from decoding a configuration block using the receiving block schema.
ImpliedType always returns a result, even if the given schema is inconsistent. Code that creates configschema.Block objects should be tested using the InternalValidate method to detect any inconsistencies that would cause this method to fall back on defaults and assumptions.
func (*Block) InternalValidate ¶
InternalValidate returns an error if the receiving block and its child schema definitions have any consistencies with the documented rules for valid schema.
This is intended to be used within unit tests to detect when a given schema is invalid.
func (*Block) NoneRequired ¶
NoneRequired returns a deep copy of the receiver with any required attributes translated to optional.
func (*Block) StaticValidateTraversal ¶
func (b *Block) StaticValidateTraversal(traversal hcl.Traversal) tfdiags.Diagnostics
StaticValidateTraversal checks whether the given traversal (which must be relative) refers to a construct in the receiving schema, returning error diagnostics if any problems are found.
This method is "optimistic" in that it will not return errors for possible problems that cannot be detected statically. It is possible that an traversal which passed static validation will still fail when evaluated.
type NestedBlock ¶
type NestedBlock struct { // Block is the description of the block that's nested. Block // Nesting provides the nesting mode for the child block, which determines // how many instances of the block are allowed, how many labels it expects, // and how the resulting data will be converted into a data structure. Nesting NestingMode // MinItems and MaxItems set, for the NestingList and NestingSet nesting // modes, lower and upper limits on the number of child blocks allowed // of the given type. If both are left at zero, no limit is applied. // // As a special case, both values can be set to 1 for NestingSingle in // order to indicate that a particular single block is required. // // These fields are ignored for other nesting modes and must both be left // at zero. MinItems, MaxItems int }
NestedBlock represents the embedding of one block within another.
type NestingMode ¶
type NestingMode int
NestingMode is an enumeration of modes for nesting blocks inside other blocks.
const ( // NestingSingle indicates that only a single instance of a given // block type is permitted, with no labels, and its content should be // provided directly as an object value. NestingSingle NestingMode // NestingList indicates that multiple blocks of the given type are // permitted, with no labels, and that their corresponding objects should // be provided in a list. NestingList // NestingSet indicates that multiple blocks of the given type are // permitted, with no labels, and that their corresponding objects should // be provided in a set. NestingSet // NestingMap indicates that multiple blocks of the given type are // permitted, each with a single label, and that their corresponding // objects should be provided in a map whose keys are the labels. // // It's an error, therefore, to use the same label value on multiple // blocks. NestingMap )
func (NestingMode) String ¶
func (i NestingMode) String() string