Skip to content

Latest commit

 

History

History
92 lines (73 loc) · 3.06 KB

File metadata and controls

92 lines (73 loc) · 3.06 KB
page_title description
Attribute Fields: Migrating from SDKv2 to the Framework
Migrate attribute required, optional, computed, and sensitive fields from SDKv2 to the plugin Framework

Attribute Fields

-> Note: The Plugin Framework is in beta.

A subset of attribute fields, such as required, optional, computed, or sensitive, define attribute behavior as boolean flags. Refer to Schemas - Attributes in the Framework documentation for details.

This page explains how to migrate the required, optional, computed, and sensitive attribute fields from SDKv2 to the Framework.

SDKv2

In SDKv2, Required, Optional, Computed, and Sensitive are boolean fields on the attribute's schema.

func resourceExample() *schema.Resource {
    return &schema.Resource{
         /* ... */
        Schema: map[string]*schema.Schema{
            "attribute_example": {
                Required:    bool
                Optional:    bool
                Computed:    bool
                Sensitive:   bool
                /* ... */

Framework

In the Framework, you set the same fields on the schema.Attribute implementation, with the same behavior.

func (r *ThingResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) {
    resp.Schema = schema.Schema{
        /* ... */
        Attributes: map[string]schema.Attribute{
            "attribute_example": schema.XXXAttribute{
                Required:   bool
                Optional:   bool
                Computed:   bool
                Sensitive:  bool
                /* ... */

Example

The following examples show how to migrate portions of the http provider.

For a complete example, clone the terraform-provider-http repository and compare the data_source.go file in v2.2.0 and the data_source_http.go file after the migration.

SDKv2

The following example from the data_source.go file shows how the url attribute on the http data source is set to be required with SDKv2.

func dataSource() *schema.Resource {
    return &schema.Resource{
        Schema: map[string]*schema.Schema{
            "url": {
                Required:   true,
                /* ... */
            },
            /* ... */

Framework

The following example from the data_source_http.go file shows how the url attribute on the http data source is set to be required with the Framework.

func (d *httpDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) {
    resp.Schema = schema.Schema{
        Attributes: map[string]schema.Attribute{
            "url": schema.StringAttribute{
                Required:   true,
                /* ... */
            },
            /* ... */