NOTES:
- Framework reflection logic (
Config.Get
,Plan.Get
, etc.) for structs withtfsdk
field tags has been updated to support embedded structs that promote exported fields. For existing structs that embed unexported structs with exported fields, a tfsdk ignore tag (tfsdk:"-"
) can be added to ignore all promoted fields.
For example, the following struct will now return an error diagnostic:
type thingResourceModel struct {
Attr1 types.String `tfsdk:"attr_1"`
Attr2 types.Bool `tfsdk:"attr_2"`
// Previously, this embedded struct was ignored, will now promote underlying fields
embeddedModel
}
type embeddedModel struct {
// No `tfsdk` tag
ExportedField string
}
To preserve the original behavior, a tfsdk ignore tag can be added to ignore the entire embedded struct:
type thingResourceModel struct {
Attr1 types.String `tfsdk:"attr_1"`
Attr2 types.Bool `tfsdk:"attr_2"`
// This embedded struct will now be ignored
embeddedModel `tfsdk:"-"`
}
type embeddedModel struct {
ExportedField string
}
(#1021)
ENHANCEMENTS:
- all: Added embedded struct support for object to struct conversions with
tfsdk
tags (#1021)
FEATURES:
- types/basetypes: Added
Int32Type
andInt32Value
implementations for Int32 value handling. (#1010) - types/basetypes: Added interfaces
basetypes.Int32Typable
,basetypes.Int32Valuable
, andbasetypes.Int32ValuableWithSemanticEquals
for Int32 custom type and value implementations. (#1010) - resource/schema: Added
Int32Attribute
implementation for Int32 value handling. (#1010) - datasource/schema: Added
Int32Attribute
implementation for Int32 value handling. (#1010) - provider/schema: Added
Int32Attribute
implementation for Int32 value handling. (#1010) - function: Added
Int32Parameter
andInt32Return
for Int32 value handling. (#1010) - resource/schema/int32default: New package with
StaticValue
implementation for Int32 schema-based default values. (#1010) - resource/schema/int32planmodifier: New package with built-in implementations for Int32 value plan modification. (#1010)
- resource/schema/defaults: New
Int32
interface for Int32 schema-based default implementations. (#1010) - resource/schema/planmodifier: New
Int32
interface for Int32 value plan modification implementations. (#1010) - schema/validator: New
Int32
interface for Int32 value schema validation. (#1010) - types/basetypes: Added
Float32Type
andFloat32Value
implementations for Float32 value handling. (#1014) - types/basetypes: Added interfaces
basetypes.Float32Typable
,basetypes.Float32Valuable
, andbasetypes.Float32ValuableWithSemanticEquals
for Float32 custom type and value implementations. (#1014) - resource/schema: Added
Float32Attribute
implementation for Float32 value handling. (#1014) - datasource/schema: Added
Float32Attribute
implementation for Float32 value handling. (#1014) - provider/schema: Added
Float32Attribute
implementation for Float32 value handling. (#1014) - function: Added
Float32Parameter
andFloat32Return
for Float32 value handling. (#1014) - resource/schema/float32default: New package with
StaticValue
implementation for Float32 schema-based default values. (#1014) - resource/schema/float32planmodifier: New package with built-in implementations for Float32 value plan modification. (#1014)
- resource/schema/defaults: New
Float32
interface for Float32 schema-based default implementations. (#1014) - resource/schema/planmodifier: New
Float32
interface for Float32 value plan modification implementations. (#1014) - schema/validator: New
Float32
interface for Float32 value schema validation. (#1014)
NOTES:
- resource: If plan modification was dependent on nested attribute plan modification automatically running when the nested object was null/unknown, it may be necessary to add object-level plan modification to convert the nested object to a known object first. (#995)
- This release contains support for deferred actions, which is an experimental feature only available in prerelease builds of Terraform 1.9 and later. This functionality is subject to change and is not protected by version compatibility guarantees. (#999)
FEATURES:
- resource: Add
Deferred
field toReadResponse
,ModifyPlanResponse
, andImportStateResponse
which indicates a resource deferred action to the Terraform client (#999) - datasource: Add
Deferred
field toReadResponse
which indicates a data source deferred action to the Terraform client (#999) - resource: Add
ClientCapabilities
field toReadRequest
,ModifyPlanRequest
, andImportStateRequest
which specifies optionally supported protocol features for the Terraform client (#999) - datasource: Add
ClientCapabilities
field toReadRequest
which specifies optionally supported protocol features for the Terraform client (#999) - provider: Add
Deferred
field toConfigureResponse
which indicates a provider deferred action to the Terraform client (#1002) - provider: Add
ClientCapabilities
field toConfigureRequest
which specifies optionally supported protocol features for the Terraform client (#1002)
ENHANCEMENTS:
- function: Introduced implementation errors for collection and object parameters and returns which are missing type information (#991)
BUG FIXES:
- resource: Prevented errant collection-based nested object conversion from null/unknown object to known object (#995)
BREAKING CHANGES:
- function: Removed
Definition
typeParameter()
method (#968)
NOTES:
- function: Provider-defined function features are now considered generally available and protected by compatibility promises (#966)
- attr/xattr: The
TypeWithValidate
interface has been deprecated in preference of theValidateableAttribute
interface. AValidatableParameter
interface has also been added to thefunction
package (#968)
FEATURES:
- attr/xattr: Added
ValidateableAttribute
interface for custom value type implementations (#968) - function: Added
ValidateableParameter
interface for custom value type implementations (#968) function
: AddBoolParameterValidator
,DynamicParameterValidator
,Float64ParameterValidator
,Int64ParameterValidator
,ListParameterValidator
,MapParameterValidator
,NumberParameterValidator
,ObjectParameterValidator
,SetParameterValidator
, andStringParameterValidator
interfaces for custom function parameter validation implementations. (#971)function
: AddParameterWithBoolValidators
,ParameterWithInt64Validators
,ParameterWithFloat64Validators
,ParameterWithDynamicValidators
,ParameterWithListValidators
,ParameterWithMapValidators
,ParameterWithNumberValidators
,ParameterWithObjectValidators
,ParameterWithSetValidators
, andParameterWithStringValidators
interfaces to enable parameter-based validation support (#971)
BUG FIXES:
- types/basetypes: Prevented panic in the
MapValue
typesEqual
method when the receiver has a nilelementType
(#961) - types/basetypes: Prevented panic in the
ListValue
typesEqual
method when the receiver has a nilelementType
(#961) - types/basetypes: Prevented panic in the
SetValue
typesEqual
method when the receiver has a nilelementType
(#961) - resource: Ensured computed-only dynamic attributes will not cause
wrong final value type
errors during planning (#969)
BREAKING CHANGES:
- function: All parameters must be explicitly named via the
Name
field (#964) - function:
DefaultParameterNamePrefix
andDefaultVariadicParameterName
constants have been removed (#964)
FEATURES:
- types/basetypes: Added
DynamicType
andDynamicValue
implementations for dynamic value handling (#147) - types/basetypes: Added interfaces
basetypes.DynamicTypable
,basetypes.DynamicValuable
, andbasetypes.DynamicValuableWithSemanticEquals
for dynamic custom type and value implementations (#147) - resource/schema: Added
DynamicAttribute
implementation for dynamic value handling (#147) - datasource/schema: Added
DynamicAttribute
implementation for dynamic value handling (#147) - provider/schema: Added
DynamicAttribute
implementation for dynamic value handling (#147) - function: Added
DynamicParameter
andDynamicReturn
for dynamic value handling` (#147) - resource/schema/dynamicdefault: New package with
StaticValue
implementation for dynamic schema-based default values (#147) - resource/schema/dynamicplanmodifier: New package with built-in implementations for dynamic value plan modification. (#147)
- resource/schema/defaults: New
Dynamic
interface for dynamic schema-based default implementations (#147) - resource/schema/planmodifier: New
Dynamic
interface for dynamic value plan modification implementations (#147) - schema/validator: New
Dynamic
interface for dynamic value schema validation (#147)
NOTES:
- all: The
v1.6.0
release updated this Go module to Go 1.21 per the Go support policy. It is recommended to review the Go 1.21 release notes before upgrading. Any consumers building on earlier Go versions may experience errors (#937)
BUG FIXES:
- resource/schema: Ensured invalid attribute default value errors are raised (#930)
- function: Added implementation validation to
function.Definition
to ensure all parameter names (including the variadic parameter) are unique. (#926) - function: Updated the default parameter name to include the position of the parameter (i.e.
param1
,param2
, etc.). Variadic parameters will default tovarparam
. (#926)
BREAKING CHANGES:
- function: Changed the framework type for variadic parameters to
types.TupleType
, where each element is the same element type. Provider-defined functions using atypes.List
for retrieving variadic argument data will need to update their code to usetypes.Tuple
. (#923) - function: Altered the
RunResponse
type, replacingDiagnostics
withFuncError
(#925) - diag: Removed
DiagnosticWithFunctionArgument
interface. RemovedNewArgumentErrorDiagnostic()
,NewArgumentWarningDiagnostic()
andWithFunctionArgument()
functions. RemovedAddArgumentError()
andAddArgumentWarning()
methods fromDiagnostics
. (#925)
FEATURES:
- resource: Added the
ResourceWithMoveState
interface, which enables state moves across resource types with Terraform 1.8 and later (#917)
ENHANCEMENTS:
- privatestate: Added support for
SetKey()
method to fully remove key withnil
or zero-length value (#910) - function: Added
FuncError
type, required forRunResponse
(#925) - function: Added
NewFuncError()
andNewArgumentFuncError()
functions, which create aFuncError
(#925) - function: Added
ConcatFuncErrors()
andFuncErrorFromDiags()
helper functions for use when working withFuncError
(#925)
NOTES:
- all: Update
google.golang.org/grpc
dependency to address CVE-2023-44487 (#865) - Provider-defined function support is in technical preview and offered without compatibility promises until Terraform 1.8 is generally available. (#889)
FEATURES:
- function: New package for implementing provider defined functions (#889)
ENHANCEMENTS:
- types/basetypes: Added
TupleType
andTupleValue
implementations, which are only necessary for dynamic value handling (#870) - diag: Added
NewArgumentErrorDiagnostic()
andNewArgumentWarningDiagnostic()
functions, which create diagnostics with the function argument position set (#889) - provider: Added
ProviderWithFunctions
interface for implementing provider defined functions (#889) - diag: Added
(Diagnostics).AddArgumentError()
and(Diagnostics).AddArgumentWarning()
methods for appending function argument diagnostics (#889)
BUG FIXES:
- resource: Add
Private
field toDeleteResource
type, which was missing to allow provider logic to update private state on errors (#863) - resource: Prevented private state data loss if resource destruction returned an error (#863)
BUG FIXES:
- providerserver: Prevented
Data Source Type Not Found
andResource Type Not Found
errors with Terraform 1.6 and later (#853)
NOTES:
- all: This Go module has been updated to Go 1.20 per the Go support policy. It is recommended to review the Go 1.20 release notes before upgrading. Any consumers building on earlier Go versions may experience errors. (#835)
FEATURES:
- providerserver: Upgrade to protocol versions 5.4 and 6.4, which can significantly reduce memory usage with Terraform 1.6 and later when a configuration includes multiple instances of the same provider (#828)
NOTES:
- internal: Changed provider defined method execution logs from
DEBUG
log level toTRACE
(#818)
BUG FIXES:
- internal/fwserver: Prevented
Invalid Element Type
diagnostics for nested attributes and blocks implementingCustomType
field (#823)
BUG FIXES:
- types/basetypes: Prevented Float64Value Terraform data consistency errors for numbers with high precision floating point rounding errors (#817)
BUG FIXES:
- types/basetypes: Minor reduction of memory allocations for
ObjectValue
typeToTerraformValue()
method, which decreases provider operation durations at scale (#775) - resource: Prevented panic during planning caused by
SetNestedAttribute
with nested attributeDefault
and multiple configured elements (#783) - tfsdk: Prevented
Value Conversion Error
diagnostics when usingSet()
method with base types instead of custom types (#806) - providerserver: Significantly reduced memory usage for framework data handling operations, especially during the
PlanResourceChange
RPC (#792)
BUG FIXES:
- resource/schema: Ensured
Default
implementations received requestPath
and have responseDiagnostics
handled (#778) - resource/schema: Prevented panics with
Default
implementations on list, map, and set where no responseDiagnostics
orPlanValue
was returned (#778) - providerserver: Ensured Terraform CLI interrupts (e.g. Ctrl-c) properly cancel the
context.Context
of inflight requests (#782) - providerserver: Prevented caching of unused data and managed resource schemas (#784)
BUG FIXES:
- datasource/schema: Ensure nested attribute and block Equal methods check nested attribute and block definition equality (#752)
- provider/metaschema: Ensure nested attribute Equal methods check nested attribute definition equality (#752)
- provider/schema: Ensure nested attribute and block Equal methods check nested attribute and block definition equality (#752)
- resource/schema: Ensure nested attribute and block Equal methods check nested attribute and block definition equality (#752)
- types/basetypes: Prevented panics in
ListType
,MapType
, andSetType
methods whenElemType
field is not set (#714) - resource/schema: Prevented
Value Conversion Error
diagnostics for attributes and blocks implementing bothCustomType
andPlanModifiers
fields (#754) - types/basetypes: Prevented panic with
ListTypableWithSemanticEquals
andSetTypableWithSemanticEquals
when proposed new element count was greater than prior element count (#772)
NOTES:
- datasource/schema: The
Schema
typeValidate()
method has been deprecated in preference ofValidateImplementation()
(#699) - provider/metaschema: The
Schema
typeValidate()
method has been deprecated in preference ofValidateImplementation()
(#699) - provider/schema: The
Schema
typeValidate()
method has been deprecated in preference ofValidateImplementation()
(#699) - resource/schema: The
Schema
typeValidate()
method has been deprecated in preference ofValidateImplementation()
(#699)
ENHANCEMENTS:
- datasource/schema: Added
Schema
typeValidateImplementation()
method, which performs framework-defined schema validation and can be used in unit testing (#699) - provider/metaschema: Added
Schema
typeValidateImplementation()
method, which performs framework-defined schema validation and can be used in unit testing (#699) - provider/schema: Added
Schema
typeValidateImplementation()
method, which performs framework-defined schema validation and can be used in unit testing (#699) - resource/schema: Added
Schema
typeValidateImplementation()
method, which performs framework-defined schema validation and can be used in unit testing (#699) - datasource/schema: Raise validation errors if attempting to use top-level
for_each
attribute name, which requires special Terraform configuration syntax to be usable by the data source (#704) - resource/schema: Raise validation errors if attempting to use top-level
for_each
attribute name, which requires special Terraform configuration syntax to be usable by the resource (#704) - datasource/schema: Raise validation errors if attempting to use attribute names with leading numerics (0-9), which are invalid in the Terraform configuration language (#705)
- provider/schema: Raise validation errors if attempting to use attribute names with leading numerics (0-9), which are invalid in the Terraform configuration language (#705)
- resource/schema: Raise validation errors if attempting to use attribute names with leading numerics (0-9), which are invalid in the Terraform configuration language (#705)
- all: Improved SDK logging performance when messages would be skipped due to configured logging level (#744)
BUG FIXES:
- datasource/schema: Raise errors with
ListAttribute
,MapAttribute
,ObjectAttribute
, andSetAttribute
implementations instead of panics when missing requiredAttributeTypes
orElementTypes
fields (#699) - provider/metaschema: Raise errors with
ListAttribute
,MapAttribute
,ObjectAttribute
, andSetAttribute
implementations instead of panics when missing requiredAttributeTypes
orElementTypes
fields (#699) - provider/schema: Raise errors with
ListAttribute
,MapAttribute
,ObjectAttribute
, andSetAttribute
implementations instead of panics when missing requiredAttributeTypes
orElementTypes
fields (#699) - resource/schema: Raise errors with
ListAttribute
,MapAttribute
,ObjectAttribute
, andSetAttribute
implementations instead of panics when missing requiredAttributeTypes
orElementTypes
fields (#699) - tfsdk: Raise framework errors instead of generic upstream errors or panics when encountering unexpected values with
Set()
methods (#715)
NOTES:
- New
DEBUG
levelDetected value change between proposed new state and prior state
log messages with the offending attribute path are now emitted when proposed new state value differences would cause the framework to automatically mark all unconfiguredComputed
attributes as unknown during planning. These can be used to troubleshoot potential resource implementation issues, or framework and Terraform plan logic bugs. (#630) - This Go module has been updated to Go 1.19 per the Go support policy. Any consumers building on earlier Go versions may experience errors. (#682)
FEATURES:
- resource/schema: Introduce packages, interface types, and built-in static value functionality for schema-based default values (#674)
ENHANCEMENTS:
- internal/fwserver: Added
DEBUG
logging to aid troubleshooting unexpected plans with unknown values (#630) - types/basetypes: Add
BoolValue
typeNewBoolPointerValue()
creation function andValueBoolPointer()
method (#689) - types/basetypes: Add
Float64Value
typeNewFloat64PointerValue()
creation function andValueFloat64Pointer()
method (#689) - types/basetypes: Add
Int64Value
typeNewInt64PointerValue()
creation function andValueInt64Pointer()
method (#689) - types/basetypes: Add
StringValue
typeNewStringPointerValue()
creation function andValueStringPointer()
method (#689) - resource/schema: Added
Default
fields toAttribute
types, which support schema-based default values (#674)
BUG FIXES:
- types/basetypes: Fixed
Float64Type
typeValueFromTerraform
method to handle valid, stringified numbers from Terraform (#648) - resource: Prevented nested attribute and block plan modifications from being undone (#669)
BUG FIXES:
- all: Prevented
tftypes.NewValue can't use []tftypes.Value as a tftypes.Object
panics with schemas that includedSingleNestedBlock
(#624)
NOTES:
- all: For data handling consistency with attributes, unconfigured list and set blocks will now be represented as a null list or set instead of a known list or set with zero elements. This prevents confusing situations with validation and plan modification, where it was previously required to check block values for the number of elements. Logic that was previously missing null value checks for blocks may require updates. (#604)
- tfsdk: The
Config
,Plan
, andState
typePathMatches()
method logic previously returnedInvalid Path Expression for Schema Data
errors based on implementation details of the underlying data, which prevented returning zero matches in cases where the expression is valid for the schema, but there was no actual data at the path. Providers can now determine whether zero matches is consequential for their use case. (#602)
ENHANCEMENTS:
- path: Added
Expressions
typeMatches
method for checking if any expression in the collection matches a given path (#604) - tfsdk: Automatically prevented Terraform
nested blocks must be empty to indicate no blocks
errors for responses containingPlan
andState
types (#621)
BUG FIXES:
- datasource/schema: Prevented
ListNestedBlock
andSetNestedBlock
typeDeprecationMessage
field from causingBlock Deprecated
warnings with unconfigured blocks (#604) - datasource: Prevented
ConfigValidators
from unexpectedly modifying or removing prior validator diagnostics (#619) - provider/schema: Prevented
ListNestedBlock
andSetNestedBlock
typeDeprecationMessage
field from causingBlock Deprecated
warnings with unconfigured blocks (#604) - provider: Prevented
ConfigValidators
from unexpectedly modifying or removing prior validator diagnostics (#619) - resource/schema: Prevented
ListNestedBlock
andSetNestedBlock
typeDeprecationMessage
field from causingBlock Deprecated
warnings with unconfigured blocks (#604) - resource: Prevented
ConfigValidators
from unexpectedly modifying or removing prior validator diagnostics (#619) - tfsdk: Fixed false positive
Invalid Path Expression for Schema Data
error to be schema-determined instead of data-determined (#602) - types/basetypes: Fixed
ObjectType
typeApplyTerraform5AttributePathStep
method to return an error instead ofnil
for invalid attribute name steps (#602)
BUG FIXES:
- resource/schema/planmodifier: Prevented
assignment to entry in nil map
panic forObject
type plan modifiers (#591) - types/basetypes: Prevented type mutation via the
ObjectType
typeAttributeTypes()
method return (#591) - types/basetypes: Prevented value mutation via the
ListValue
,MapValue
, andSetValue
typeElements()
method return (#591) - types/basetypes: Prevented value mutation via the
ObjectValue
typeAttributeTypes()
andAttributes()
method returns (#591)
NOTES:
- The Terraform Plugin Framework is now generally available with semantic versioning compatibility promises. (#578)
- types: Framework type implementations have been moved into the underlying
basetypes
package. Value creation functions and type aliases have been created in thetypes
package that should prevent any breaking changes. (#567)
BREAKING CHANGES:
- provider: The
Provider
interface now requires theMetadata
method. It can be left empty or set theMetadataResponse
typeTypeName
field to populatedatasource.MetadataRequest
andresource.MetadataRequest
typeProviderTypeName
fields. (#580) - resource: The
RequiresReplace()
plan modifier has been removed. Use a type-specific plan modifier instead, such asresource/schema/stringplanmodifier.RequiresReplace()
orresource/schema/stringplanmodifier.RequiresReplaceIfConfigured()
(#576) - resource: The
RequiresReplaceIf()
plan modifier has been removed. Use a type-specific plan modifier instead, such asresource/schema/stringplanmodifier.RequiresReplaceIf()
(#576) - resource: The
Resource
typeGetSchema
method has been removed. Use theSchema
method instead. (#576) - resource: The
StateUpgrader
typePriorSchema
field type has been migrated fromtfsdk.Schema
toresource/schema.Schema
, similar to other resource schema handling (#573) - resource: The
UseStateForUnknown()
plan modifier has been removed. Use a type-specific plan modifier instead, such asresource/schema/stringplanmodifier.UseStateForUnknown()
(#576) - tfsdk: The
AttributePlanModifier
interface has been removed. Use the type-specific plan modifier interfaces in theresource/schema/planmodifier
package instead. (#576) - tfsdk: The
AttributeValidator
interface has been removed. Use the type-specific validator interfaces in theschema/validator
package instead. (#576) - tfsdk: The
Attribute
,Block
, andSchema
types have been removed. Use the similarly named types in thedatasource/schema
,provider/schema
, andresource/schema
packages instead. (#576) - tfsdk: The
ListNestedAttributes
,MapNestedAttributes
,SetNestedAttributes
, andSingleNestedAttributes
functions have been removed. Use the similarly named types in thedatasource/schema
,provider/schema
, andresource/schema
packages instead. (#576) - types: The type-specific
Typable
andValuable
interfaces have been moved into the underlyingbasetypes
package. (#567)
FEATURES:
- types/basetypes: New package which contains embeddable types for custom types (#567)
BUG FIXES:
- datasource: Add
Validate
function toSchema
to prevent usage of reserved and invalid names for attributes and blocks (#548) - provider: Add
Validate
function toMetaSchema
to prevent usage of reserved and invalid names for attributes and blocks (#548) - provider: Add
Validate
function toSchema
to prevent usage of reserved and invalid names for attributes and blocks (#548) - resource: Add
Validate
function toSchema
to prevent usage of reserved and invalid names for attributes and blocks (#548)
NOTES:
- datasource: The
DataSource
typeGetSchema
method has been deprecated. Use theSchema
method instead. (#546) - provider: The
Provider
typeGetSchema
method has been deprecated. Use theSchema
method instead. (#553) - resource: The
RequiresReplace()
plan modifier has been deprecated. Use a type-specific plan modifier instead, such asresource/schema/stringplanmodifier.RequiresReplace()
orresource/schema/stringplanmodifier.RequiresReplaceIfConfigured()
(#565) - resource: The
RequiresReplaceIf()
plan modifier has been deprecated. Use a type-specific plan modifier instead, such asresource/schema/stringplanmodifier.RequiresReplaceIf()
(#565) - resource: The
Resource
typeGetSchema
method has been deprecated. Use theSchema
method instead. (#558) - resource: The
UseStateForUnknown()
plan modifier has been deprecated. Use a type-specific plan modifier instead, such asresource/schema/stringplanmodifier.UseStateForUnknown()
(#565) - tfsdk: The
Attribute
,Block
, andSchema
types have been deprecated. Use the similarly named types in thedatasource/schema
,provider/schema
, andresource/schema
packages instead. (#563) - tfsdk: The
ListNestedAttributes
,MapNestedAttributes
,SetNestedAttributes
, andSingleNestedAttributes
functions have been deprecated. Use the similarly named types in thedatasource/schema
,provider/schema
, andresource/schema
packages instead. (#563)
BREAKING CHANGES:
- provider: The
ProviderWithMetaSchema
typeGetMetaSchema
method has been replaced with theMetaSchema
method (#562) - tfsdk: The
Attribute
typeFrameworkType()
method has been removed. Use theGetType()
method instead which returns the same information. (#543) - tfsdk: The
Attribute
typeGetType()
method now returns type information whether the attribute implements theType
field orAttributes
field. (#543) - tfsdk: The
Config
,Plan
, andState
typeSchema
field type has been updated fromtfsdk.Schema
to the genericfwschema.Schema
interface to enable additional schema implementations (#544)
FEATURES:
- datasource/schema: New package which contains schema interfaces and types relevant to data sources (#546)
- provider/schema: New package which contains schema interfaces and types relevant to providers (#553)
- resource/schema/planmodifier: New package which contains type-specific schema plan modifier interfaces (#557)
- resource/schema: New package which contains schema interfaces and types relevant to resources (#558)
- resource/schema: New packages, such as
stringplanmodifier
which contain type-specific schema plan modifier implementations (#565) - schema/validator: New package which contains type-specific schema validator interfaces (#542)
BUG FIXES:
- diag: Allow diagnostic messages with incorrect UTF-8 encoding to pass through with the invalid sequences replaced with the Unicode Replacement Character. This avoids returning the unhelpful message "string field contains invalid UTF-8" in that case. (#549)
- internal/fwserver: Ensured blocks are ignored when marking computed nils as unknown during resource change planning (#552)
BREAKING CHANGES:
- types: The
Bool
typeNull
,Unknown
, andValue
fields have been removed. Use theBoolNull()
,BoolUnknown()
, andBoolValue()
creation functions andIsNull()
,IsUnknown()
, andValueBool()
methods instead. (#523) - types: The
Float64
typeNull
,Unknown
, andValue
fields have been removed. Use theFloat64Null()
,Float64Unknown()
, andFloat64Value()
creation functions andIsNull()
,IsUnknown()
, andValueFloat64()
methods instead. (#523) - types: The
Int64
typeNull
,Unknown
, andValue
fields have been removed. Use theInt64Null()
,Int64Unknown()
, andInt64Value()
creation functions andIsNull()
,IsUnknown()
, andValueInt64()
methods instead. (#523) - types: The
List
typeElems
,ElemType
,Null
, andUnknown
fields have been removed. Use theListNull()
,ListUnknown()
,ListValue()
, andListValueMust()
creation functions andElements()
,ElementsAs()
,ElementType()
,IsNull()
, andIsUnknown()
methods instead. (#523) - types: The
Map
typeElems
,ElemType
,Null
, andUnknown
fields have been removed. Use theMapNull()
,MapUnknown()
,MapValue()
, andMapValueMust()
creation functions andElements()
,ElementsAs()
,ElementType()
,IsNull()
, andIsUnknown()
methods instead. (#523) - types: The
Number
typeNull
,Unknown
, andValue
fields have been removed. Use theNumberNull()
,NumberUnknown()
, andNumberValue()
creation functions andIsNull()
,IsUnknown()
, andValueBigFloat()
methods instead. (#523) - types: The
Object
typeAttrs
,AttrTypes
,Null
, andUnknown
fields have been removed. Use theObjectNull()
,ObjectUnknown()
,ObjectValue()
, andObjectValueMust()
creation functions andAs()
,Attributes()
,AttributeTypes()
,IsNull()
, andIsUnknown()
methods instead. (#523) - types: The
Set
typeElems
,ElemType
,Null
, andUnknown
fields have been removed. Use theSetNull()
,SetUnknown()
,SetValue()
, andSetValueMust()
creation functions andElements()
,ElementsAs()
,ElementType()
,IsNull()
, andIsUnknown()
methods instead. (#523) - types: The
String
typeNull
,Unknown
, andValue
fields have been removed. Use theStringNull()
,StringUnknown()
, andStringValue()
creation functions andIsNull()
,IsUnknown()
, andValueString()
methods instead. (#523)
ENHANCEMENTS:
- attr: Added
ValueState
type, which custom types can use to consistently represent the three possible value states (known, null, and unknown) (#523) - types: Added
BoolTypable
andBoolValuable
interface types, which enable embedding existing boolean types for custom types (#536) - types: Added
Float64Typable
andFloat64Valuable
interface types, which enable embedding existing float64 types for custom types (#536) - types: Added
Int64Typable
andInt64Valuable
interface types, which enable embedding existing int64 types for custom types (#536) - types: Added
ListTypable
andListValuable
interface types, which enable embedding existing list types for custom types (#536) - types: Added
MapTypable
andMapValuable
interface types, which enable embedding existing map types for custom types (#536) - types: Added
NumberTypable
andNumberValuable
interface types, which enable embedding existing number types for custom types (#536) - types: Added
ObjectTypable
andObjectValuable
interface types, which enable embedding existing object types for custom types (#536) - types: Added
SetTypable
andSetValuable
interface types, which enable embedding existing set types for custom types (#536) - types: Added
StringTypable
andStringValuable
interface types, which enable embedding existing string types for custom types (#536)
BUG FIXES:
- types: Prevented Terraform errors where the zero-value for any
attr.Value
types such asString
would be a known value instead of null (#523) - types: Prevented indeterminate behavior for any
attr.Value
types where they could be any combination of null, unknown, and/or known (#523)
NOTES:
- types: The
Bool
typeNull
,Unknown
, andValue
fields have been deprecated in preference of theBoolNull()
,BoolUnknown()
, andBoolValue()
creation functions andIsNull()
,IsUnknown()
, andValueBool()
methods. The fields will be removed in a future release. (#502) - types: The
Float64
typeNull
,Unknown
, andValue
fields have been deprecated in preference of theFloat64Null()
,Float64Unknown()
, andFloat64Value()
creation functions andIsNull()
,IsUnknown()
, andValueFloat64()
methods. The fields will be removed in a future release. (#502) - types: The
Int64
typeNull
,Unknown
, andValue
fields have been deprecated in preference of theInt64Null()
,Int64Unknown()
, andInt64Value()
creation functions andIsNull()
,IsUnknown()
, andValueInt64()
methods. The fields will be removed in a future release. (#502) - types: The
List
typeElems
,ElemType
,Null
, andUnknown
fields have been deprecated in preference of theListNull()
,ListUnknown()
,ListValue()
, andListValueMust()
creation functions andElements()
,ElementsAs()
,ElementType()
,IsNull()
, andIsUnknown()
methods. The fields will be removed in a future release. (#502) - types: The
Map
typeElems
,ElemType
,Null
, andUnknown
fields have been deprecated in preference of theMapNull()
,MapUnknown()
,MapValue()
, andMapValueMust()
creation functions andElements()
,ElementsAs()
,ElementType()
,IsNull()
, andIsUnknown()
methods. The fields will be removed in a future release. (#502) - types: The
Number
typeNull
,Unknown
, andValue
fields have been deprecated in preference of theNumberNull()
,NumberUnknown()
, andNumberValue()
creation functions andIsNull()
,IsUnknown()
, andValueBigFloat()
methods. The fields will be removed in a future release. (#502) - types: The
Object
typeAttrs
,AttrTypes
,Null
, andUnknown
fields have been deprecated in preference of theObjectNull()
,ObjectUnknown()
,ObjectValue()
, andObjectValueMust()
creation functions andAs()
,Attributes()
,AttributeTypes()
,IsNull()
, andIsUnknown()
methods. The fields will be removed in a future release. (#502) - types: The
Set
typeElems
,ElemType
,Null
, andUnknown
fields have been deprecated in preference of theSetNull()
,SetUnknown()
,SetValue()
, andSetValueMust()
creation functions andElements()
,ElementsAs()
,ElementType()
,IsNull()
, andIsUnknown()
methods. The fields will be removed in a future release. (#502) - types: The
String
typeNull
,Unknown
, andValue
fields have been deprecated in preference of theStringNull()
,StringUnknown()
, andStringValue()
creation functions andIsNull()
,IsUnknown()
, andValueString()
methods. The fields will be removed in a future release. (#502)
ENHANCEMENTS:
- types: Added
BoolNull()
,BoolUnknown()
, andBoolValue()
functions, which create immutableBool
values (#502) - types: Added
Bool
typeValueBool()
method, which returns thebool
of the known value orfalse
if null or unknown (#502) - types: Added
Float64Null()
,Float64Unknown()
, andFloat64Value()
functions, which create immutableFloat64
values (#502) - types: Added
Float64
typeValueFloat64()
method, which returns thefloat64
of the known value or0.0
if null or unknown (#502) - types: Added
Int64Null()
,Int64Unknown()
, andInt64Value()
functions, which create immutableInt64
values (#502) - types: Added
Int64
typeValueInt64()
method, which returns theint64
of the known value or0
if null or unknown (#502) - types: Added
ListNull()
,ListUnknown()
,ListValue()
, andListValueMust()
functions, which create immutableList
values (#502) - types: Added
ListValueFrom()
,MapValueFrom()
,ObjectValueFrom()
, andSetValueFrom()
functions, which can create value types from standard Go types using reflection similar totfsdk.ValueFrom()
(#522) - types: Added
List
typeElements()
method, which returns the[]attr.Value
of the known values ornil
if null or unknown (#502) - types: Added
MapNull()
,MapUnknown()
,MapValue()
, andMapValueMust()
functions, which create immutableMap
values (#502) - types: Added
Map
typeElements()
method, which returns themap[string]attr.Value
of the known values ornil
if null or unknown (#502) - types: Added
NumberNull()
,NumberUnknown()
, andNumberValue()
functions, which create immutableNumber
values (#502) - types: Added
Number
typeValueBigFloat()
method, which returns the*big.Float
of the known value ornil
if null or unknown (#502) - types: Added
SetNull()
,SetUnknown()
,SetValue()
, andSetValueMust()
functions, which create immutableSet
values (#502) - types: Added
Set
typeElements()
method, which returns the[]attr.Value
of the known values ornil
if null or unknown (#502) - types: Added
StringNull()
,StringUnknown()
, andStringValue()
functions, which create immutableString
values (#502) - types: Added
String
typeValueString()
method, which returns thestring
of the known value or""
if null or unknown (#502)
NOTES:
- The Terraform Plugin Framework is now in beta. Feedback towards a general availability release in the future with compatibility promises is appreciated. (#500)
BREAKING CHANGES:
- attr: The
Type
interface now requires theValueType
method, which is used for enhancing error diagnostics from the framework (#497)
ENHANCEMENTS:
- internal/reflect: Added
attr.Value
type suggestions to error diagnostics (#497)
NOTES:
- tfsdk: Schema definitions may now introduce single nested mode blocks, however this support is only intended for migrating terraform-plugin-sdk timeouts blocks. New implementations should prefer single nested attributes instead. (#477)
BREAKING CHANGES:
- datasource: The
DataSource
interface now requires theGetSchema
andMetadata
methods. (#478) - provider: The
DataSourceType
andResourceType
types have been removed. Use theGetSchema
,Metadata
, and optionally theConfigure
methods ondatasource.DataSource
andresource.Resource
implementations instead. (#478) - provider: The
Provider
interfaceGetDataSources
andGetResources
methods have been removed. Use theDataSources
andResources
methods instead. (#478) - resource: The
Resource
interface now requires theGetSchema
andMetadata
methods. (#478)
ENHANCEMENTS:
- tfsdk: Added single nested mode block support (#477)
BUG FIXES:
- internal/fwserver: Ensured nested block plan modifiers correctly set their request
AttributeConfig
,AttributePlan
, andAttributeState
values (#479) - types: Ensured
List
,Map
, andSet
types withxattr.TypeWithValidate
elements run validation on those elements (#481)
NOTES:
- datasource: The
DataSource
typeGetSchema
andMetadata
methods will be required in the next version. (#472) - provider: The
DataSourceType
type has been deprecated in preference of moving theGetSchema
method to thedatasource.DataSource
type and optionally implementing theNewResource
method logic to a newConfigure
method. TheDataSourceType
type will be removed in the next version. (#472) - provider: The
Provider
typeGetDataSources
method has been deprecated in preference of theDataSources
method. Alldatasource.DataSource
types must implement theMetadata
method after migrating. Support for theGetDataSources
method will be removed in the next version. (#472) - provider: The
Provider
typeGetResources
method has been deprecated in preference of theResources
method. Allresource.Resource
types must implement theMetadata
method after migrating. Support for theGetResources
method will be removed in the next version. (#472) - provider: The
ResourceType
type has been deprecated in preference of moving theGetSchema
method to theresource.Resource
type and optionally implementing theNewResource
method logic to a newConfigure
method. TheResourceType
type will be removed in the next version. (#472) - resource: The
Resource
typeGetSchema
andMetadata
methods will be required in the next version. (#472)
BREAKING CHANGES:
- tfsdk: The
Schema
typeAttributeAtPath()
method signature has be updated with apath.Path
parameter anddiag.Diagnostics
return. Use theAttributeAtTerraformPath()
method instead if*tftypes.AttributePath
or specificerror
handling is still necessary. (#450) - tfsdk: The previously deprecated
Schema
typeAttributeType()
method has been removed. Use theType()
method instead. (#450) - tfsdk: The previously deprecated
Schema
typeAttributeTypeAtPath()
method has been removed. Use theTypeAtPath()
orTypeAtTerraformPath()
method instead. (#450) - tfsdk: The previously deprecated
Schema
typeTerraformType()
method has been removed. UseType().TerraformType()
instead. (#450)
ENHANCEMENTS:
- datasource: Added
DataSource
typeConfigure
,GetSchema
, andMetadata
method support (#472) - provider: Added
ConfigureResponse
typeDataSourceData
field, which will set thedatasource.ConfigureRequest.ProviderData
field (#472) - provider: Added
ConfigureResponse
typeResourceData
field, which will set theresource.ConfigureRequest.ProviderData
field (#472) - provider: Added
Provider
typeMetadata
method support, which theMetadataResponse.TypeName
field will set thedatasource.MetadataRequest.ProviderTypeName
andresource.MetadataRequest.ProviderTypeName
fields (#472) - resource: Added
Resource
typeConfigure
,GetSchema
, andMetadata
method support (#472)
BUG FIXES:
- internal/fwserver: Delayed deprecated attribute/block warnings for unknown values, which may be null (#465)
- internal/fwserver: Fixed alignment of set type plan modification (#468)
BUG FIXES:
- resource: Prevented
Error Decoding Private State
errors on resources previously managed by terraform-plugin-sdk (#452)
NOTES:
- This Go module has been updated to Go 1.18 per the Go support policy. Any consumers building on earlier Go versions may experience errors. (#445)
- tfsdk: The
Schema
typeAttributeAtPath()
method signature will be updated from a*tftypes.AttributePath
parameter topath.Path
in the next release. Switch to theAttributeAtTerraformPath()
method if*tftypes.AttributePath
handling is still necessary. (#440) - tfsdk: The
Schema
typeAttributeType()
method has been deprecated in preference of theType()
method. (#440) - tfsdk: The
Schema
typeAttributeTypeAtPath()
method has been deprecated for theTypeAtPath()
andTypeAtTerraformPath()
methods. (#440) - tfsdk: The
Schema
typeTerraformType()
method has been deprecated in preference of callingType().TerraformType()
. (#440)
BREAKING CHANGES:
- tfsdk: Go types relating to data source handling have been migrated to the new
datasource
package. Consult the pull request description for a full listing of find-and-replace information. (#432) - tfsdk: Go types relating to provider handling have been migrated to the new
provider
package. Consult the pull request description for a full listing of find-and-replace information. (#432) - tfsdk: Go types relating to resource handling have been migrated to the new
resource
package. Consult the pull request description for a full listing of find-and-replace information. (#432) - tfsdk: The
RequiresReplace()
,RequiresReplaceIf()
, andUseStateForUnknown()
plan modifier functions, which only apply to managed resources, have been moved to theresource
package. (#434) - tfsdk: The
ResourceImportStatePassthroughID()
function has been moved toresource.ImportStatePassthroughID()
. (#432) - tfsdk: The
Schema
typeAttributeAtPath
method now returns afwschema.Attribute
interface instead of atfsdk.Attribute
type. Consumers will need to update from direct field usage to similarly named interface method calls. (#438)
FEATURES:
- datasource: New package, which colocates all data source implementation types from the
tfsdk
package (#432) - provider: New package, which colocates all provider implementation types from the
tfsdk
package (#432) - resource: Enabled provider developers to read/write private state data. (#433)
- resource: New package, which colocates all resource implementation types from the
tfsdk
package (#432)
ENHANCEMENTS:
- tfsdk: Added
Block
typeMaxItems
andMinItems
field validation for Terraform 0.12 through 0.15.1 (#422)
BUG FIXES:
- internal/fwserver: Ensured
UpgradeResourceState
calls from Terraform 0.12 properly ignored attributes not defined in the schema (#426) - path: Ensured
Expression
typeCopy()
method appropriately copied root expressions andEqual()
checked for root versus relative expressions (#420)
BREAKING CHANGES:
- attr: The
TypeWithValidate
interface has been moved under theattr/xattr
package and the*tftypes.AttributePath
parameter is replaced withpath.Path
(#390) - diag: The
DiagnosticWithPath
interfacePath
method*tftypes.AttributePath
return is replaced withpath.Path
(#390) - diag: The
Diagnostics
typeAddAttributeError
andAddAttributeWarning
method*tftypes.AttributePath
parameters are replaced withpath.Path
(#390) - diag: The
NewAttributeErrorDiagnostic
andNewAttributeWarningDiagnostic
function*tftypes.AttributePath
parameters are replaced withpath.Path
(#390) - tfsdk: The
Config
,Plan
, andState
typesGetAttribute
andSetAttribute
methods*tftypes.AttributePath
parameters are replaced withpath.Path
(#390) - tfsdk: The
DataSourceConfigValidator
interfaceValidate
method is nowValidateDataSource
to support generic validators that satisfyDataSourceConfigValidator
,ProviderConfigValidator
, andResourceConfigValidator
(#405) - tfsdk: The
ModifyAttributePlanRequest
,ModifyResourcePlanResponse
, andValidateAttributeRequest
typeAttributePath *tftypes.AttributePath
fields are replaced withAttributePath path.Path
(#390) - tfsdk: The
PlanResourceChange
RPC on destroy is now enabled. To prevent unexpected Terraform errors, the framework attempts to catch errant provider logic in plan modifiers when destroying. Resource level plan modifiers may require updates to handle a completely null proposed new state (plan) and ensure it remains completely null on resource destruction. (#409) - tfsdk: The
ProviderConfigValidator
interfaceValidate
method is nowValidateProvider
to support generic validators that satisfyDataSourceConfigValidator
,ProviderConfigValidator
, andResourceConfigValidator
(#405) - tfsdk: The
RequiresReplaceIf
andResourceImportStatePassthroughID
function*tftypes.AttributePath
parameters are replaced withpath.Path
(#390) - tfsdk: The
ResourceConfigValidator
interfaceValidate
method is nowValidateResource
to support generic validators that satisfyDataSourceConfigValidator
,ProviderConfigValidator
, andResourceConfigValidator
(#405)
FEATURES:
- Support plan modifiers returning warning and error diagnostics on resource destruction with Terraform 1.3 and later (#409)
- path: Introduced attribute path expressions (#396)
- path: Introduced framework abstraction for attribute path handling (#390)
ENHANCEMENTS:
- diag: Added
Diagnostics
typeEqual()
method (#402) - diag:
ErrorsCount
,WarningsCount
,Errors
andWarnings
functions have been added todiag.Diagnostics
(#392) - providerserver: Added sdk.proto logger request duration and response diagnostics logging (#398)
- tfsdk: Added
AttributePathExpression
field toModifyAttributePlanRequest
andValidateAttributeRequest
types (#396) - tfsdk: Added
PathMatches
method toConfig
,Plan
, andState
types (#396) - tfsdk: Added framework-specific error diagnostics when
Resource
implementations errantly return no errors and empty state afterCreate
andUpdate
methods (#406) - types: Method
IsNull()
forNumber
type will now return true if the struct is zero-value initialized. (#384)
BREAKING CHANGES:
- attr: The
Value
interface now includes theIsNull()
andIsUnknown()
methods (#335) - attr: The
Value
interface now includes theString()
method (#376) - tfsdk:
ListNestedAttributes
,SetNestedAttributes
andMapNestedAttributes
functions lost the second argumentopts
, as it was unused. (#349)
FEATURES:
- providerserver: Implemented native protocol version 5 support (#368)
ENHANCEMENTS:
- providerserver: Added
NewProtocol5()
andNewProtocol5WithError()
functions, which return a protocol version 5 compatible provider server (#368) - providerserver: Added
ServeOpts
typeProtocolVersion
field, which can be set to5
or6
and defaults to6
(#368) - tfsdk: New function
ValueFrom
that takes a Go value and populates a compatibleattr.Value
, given a descriptiveattr.Type
. (#350) - tfsdk: Removed
ListNestedAttributesOptions
,SetNestedAttributesOptions
andMapNestedAttributesOptions
types, as they were empty (no fields) and unused. (#349) - types: Added
IsNull()
andIsUnknown()
methods to all types (#335) - types: Added
String()
method to all types (#376)
BUG FIXES:
- tfsdk: Prevented configuration handling error when
Schema
containedBlocks
(#371) - types: Prevented panic being thrown when
.ToTerraformValue
is called on anattr.Value
type whereElemType / AttrsType
were not set. (#354) - types: Prevented potential loss of number precision with
Int64
between 54 and 64 bits (#325)
BREAKING CHANGES:
- diag: Removed
Diagnostics
typeToTfprotov6Diagnostics()
method. This was not intended for usage by provider developers. (#313) - tfsdk: The
ModifySchemaPlanRequest
,ModifySchemaPlanResponse
,ValidateSchemaRequest
, andValidateSchemaResponse
types have been removed. These were not intended for provider developer usage. (#310) - tfsdk: The
NewProtocol6Server()
function,Serve()
function, andServeOpts
type have been removed. Use theproviderserver
package instead. (#310) - tfsdk: The
ResourceImportStateNotImplemented()
function has been removed. Remove theResource
typeImportState
method instead for resources that should not support import. (#312)
ENHANCEMENTS:
- tfsdk: Propagated
tf_data_source_type
,tf_req_id
,tf_resource_type
, andtf_rpc
fields in log entries (#315)
BUG FIXES:
- all: Prevented
This log was generated by an SDK subsystem logger that wasn't created before being used.
warning messages in logging (#314) - tfsdk: Prevented
Unable to create logging subsystem with AdditionalLocationOffset due to missing root logger options
warning logs during acceptance testing (#315)
NOTES:
- tfsdk: Providers may now optionally remove
RemoveResource()
calls fromResource
typeDelete
methods (#301) - tfsdk: The
NewProtocol6Server()
function has been deprecated in preference ofproviderserver.NewProtocol6()
andproviderserver.NewProtocol6WithError()
functions, which will simplify muxing and testing implementations. Thetfsdk.NewProtocol6Server()
function will be removed in the next minor version. (#308) - tfsdk: The
ResourceImportStateNotImplemented()
function has been deprecated. Instead, theImportState
method can be removed from theResource
and the framework will automatically return an error diagnostic if import is attempted. (#297) - tfsdk: The
Resource
interface no longer requires theImportState
method. A separateResourceWithImportState
interface now defines the sameImportState
method. (#297) - tfsdk: The
Serve()
function has been deprecated in preference of theproviderserver.Serve()
function. Thetfsdk.Serve()
function will be removed in the next minor version. (#308) - tfsdk: The
ServeOpts
type has been deprecated in preference of theproviderserver.ServeOpts
type. When migrating, theName
field has been replaced withAddress
. Thetfsdk.ServeOpts
type will be removed in the next minor version. (#308) - tfsdk: The previously unexported
server
type has been temporarily exported to aid in the migration to the newproviderserver
package. It is not intended for provider developer usage and will be moved into an internal package in the next minor version. (#308)
FEATURES:
- Introduced
providerserver
package, which contains all functions and types necessary for serving a provider in production or acceptance testing. (#308) - tfsdk: Added optional
ResourceWithUpgradeState
interface, which allows for provider defined logic when theUpgradeResourceState
RPC is called (#292)
ENHANCEMENTS:
- tfsdk: Added
DEBUG
level logging for all framework handoffs to provider defined logic (#300) - tfsdk: Added
ResourceWithImportState
interface, which allowsResource
implementations to optionally define theImportState
method. (#297) - tfsdk: Added automatic
(DeleteResourceResponse.State).RemoveResource()
call afterResource
typeDelete
method execution if there are no errors (#301)
BUG FIXES:
- types: Prevented panics with missing type information during
Float64
,Int64
, andSet
validation logic (#259)
NOTES:
- The underlying
terraform-plugin-log
dependency has been updated to v0.3.0, which includes a breaking change in the optional additional fields parameter of logging function calls to ensure correctness and catch coding errors during compilation. Any early adopter provider logging which calls those functions may require updates. (#268)
BREAKING CHANGES:
- The
ToTerraformValue
method of theattr.Value
interface now returns atftypes.Value
, instead of aninterface{}
. Existing types need to be updated to calltftypes.ValidateValue
andtftypes.NewValue
, passing the value they were returning before, instead of returning the value directly. (#231) - tfsdk: The
ListNestedAttributesOptions
,MapNestedAttributeOptions
, andSetNestedAttributeOptions
typeMaxItems
andMinItems
fields have been removed since the protocol and framework never supported this type of nested attribute validation. Use attribute validators instead. (#249)
ENHANCEMENTS:
- Added the ability to get an attribute as a generic
attr.Value
when usingGetAttribute
. (#232) - Logging can now be used by calling
tflog.Trace
,tflog.Debug
,tflog.Info
,tflog.Warn
, ortflog.Error
. See the tflog docs for more information. (#234) - tfsdk: Added
Debug
field toServeOpts
for running providers via debugger and testing processes (#243)
BUG FIXES:
- tfsdk: Removed
Schema
restriction that it must contain at least one attribute or block (#252) - tfsdk: Support protocol version 5 and verify valid resource type in
UpgradeResourceState
RPC (#263)
BREAKING CHANGES:
- Fixed RequiresReplace and RequiresReplaceIf to be more judicious about when they require a resource to be destroyed and recreated. They will no longer require resources to be recreated when any attribute changes, instead limiting it only to the attribute they're declared on. They will also not require resources to be recreated when they're being created or deleted. Finally, they won't require a resource to be recreated if the user has no value in the config for the attribute and the attribute is computed; this is to prevent the resource from being destroyed and recreated when the provider changes the value without any user prompting. Providers that wish to destroy and recreate the resource when an optional and computed attribute is removed from the user's config should do so in their own plan modifier. (#213)
- RequiresReplaceIf no longer overrides previous plan modifiers' value for RequiresReplace if the function returns false. (#213)
- diag: The
AttributeErrorDiagnostic
andAttributeWarningDiagnostic
types have been removed. Any usage can be replaced withDiagnosticWithPath
. (#219) - tfsdk: The
AddAttributeError
,AddAttributeWarning
,AddError
, andAddWarning
methods on theConfigureProviderResponse
,CreateResourceResponse
,DeleteResourceResponse
,ModifyAttributePlanResponse
,ModifyResourcePlanResponse
,ReadDataSourceResponse
,ReadResourceResponse
, andUpdateResourceResponse
types have been removed in preference of the same methods on theDiagnostics
field of these types. For example, code such asresp.AddError("...", "...")
can be updated toresp.Diagnostics.AddError("...", "...")
. (#198) - tfsdk: The
Config
,Plan
, andState
typeGetAttribute
methods now return diagnostics only and require the target as the last parameter, similar to theGet
method. (#167)
FEATURES:
- Added
tfsdk.UseStateForUnknown()
as a built-in plan modifier, which will automatically replace an unknown value in the plan with the value from the state. This mimics the behavior of computed and optional+computed values in Terraform Plugin SDK versions 1 and 2. Provider developers will likely want to use it for "write-once" attributes that never change once they're set in state. (#204) - tfsdk: Support list and set blocks in schema definitions (#188)
ENHANCEMENTS:
- diag: Added
WithPath()
function to wrap or overwrite diagnostic path information. (#219) - tfsdk: The
Config
,Plan
, andState
typeGetAttribute
methods can now be used to fetch values directly intoattr.Value
implementations and Go types. (#167)
BUG FIXES:
- tfsdk: Fetch null values from valid missing
Config
,Plan
, andState
paths inGetAttribute()
method (#185) - types: Ensure
Float64
Type()
method returnsFloat64Type
(#202) - types: Prevent panic with uninitialized
Number
Value
(#200) - types: Prevent panics when
ValueFromTerraform
receivednil
values (#208)
BUG FIXES:
- Fix bug in which updating
Computed
-only attributes would lead to a "Provider produced inconsistent result after apply" error (#176/#184)
NOTES:
- Upgraded to terraform-plugin-go v0.4.0 which contains its own breaking changes. Please see https://github.com/hashicorp/terraform-plugin-go/blob/main/CHANGELOG.md#040-september-24-2021 for more details. (#179)
BREAKING CHANGES:
attr.Type
implementations must now have aString()
method that returns a human-friendly name for the type. (#120)- tfsdk:
Resource
implementations must now include theImportState(context.Context, ImportResourceStateRequest, *ImportResourceStateResponse)
method. If import is not supported, call theResourceImportStateNotImplemented()
function or return an error. (#149)
FEATURES:
- tfsdk: Support resource import (#149)
- types: Support
Set
andSetType
(#126) - types: Support for
Float64
,Float64Type
,Int64
, andInt64Type
(#166)
ENHANCEMENTS:
- Added a
tfsdk.ConvertValue
helper that will convert anyattr.Value
into any compatibleattr.Type
. Compatibility happens at the terraform-plugin-go level; the type that theattr.Value
'sToTerraformValue
method produces must be compatible with theattr.Type
'sTerraformType()
. Generally, this means that theattr.Type
of theattr.Value
and theattr.Type
being converted to must both produce the sametftypes.Type
when theirTerraformType()
method is called. (#120)
BUG FIXES:
- attr: Ensure
List
types implementingattr.TypeWithValidate
callElementType
validation only if that type implementsattr.TypeWithValidate
(#126) - tfsdk:
(Plan).SetAttribute()
and(State).SetAttribute()
will now create missing attribute paths instead of silently failing to update. (#165)
BREAKING CHANGES:
- Methods on the
tfsdk.Config
,tfsdk.Plan
, andtfsdk.State
types now return[]*tfprotov6.Diagnostic
instead oferror
(#82) - Most uses of
[]*tfprotov6.Diagnostic
have been replaced with a newdiag.Diagnostics
type. Please update your type signatures, and use one of thediags.New*
helper functions instead of constructing*tfprotov6.Diagnostic
s by hand. (#110) - The
schema.Attribute
andschema.Schema
types have been moved totfsdk.Attribute
andtfsdk.Schema
. No changes beyond import names are required. (#77) - With the release of Go 1.17, Go 1.17 is now the lowest supported version of Go to use with terraform-plugin-framework. (#104)
attr.Value
implementations must now implement aType(context.Context)
method that returns theattr.Type
that created theattr.Value
. (#119)
FEATURES:
- Added support for ModifyPlan functions on Resources. (#90)
- Introduced first-class diagnostics (
diag
package). (#110) - Support
attr.Type
validation (#82) - tfsdk: Attributes, Data Sources, Providers, and Resources now support configuration validation (#75)
ENHANCEMENTS:
- Added a
tfsdk.ValueAs
helper that allows accessing anattr.Value
without type assertion, by using the same reflection rules used in theConfig.Get
,Plan.Get
, andState.Get
helpers. (#119) - Errors from methods on the
tfsdk.Config
,tfsdk.Plan
, andtfsdk.State
types now include rich diagnostic information (#82) - tfsdk: Validate
Attribute
defines at least one ofRequired
,Optional
, orComputed
(#111)
BUG FIXES:
- tfsdk: Diagnostics returned from
(Plan).SetAttribute()
and(State).SetAttribute()
reflection will now properly include attribute path (#133) - tfsdk: Don't attempt validation on the nested attributes of a null or unknown
SingleNestedAttribute
(#118) - tfsdk: Return warning diagnostic when using
Attribute
orSchema
typeDeprecationMessage
field (#93)
ENHANCEMENTS:
- Added
tfsdk.NewProtocol6Server
to return atfprotov6.ProviderServer
implementation for testing and muxing purposes. (#72) - Added support for MapNestedAttributes. (#79)
- Responses now default to returning the current state, meaning state will only change when provider developers actively change it. Previously, an empty state value would be returned, which caused problems. (#74)
FEATURES:
- Added interfaces extending the attr.Type interface to include attribute and element types. (#44)
- Added state, config, and plan types, and support for getting values from them. (#46)
- Added support for Object types. (#38)
- Added support for bools, numbers, and strings. (#29)
- Added support for defining schemas and attributes. (#27)
- Added support for lists. (#36)
- Added support for maps. (#37)
- Added support for provider, resource, and data source types. (#32)
- Added the ability to serve providers. (#45)