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)