Some providers, resources, and data sources include repeatable nested blocks in their attributes. These nested blocks
typically represent separate objects that are related to (or embedded within) the containing object.
This page explains how to migrate nested blocks that are not computed (i.e., do not set
Computed: true) from SDKv2 to the Framework. Refer to
Blocks with Computed Fields for more details
about migrating nested blocks that contain fields that are computed.
The following example shows a nested block in Terraform resource configuration. The subject nested
block within the tls_cert_request resource configures the subject of a certificate request with the common_name and
organization attributes.
In SDKv2, blocks are defined by an attribute whose type is TypeList or TypeSet and whose Elem field is set to a
schema.Resource that contains a map of the block's attribute names to corresponding schemaSchema structs.
In the Framework, you implement nested blocks with the Blocks field of your provider, resource, or data source's
tfsdk.Schema, as returned by the GetSchema function. The Blocks field maps the name of each block to a
tfsdk.Block struct which defines the block's behavior.
The following examples show how to migrate portions of the tls
provider.
For a complete example, clone the
terraform-provider-tls repository and compare the common_cert.go file in
v3.4.0
with the resource_cert_request.go file in
v4.0.1.
The following example from the common_cert.go file shows the implementation of the subject nested block on the
cert_request resource's schema with SDKv2.
The following example from the resource_cert_request.go file shows how the nested subject block on the
cert_request resource is defined with the Framework after the migration.