fwschema

package
v1.3.0 Latest Latest
Warning

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

Go to latest
Published: Jun 7, 2023 License: MPL-2.0 Imports: 13 Imported by: 0

Documentation

Overview

Package fwschema implements shared logic for describing the structure, data types, and behaviors of framework data for data sources, providers, and resources.

Refer to the internal/fwschemadata package for logic built on values based on this schema information.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrPathInsideAtomicAttribute is used with AttributeAtPath is called
	// on a path that doesn't have a schema associated with it, because
	// it's an element, attribute, or block of a complex type, not a nested
	// attribute.
	ErrPathInsideAtomicAttribute = errors.New("path leads to element, attribute, or block of a schema.Attribute that has no schema associated with it")

	// ErrPathIsBlock is used with AttributeAtPath is called on a path is a
	// block, not an attribute. Use blockAtPath on the path instead.
	ErrPathIsBlock = errors.New("path leads to block, not an attribute")
)
View Source
var NumericPrefixRegex = regexp.MustCompile(`^[0-9]`)

NumericPrefixRegex is a regular expression which matches whether a string begins with a numeric (0-9).

View Source
var ReservedProviderAttributeNames = []string{

	"alias",

	"version",
}

ReservedProviderAttributeNames contains the list of root attribute names which should not be included in provider-defined provider schemas since they require practitioners to implement special syntax in their configurations to be usable by the provider.

View Source
var ReservedResourceAttributeNames = []string{

	"connection",

	"count",

	"depends_on",

	"for_each",

	"lifecycle",

	"provider",

	"provisioner",
}

ReservedResourceAttributeNames contains the list of root attribute names which should not be included in provider-defined managed resource and data source schemas since they require practitioners to implement special syntax in their configurations to be usable by the provider resource.

View Source
var ValidAttributeNameRegex = regexp.MustCompile("^[a-z_][a-z0-9_]*$")

ValidAttributeNameRegex contains the regular expression to validate attribute names, which are considered identifiers in the Terraform configuration language.

Hyphen characters (-) are technically valid in identifiers, however they are explicitly not validated due to the provider ecosystem conventionally never including them in attribute names. Introducing them could cause practitioner confusion.

Functions

func AttributeMissingAttributeTypesDiag added in v1.3.0

func AttributeMissingAttributeTypesDiag(attributePath path.Path) diag.Diagnostic

AttributeMissingAttributeTypesDiag returns an error diagnostic to provider developers about missing the AttributeTypes field on an Attribute implementation. This can cause unexpected errors or panics. Reference: https://github.com/hashicorp/terraform-plugin-framework/issues/699

func AttributeMissingElementTypeDiag added in v1.3.0

func AttributeMissingElementTypeDiag(attributePath path.Path) diag.Diagnostic

AttributeMissingElementTypeDiag returns an error diagnostic to provider developers about missing the ElementType field on an Attribute implementation. This can cause unexpected errors or panics. Reference: https://github.com/hashicorp/terraform-plugin-framework/issues/699

func AttributesEqual added in v0.17.0

func AttributesEqual(a, b Attribute) bool

AttributesEqual is a helper function to perform equality testing on two Attribute. Attribute Equal implementations should still compare the concrete types in addition to using this helper.

func BlockPathExpressions added in v1.1.0

func BlockPathExpressions(ctx context.Context, block Block, pathExpression path.Expression) path.Expressions

BlockPathExpressions recursively returns a slice of the current path expression and all underlying path expressions which represent a Block.

func BlocksEqual added in v0.17.0

func BlocksEqual(a, b Block) bool

BlocksEqual is a helper function to perform equality testing on two Block. Attribute Equal implementations should still compare the concrete types in addition to using this helper.

func IsReservedProviderAttributeName added in v1.3.0

func IsReservedProviderAttributeName(name string, attributePath path.Path) diag.Diagnostics

IsReservedProviderAttributeName returns an error diagnostic if the given attribute path represents a root attribute name in ReservedProviderAttributeNames. Other paths are automatically skipped without error.

func IsReservedResourceAttributeName added in v1.3.0

func IsReservedResourceAttributeName(name string, attributePath path.Path) diag.Diagnostics

IsReservedResourceAttributeName returns an error diagnostic if the given attribute path represents a root attribute name in ReservedResourceAttributeNames. Other paths are automatically skipped without error.

func IsValidAttributeName added in v1.3.0

func IsValidAttributeName(name string, attributePath path.Path) diag.Diagnostics

IsValidAttributeName returns an error diagnostic if the given attribute path has an invalid attribute name according to ValidAttributeNameRegex. Non-AttributeName paths are automatically skipped without error.

func NestedAttributeObjectApplyTerraform5AttributePathStep added in v0.17.0

func NestedAttributeObjectApplyTerraform5AttributePathStep(o NestedAttributeObject, step tftypes.AttributePathStep) (any, error)

NestedAttributeObjectApplyTerraform5AttributePathStep is a helper function to perform base tftypes.AttributePathStepper handling using the GetAttributes method. NestedAttributeObject implementations should still include custom type functionality in addition to using this helper.

func NestedAttributeObjectEqual added in v0.17.0

func NestedAttributeObjectEqual(a, b NestedAttributeObject) bool

NestedAttributeObjectEqual is a helper function to perform base equality testing on two NestedAttributeObject. NestedAttributeObject implementations should still compare the concrete types and other custom functionality in addition to using this helper.

func NestedAttributeObjectType added in v0.17.0

func NestedAttributeObjectType(o NestedAttributeObject) basetypes.ObjectTypable

NestedAttributeObjectType is a helper function to perform base type handling using the GetAttributes and GetBlocks methods. NestedAttributeObject implementations should still include custom type functionality in addition to using this helper.

func NestedBlockObjectApplyTerraform5AttributePathStep added in v0.17.0

func NestedBlockObjectApplyTerraform5AttributePathStep(o NestedBlockObject, step tftypes.AttributePathStep) (any, error)

NestedBlockObjectApplyTerraform5AttributePathStep is a helper function to perform base tftypes.AttributePathStepper handling using the GetAttributes and GetBlocks methods. NestedBlockObject implementations should still include custom type functionality in addition to using this helper.

func NestedBlockObjectEqual added in v0.17.0

func NestedBlockObjectEqual(a, b NestedBlockObject) bool

NestedBlockObjectEqual is a helper function to perform base equality testing on two NestedBlockObject. NestedBlockObject implementations should still compare the concrete types and other custom functionality in addition to using this helper.

func NestedBlockObjectType added in v0.17.0

func NestedBlockObjectType(o NestedBlockObject) basetypes.ObjectTypable

NestedBlockObjectType is a helper function to perform base type handling using the GetAttributes and GetBlocks methods. NestedBlockObject implementations should still include custom type functionality in addition to using this helper.

func SchemaApplyTerraform5AttributePathStep added in v0.17.0

func SchemaApplyTerraform5AttributePathStep(s Schema, step tftypes.AttributePathStep) (any, error)

SchemaApplyTerraform5AttributePathStep is a helper function to perform base tftypes.AttributePathStepper handling using the GetAttributes and GetBlocks methods.

func SchemaBlockPathExpressions added in v1.1.0

func SchemaBlockPathExpressions(ctx context.Context, s Schema) path.Expressions

SchemaBlockPathExpressions returns a slice of all path expressions which represent a Block according to the Schema.

func SchemaType added in v0.17.0

func SchemaType(s Schema) attr.Type

SchemaType is a helper function to perform base type handling using the GetAttributes and GetBlocks methods.

func SchemaTypeAtPath added in v0.17.0

func SchemaTypeAtPath(ctx context.Context, s Schema, p path.Path) (attr.Type, diag.Diagnostics)

SchemaTypeAtPath is a helper function to perform base type handling using the TypeAtTerraformPath method.

func SchemaTypeAtTerraformPath added in v0.17.0

func SchemaTypeAtTerraformPath(ctx context.Context, s Schema, p *tftypes.AttributePath) (attr.Type, error)

SchemaTypeAtTerraformPath is a helper function to perform base type handling using the tftypes.AttributePathStepper interface.

func ValidateAttributeImplementation added in v1.3.0

func ValidateAttributeImplementation(ctx context.Context, attribute Attribute, req ValidateImplementationRequest) diag.Diagnostics

ValidateImplementation contains the generic Attribute implementation validation logic for all types.

This logic currently:

  • Checks whether the given AttributeName in the path is a valid identifier
  • If the given Attribute implements the AttributeWithValidateImplementation interface, calls the method
  • If the given Attribute implements the NestedAttribute interface, recursively calls this function on nested attributes

func ValidateBlockImplementation added in v1.3.0

func ValidateBlockImplementation(ctx context.Context, block Block, req ValidateImplementationRequest) diag.Diagnostics

ValidateBlockImplementation contains the generic Block implementation validation logic for all types.

This logic currently:

  • Checks whether the given AttributeName in the path is a valid identifier
  • If the given Block implements the BlockWithValidateImplementation interface, calls the method
  • Recursively calls this function on nested attributes and blocks

Types

type Attribute

type Attribute interface {
	// Implementations should include the tftypes.AttributePathStepper
	// interface methods for proper path and data handling.
	tftypes.AttributePathStepper

	// Equal should return true if the other attribute is exactly equivalent.
	Equal(o Attribute) bool

	// GetDeprecationMessage should return a non-empty string if an attribute
	// is deprecated. This is named differently than DeprecationMessage to
	// prevent a conflict with the tfsdk.Attribute field name.
	GetDeprecationMessage() string

	// GetDescription should return a non-empty string if an attribute
	// has a plaintext description. This is named differently than Description
	// to prevent a conflict with the tfsdk.Attribute field name.
	GetDescription() string

	// GetMarkdownDescription should return a non-empty string if an attribute
	// has a Markdown description. This is named differently than
	// MarkdownDescription to prevent a conflict with the tfsdk.Attribute field
	// name.
	GetMarkdownDescription() string

	// GetType should return the framework type of an attribute. This is named
	// differently than Type to prevent a conflict with the tfsdk.Attribute
	// field name.
	GetType() attr.Type

	// IsComputed should return true if the attribute configuration value is
	// computed. This is named differently than Computed to prevent a conflict
	// with the tfsdk.Attribute field name.
	IsComputed() bool

	// IsOptional should return true if the attribute configuration value is
	// optional. This is named differently than Optional to prevent a conflict
	// with the tfsdk.Attribute field name.
	IsOptional() bool

	// IsRequired should return true if the attribute configuration value is
	// required. This is named differently than Required to prevent a conflict
	// with the tfsdk.Attribute field name.
	IsRequired() bool

	// IsSensitive should return true if the attribute configuration value is
	// sensitive. This is named differently than Sensitive to prevent a
	// conflict with the tfsdk.Attribute field name.
	IsSensitive() bool
}

Attribute is the core interface required for implementing Terraform schema functionality that can accept a value. Refer to NestedAttribute for the additional interface that defines nested attributes.

Refer to the internal/fwschema/fwxschema package for optional interfaces that define framework-specific functionality, such a plan modification and validation.

func SchemaAttributeAtPath added in v0.17.0

func SchemaAttributeAtPath(ctx context.Context, s Schema, p path.Path) (Attribute, diag.Diagnostics)

SchemaAttributeAtPath is a helper function to perform base type handling using the AttributeAtTerraformPath method.

func SchemaAttributeAtTerraformPath added in v0.17.0

func SchemaAttributeAtTerraformPath(ctx context.Context, s Schema, p *tftypes.AttributePath) (Attribute, error)

SchemaAttributeAtTerraformPath is a helper function to perform base type handling using the tftypes.AttributePathStepper interface.

type AttributeWithBoolDefaultValue added in v1.2.0

type AttributeWithBoolDefaultValue interface {
	Attribute

	BoolDefaultValue() defaults.Bool
}

AttributeWithBoolDefaultValue is an optional interface on Attribute which enables Bool default value support.

type AttributeWithFloat64DefaultValue added in v1.2.0

type AttributeWithFloat64DefaultValue interface {
	Attribute

	Float64DefaultValue() defaults.Float64
}

AttributeWithFloat64DefaultValue is an optional interface on Attribute which enables Float64 default value support.

type AttributeWithInt64DefaultValue added in v1.2.0

type AttributeWithInt64DefaultValue interface {
	Attribute

	Int64DefaultValue() defaults.Int64
}

AttributeWithInt64DefaultValue is an optional interface on Attribute which enables Int64 default value support.

type AttributeWithListDefaultValue added in v1.2.0

type AttributeWithListDefaultValue interface {
	Attribute

	ListDefaultValue() defaults.List
}

AttributeWithListDefaultValue is an optional interface on Attribute which enables List default value support.

type AttributeWithMapDefaultValue added in v1.2.0

type AttributeWithMapDefaultValue interface {
	Attribute

	MapDefaultValue() defaults.Map
}

AttributeWithMapDefaultValue is an optional interface on Attribute which enables Map default value support.

type AttributeWithNumberDefaultValue added in v1.2.0

type AttributeWithNumberDefaultValue interface {
	Attribute

	NumberDefaultValue() defaults.Number
}

AttributeWithNumberDefaultValue is an optional interface on Attribute which enables Number default value support.

type AttributeWithObjectDefaultValue added in v1.2.0

type AttributeWithObjectDefaultValue interface {
	Attribute

	ObjectDefaultValue() defaults.Object
}

AttributeWithObjectDefaultValue is an optional interface on Attribute which enables Object default value support.

type AttributeWithSetDefaultValue added in v1.2.0

type AttributeWithSetDefaultValue interface {
	Attribute

	SetDefaultValue() defaults.Set
}

AttributeWithSetDefaultValue is an optional interface on Attribute which enables Set default value support.

type AttributeWithStringDefaultValue added in v1.2.0

type AttributeWithStringDefaultValue interface {
	Attribute

	StringDefaultValue() defaults.String
}

AttributeWithStringDefaultValue is an optional interface on Attribute which enables String default value support.

type AttributeWithValidateImplementation added in v1.3.0

type AttributeWithValidateImplementation interface {
	Attribute

	// ValidateImplementation should contain the logic which validates
	// the Attribute implementation. Since this logic can prevent the provider
	// from being usable, it should be very targeted and defensive against
	// false positives.
	ValidateImplementation(context.Context, ValidateImplementationRequest, *ValidateImplementationResponse)
}

AttributeWithValidateImplementation is an optional interface on Attribute which enables validation of the provider-defined implementation for the Attribute. This logic runs during Validate* RPCs, or via provider-defined unit testing, to ensure the provider's definition is valid before further usage could cause other unexpected errors or panics.

type Block

type Block interface {
	// Implementations should include the tftypes.AttributePathStepper
	// interface methods for proper path and data handling.
	tftypes.AttributePathStepper

	// Equal should return true if the other block is exactly equivalent.
	Equal(o Block) bool

	// GetDeprecationMessage should return a non-empty string if an attribute
	// is deprecated. This is named differently than DeprecationMessage to
	// prevent a conflict with the tfsdk.Attribute field name.
	GetDeprecationMessage() string

	// GetDescription should return a non-empty string if an attribute
	// has a plaintext description. This is named differently than Description
	// to prevent a conflict with the tfsdk.Attribute field name.
	GetDescription() string

	// GetMarkdownDescription should return a non-empty string if an attribute
	// has a Markdown description. This is named differently than
	// MarkdownDescription to prevent a conflict with the tfsdk.Attribute field
	// name.
	GetMarkdownDescription() string

	// GetNestedObject should return the object underneath the block.
	// For single nesting mode, the NestedBlockObject can be generated from
	// the Block.
	GetNestedObject() NestedBlockObject

	// GetNestingMode should return the nesting mode of a block. This is named
	// differently than NestingMode to prevent a conflict with the tfsdk.Block
	// field name.
	GetNestingMode() BlockNestingMode

	// Type should return the framework type of a block.
	Type() attr.Type
}

Block is the core interface required for implementing Terraform schema functionality that structurally holds attributes and blocks. This is intended to be the first abstraction of tfsdk.Block functionality into data source, provider, and resource specific functionality.

Refer to the internal/fwschema/fwxschema package for optional interfaces that define framework-specific functionality, such a plan modification and validation.

Note that MaxItems and MinItems support, while defined in the Terraform protocol, is intentially not present. Terraform can only perform limited static analysis of blocks and errors generated occur before the provider is called for configuration validation, which means that practitioners do not get all configuration errors at the same time. Provider developers can implement validators to achieve the same validation functionality.

type BlockNestingMode

type BlockNestingMode uint8

BlockNestingMode is an enum type of the ways attributes and blocks can be nested in a block. They can be a list or a set.

While the protocol and theoretically Terraform itself support map and group nesting modes, this framework intentionally only supports list, set, and single blocks as those other modes were not typically implemented or tested with Terraform since the older Terraform Plugin SDK did not support them.

const (
	// BlockNestingModeUnknown is an invalid nesting mode, used to catch when a
	// nesting mode is expected and not set.
	BlockNestingModeUnknown BlockNestingMode = 0

	// BlockNestingModeList is for attributes that represent a list of objects,
	// with multiple instances of those attributes nested inside a list
	// under another attribute.
	BlockNestingModeList BlockNestingMode = 1

	// BlockNestingModeSet is for attributes that represent a set of objects,
	// with multiple, unique instances of those attributes nested inside a
	// set under another attribute.
	BlockNestingModeSet BlockNestingMode = 2

	// BlockNestingModeSingle is for attributes that represent a single object.
	// The object cannot be repeated in the practitioner configuration.
	//
	// While the framework implements support for this block nesting mode, it
	// is not thoroughly tested in production Terraform environments beyond the
	// resource timeouts block from the older Terraform Plugin SDK. Use single
	// nested attributes for new implementations instead.
	BlockNestingModeSingle BlockNestingMode = 3
)

type BlockWithValidateImplementation added in v1.3.0

type BlockWithValidateImplementation interface {
	Block

	// ValidateImplementation should contain the logic which validates
	// the Block implementation. Since this logic can prevent the provider
	// from being usable, it should be very targeted and defensive against
	// false positives.
	ValidateImplementation(context.Context, ValidateImplementationRequest, *ValidateImplementationResponse)
}

BlockWithValidateImplementation is an optional interface on Block which enables validation of the provider-defined implementation for the Block. This logic runs during Validate* RPCs, or via provider-defined unit testing, to ensure the provider's definition is valid before further usage could cause other unexpected errors or panics.

type NestedAttribute added in v0.17.0

type NestedAttribute interface {
	Attribute

	// GetNestedObject should return the object underneath the nested
	// attribute. For single nesting mode, the NestedAttributeObject can be
	// generated from the Attribute.
	GetNestedObject() NestedAttributeObject

	// GetNestingMode should return the nesting mode (list, map, set, or
	// single) of the nested attributes or left unset if this Attribute
	// does not represent nested attributes.
	GetNestingMode() NestingMode
}

NestedAttribute defines a schema attribute that contains nested attributes.

type NestedAttributeObject added in v0.17.0

type NestedAttributeObject interface {
	tftypes.AttributePathStepper

	// Equal should return true if given NestedAttributeObject is equivalent.
	Equal(NestedAttributeObject) bool

	// GetAttributes should return the nested attributes of an attribute.
	GetAttributes() UnderlyingAttributes

	// Type should return the framework type of the object.
	Type() basetypes.ObjectTypable
}

NestedAttributeObject represents the Object inside a NestedAttribute. Refer to the fwxschema package for validation and plan modification extensions to this interface.

type NestedBlockObject added in v0.17.0

type NestedBlockObject interface {
	tftypes.AttributePathStepper

	// Equal should return true if given NestedBlockObject is equivalent.
	Equal(NestedBlockObject) bool

	// GetAttributes should return the nested attributes of the object.
	GetAttributes() UnderlyingAttributes

	// GetBlocks should return the nested attributes of the object.
	GetBlocks() map[string]Block

	// Type should return the framework type of the object.
	Type() basetypes.ObjectTypable
}

NestedBlockObject represents the Object inside a Block. Refer to the fwxschema package for validation and plan modification extensions to this interface.

type NestingMode

type NestingMode uint8

NestingMode is an enum type of the ways nested attributes can be nested in an attribute. They can be a list, a set, a map (with string keys), or they can be nested directly, like an object.

const (
	// NestingModeUnknown is an invalid nesting mode, used to catch when a
	// nesting mode is expected and not set.
	NestingModeUnknown NestingMode = 0

	// NestingModeSingle is for attributes that represent a struct or
	// object, a single instance of those attributes directly nested under
	// another attribute.
	NestingModeSingle NestingMode = 1

	// NestingModeList is for attributes that represent a list of objects,
	// with multiple instances of those attributes nested inside a list
	// under another attribute.
	NestingModeList NestingMode = 2

	// NestingModeSet is for attributes that represent a set of objects,
	// with multiple, unique instances of those attributes nested inside a
	// set under another attribute.
	NestingModeSet NestingMode = 3

	// NestingModeMap is for attributes that represent a map of objects,
	// with multiple instances of those attributes, each associated with a
	// unique string key, nested inside a map under another attribute.
	NestingModeMap NestingMode = 4
)

type Schema

type Schema interface {
	// Implementations should include the tftypes.AttributePathStepper
	// interface methods for proper path and data handling.
	tftypes.AttributePathStepper

	// AttributeAtPath should return the Attribute at the given path or return
	// an error.
	AttributeAtPath(context.Context, path.Path) (Attribute, diag.Diagnostics)

	// AttributeAtTerraformPath should return the Attribute at the given
	// Terraform path or return an error.
	AttributeAtTerraformPath(context.Context, *tftypes.AttributePath) (Attribute, error)

	// GetAttributes should return the attributes of a schema. This is named
	// differently than Attributes to prevent a conflict with the tfsdk.Schema
	// field name.
	GetAttributes() map[string]Attribute

	// GetBlocks should return the blocks of a schema. This is named
	// differently than Blocks to prevent a conflict with the tfsdk.Schema
	// field name.
	GetBlocks() map[string]Block

	// GetDeprecationMessage should return a non-empty string if a schema
	// is deprecated. This is named differently than DeprecationMessage to
	// prevent a conflict with the tfsdk.Schema field name.
	GetDeprecationMessage() string

	// GetDescription should return a non-empty string if a schema has a
	// plaintext description. This is named differently than Description
	// to prevent a conflict with the tfsdk.Schema field name.
	GetDescription() string

	// GetMarkdownDescription should return a non-empty string if a schema has
	// a Markdown description. This is named differently than
	// MarkdownDescription to prevent a conflict with the tfsdk.Schema field
	// name.
	GetMarkdownDescription() string

	// GetVersion should return the version of a schema. This is named
	// differently than Version to prevent a conflict with the tfsdk.Schema
	// field name.
	GetVersion() int64

	// Type should return the framework type of the schema.
	Type() attr.Type

	// TypeAtPath should return the framework type of the Attribute at the
	// the given path or return an error.
	TypeAtPath(context.Context, path.Path) (attr.Type, diag.Diagnostics)

	// AttributeTypeAtPath should return the framework type of the Attribute at
	// the given Terraform path or return an error.
	TypeAtTerraformPath(context.Context, *tftypes.AttributePath) (attr.Type, error)
}

Schema is the core interface required for data sources, providers, and resources.

type UnderlyingAttributes

type UnderlyingAttributes map[string]Attribute

UnderlyingAttributes represents attributes under a nested attribute.

func (UnderlyingAttributes) ApplyTerraform5AttributePathStep

func (u UnderlyingAttributes) ApplyTerraform5AttributePathStep(step tftypes.AttributePathStep) (any, error)

ApplyTerraform5AttributePathStep performs an AttributeName step on the underlying attributes or returns an error.

func (UnderlyingAttributes) Equal added in v0.17.0

Equal returns true if all underlying attributes are equal.

func (UnderlyingAttributes) Type

Type returns the framework type of the underlying attributes.

type ValidateImplementationRequest added in v1.3.0

type ValidateImplementationRequest struct {
	// Name contains the current Attribute name.
	Name string

	// Path contains the current Attribute path. This path information is
	// synthesized for any Attribute which is nested below other Attribute or
	// Block since path.Path is intended to represent actual data, but schema
	// paths represent any element in collection types. Rather than being
	// intended for diagnostic paths, like most path information, this is
	// intended for being stringified into diagnostic details.
	Path path.Path
}

ValidateImplementationRequest contains the information available during a ValidateImplementation call to validate the Attribute definition. ValidateImplementationResponse is the type used for responses.

type ValidateImplementationResponse added in v1.3.0

type ValidateImplementationResponse struct {
	// Diagnostics report errors or warnings related to validating the
	// definition of the Attribute. An empty slice indicates success, with no
	// warnings or errors generated.
	Diagnostics diag.Diagnostics
}

ValidateImplementationResponse contains the returned data from a ValidateImplementation method call to validate the Attribute implementation. ValidateImplementationRequest is the type used for requests.

Directories

Path Synopsis
Package fwxschema implements extra framework-based schema functionality on top of base Terraform attribute functionality.
Package fwxschema implements extra framework-based schema functionality on top of base Terraform attribute functionality.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL