Skip to content

Commit 2c6b876

Browse files
[Internal] Add AddPlanModifer method for AttributeBuilder (#4009)
## Changes <!-- Summary of your changes that are easy to understand --> - Add `AddPlanModifier` methods for all AttributeBuilders so that we can do things equivalent to set supress diff or force new ## Tests <!-- How is this tested? Please see the checklist below and also describe any other relevant tests --> - [x] `make test` run locally - [x] relevant change in `docs/` folder - [x] covered with integration tests in `internal/acceptance` - [x] relevant acceptance tests are passing - [x] using Go SDK
1 parent 375539a commit 2c6b876

11 files changed

+114
-0
lines changed

internal/providers/pluginfw/tfschema/bool_attribute.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package tfschema
33
import (
44
dataschema "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
55
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
6+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
67
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
78
)
89

@@ -13,6 +14,7 @@ type BoolAttributeBuilder struct {
1314
Computed bool
1415
DeprecationMessage string
1516
Validators []validator.Bool
17+
PlanModifiers []planmodifier.Bool
1618
}
1719

1820
func (a BoolAttributeBuilder) BuildDataSourceAttribute() dataschema.Attribute {
@@ -34,6 +36,7 @@ func (a BoolAttributeBuilder) BuildResourceAttribute() schema.Attribute {
3436
DeprecationMessage: a.DeprecationMessage,
3537
Computed: a.Computed,
3638
Validators: a.Validators,
39+
PlanModifiers: a.PlanModifiers,
3740
}
3841
}
3942

@@ -90,3 +93,8 @@ func (a BoolAttributeBuilder) AddValidator(v validator.Bool) AttributeBuilder {
9093
a.Validators = append(a.Validators, v)
9194
return a
9295
}
96+
97+
func (a BoolAttributeBuilder) AddPlanModifier(v planmodifier.Bool) AttributeBuilder {
98+
a.PlanModifiers = append(a.PlanModifiers, v)
99+
return a
100+
}

internal/providers/pluginfw/tfschema/customizable_schema.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"reflect"
66

77
"github.com/databricks/terraform-provider-databricks/common"
8+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
89
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
910
)
1011

@@ -72,6 +73,37 @@ func (s *CustomizableSchema) AddValidator(v any, path ...string) *CustomizableSc
7273
return s
7374
}
7475

76+
func (s *CustomizableSchema) AddPlanModifier(v any, path ...string) *CustomizableSchema {
77+
cb := func(attr AttributeBuilder) AttributeBuilder {
78+
switch a := attr.(type) {
79+
case BoolAttributeBuilder:
80+
return a.AddPlanModifier(v.(planmodifier.Bool))
81+
case Float64AttributeBuilder:
82+
return a.AddPlanModifier(v.(planmodifier.Float64))
83+
case Int64AttributeBuilder:
84+
return a.AddPlanModifier(v.(planmodifier.Int64))
85+
case ListAttributeBuilder:
86+
return a.AddPlanModifier(v.(planmodifier.List))
87+
case ListNestedAttributeBuilder:
88+
return a.AddPlanModifier(v.(planmodifier.List))
89+
case MapAttributeBuilder:
90+
return a.AddPlanModifier(v.(planmodifier.Map))
91+
case MapNestedAttributeBuilder:
92+
return a.AddPlanModifier(v.(planmodifier.Map))
93+
case SingleNestedAttributeBuilder:
94+
return a.AddPlanModifier(v.(planmodifier.Object))
95+
case StringAttributeBuilder:
96+
return a.AddPlanModifier(v.(planmodifier.String))
97+
default:
98+
panic(fmt.Errorf("cannot add planmodifier, attribute builder type is invalid: %s. %s", reflect.TypeOf(attr).String(), common.TerraformBugErrorMessage))
99+
}
100+
}
101+
102+
navigateSchemaWithCallback(&s.attr, cb, path...)
103+
104+
return s
105+
}
106+
75107
func (s *CustomizableSchema) SetOptional(path ...string) *CustomizableSchema {
76108
cb := func(attr AttributeBuilder) AttributeBuilder {
77109
return attr.SetOptional()

internal/providers/pluginfw/tfschema/customizable_schema_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"testing"
77

88
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
9+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
910
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
1011
"github.com/hashicorp/terraform-plugin-framework/types"
1112
"github.com/stretchr/testify/assert"
@@ -111,3 +112,12 @@ func TestCustomizeSchemaAddValidator(t *testing.T) {
111112

112113
assert.True(t, len(scm.Attributes["description"].(schema.StringAttribute).Validators) == 1)
113114
}
115+
116+
func TestCustomizeSchemaAddPlanModifier(t *testing.T) {
117+
scm := ResourceStructToSchema(TestTfSdk{}, func(c CustomizableSchema) CustomizableSchema {
118+
c.AddPlanModifier(stringplanmodifier.RequiresReplace(), "description")
119+
return c
120+
})
121+
122+
assert.True(t, len(scm.Attributes["description"].(schema.StringAttribute).PlanModifiers) == 1)
123+
}

internal/providers/pluginfw/tfschema/float64_attribute.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package tfschema
33
import (
44
dataschema "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
55
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
6+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
67
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
78
)
89

@@ -13,6 +14,7 @@ type Float64AttributeBuilder struct {
1314
Computed bool
1415
DeprecationMessage string
1516
Validators []validator.Float64
17+
PlanModifiers []planmodifier.Float64
1618
}
1719

1820
func (a Float64AttributeBuilder) BuildDataSourceAttribute() dataschema.Attribute {
@@ -34,6 +36,7 @@ func (a Float64AttributeBuilder) BuildResourceAttribute() schema.Attribute {
3436
DeprecationMessage: a.DeprecationMessage,
3537
Computed: a.Computed,
3638
Validators: a.Validators,
39+
PlanModifiers: a.PlanModifiers,
3740
}
3841
}
3942

@@ -90,3 +93,8 @@ func (a Float64AttributeBuilder) AddValidator(v validator.Float64) AttributeBuil
9093
a.Validators = append(a.Validators, v)
9194
return a
9295
}
96+
97+
func (a Float64AttributeBuilder) AddPlanModifier(v planmodifier.Float64) AttributeBuilder {
98+
a.PlanModifiers = append(a.PlanModifiers, v)
99+
return a
100+
}

internal/providers/pluginfw/tfschema/int64_attribute.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package tfschema
33
import (
44
dataschema "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
55
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
6+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
67
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
78
)
89

@@ -13,6 +14,7 @@ type Int64AttributeBuilder struct {
1314
Computed bool
1415
DeprecationMessage string
1516
Validators []validator.Int64
17+
PlanModifiers []planmodifier.Int64
1618
}
1719

1820
func (a Int64AttributeBuilder) BuildDataSourceAttribute() dataschema.Attribute {
@@ -34,6 +36,7 @@ func (a Int64AttributeBuilder) BuildResourceAttribute() schema.Attribute {
3436
DeprecationMessage: a.DeprecationMessage,
3537
Computed: a.Computed,
3638
Validators: a.Validators,
39+
PlanModifiers: a.PlanModifiers,
3740
}
3841
}
3942

@@ -90,3 +93,8 @@ func (a Int64AttributeBuilder) AddValidator(v validator.Int64) AttributeBuilder
9093
a.Validators = append(a.Validators, v)
9194
return a
9295
}
96+
97+
func (a Int64AttributeBuilder) AddPlanModifier(v planmodifier.Int64) AttributeBuilder {
98+
a.PlanModifiers = append(a.PlanModifiers, v)
99+
return a
100+
}

internal/providers/pluginfw/tfschema/list_attribute.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"github.com/hashicorp/terraform-plugin-framework/attr"
55
dataschema "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
66
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
7+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
78
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
89
)
910

@@ -16,6 +17,7 @@ type ListAttributeBuilder struct {
1617
Computed bool
1718
DeprecationMessage string
1819
Validators []validator.List
20+
PlanModifiers []planmodifier.List
1921
}
2022

2123
func (a ListAttributeBuilder) BuildDataSourceAttribute() dataschema.Attribute {
@@ -39,6 +41,7 @@ func (a ListAttributeBuilder) BuildResourceAttribute() schema.Attribute {
3941
DeprecationMessage: a.DeprecationMessage,
4042
Computed: a.Computed,
4143
Validators: a.Validators,
44+
PlanModifiers: a.PlanModifiers,
4245
}
4346
}
4447

@@ -95,3 +98,8 @@ func (a ListAttributeBuilder) AddValidator(v validator.List) AttributeBuilder {
9598
a.Validators = append(a.Validators, v)
9699
return a
97100
}
101+
102+
func (a ListAttributeBuilder) AddPlanModifier(v planmodifier.List) AttributeBuilder {
103+
a.PlanModifiers = append(a.PlanModifiers, v)
104+
return a
105+
}

internal/providers/pluginfw/tfschema/list_nested_attribute.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package tfschema
33
import (
44
dataschema "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
55
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
6+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
67
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
78
)
89

@@ -15,6 +16,7 @@ type ListNestedAttributeBuilder struct {
1516
Computed bool
1617
DeprecationMessage string
1718
Validators []validator.List
19+
PlanModifiers []planmodifier.List
1820
}
1921

2022
func (a ListNestedAttributeBuilder) BuildDataSourceAttribute() dataschema.Attribute {
@@ -38,6 +40,7 @@ func (a ListNestedAttributeBuilder) BuildResourceAttribute() schema.Attribute {
3840
DeprecationMessage: a.DeprecationMessage,
3941
Computed: a.Computed,
4042
Validators: a.Validators,
43+
PlanModifiers: a.PlanModifiers,
4144
}
4245
}
4346

@@ -94,3 +97,8 @@ func (a ListNestedAttributeBuilder) AddValidator(v validator.List) AttributeBuil
9497
a.Validators = append(a.Validators, v)
9598
return a
9699
}
100+
101+
func (a ListNestedAttributeBuilder) AddPlanModifier(v planmodifier.List) AttributeBuilder {
102+
a.PlanModifiers = append(a.PlanModifiers, v)
103+
return a
104+
}

internal/providers/pluginfw/tfschema/map_attribute.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"github.com/hashicorp/terraform-plugin-framework/attr"
55
dataschema "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
66
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
7+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
78
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
89
)
910

@@ -16,6 +17,7 @@ type MapAttributeBuilder struct {
1617
Computed bool
1718
DeprecationMessage string
1819
Validators []validator.Map
20+
PlanModifiers []planmodifier.Map
1921
}
2022

2123
func (a MapAttributeBuilder) BuildDataSourceAttribute() dataschema.Attribute {
@@ -39,6 +41,7 @@ func (a MapAttributeBuilder) BuildResourceAttribute() schema.Attribute {
3941
DeprecationMessage: a.DeprecationMessage,
4042
Computed: a.Computed,
4143
Validators: a.Validators,
44+
PlanModifiers: a.PlanModifiers,
4245
}
4346
}
4447

@@ -95,3 +98,8 @@ func (a MapAttributeBuilder) AddValidator(v validator.Map) AttributeBuilder {
9598
a.Validators = append(a.Validators, v)
9699
return a
97100
}
101+
102+
func (a MapAttributeBuilder) AddPlanModifier(v planmodifier.Map) AttributeBuilder {
103+
a.PlanModifiers = append(a.PlanModifiers, v)
104+
return a
105+
}

internal/providers/pluginfw/tfschema/map_nested_attribute.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package tfschema
33
import (
44
dataschema "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
55
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
6+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
67
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
78
)
89

@@ -15,6 +16,7 @@ type MapNestedAttributeBuilder struct {
1516
Computed bool
1617
DeprecationMessage string
1718
Validators []validator.Map
19+
PlanModifiers []planmodifier.Map
1820
}
1921

2022
func (a MapNestedAttributeBuilder) BuildDataSourceAttribute() dataschema.Attribute {
@@ -38,6 +40,7 @@ func (a MapNestedAttributeBuilder) BuildResourceAttribute() schema.Attribute {
3840
DeprecationMessage: a.DeprecationMessage,
3941
Computed: a.Computed,
4042
Validators: a.Validators,
43+
PlanModifiers: a.PlanModifiers,
4144
}
4245
}
4346

@@ -94,3 +97,8 @@ func (a MapNestedAttributeBuilder) AddValidator(v validator.Map) AttributeBuilde
9497
a.Validators = append(a.Validators, v)
9598
return a
9699
}
100+
101+
func (a MapNestedAttributeBuilder) AddPlanModifier(v planmodifier.Map) AttributeBuilder {
102+
a.PlanModifiers = append(a.PlanModifiers, v)
103+
return a
104+
}

internal/providers/pluginfw/tfschema/single_nested_attribute.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package tfschema
33
import (
44
dataschema "github.com/hashicorp/terraform-plugin-framework/datasource/schema"
55
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
6+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
67
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
78
)
89

@@ -15,6 +16,7 @@ type SingleNestedAttributeBuilder struct {
1516
Computed bool
1617
DeprecationMessage string
1718
Validators []validator.Object
19+
PlanModifiers []planmodifier.Object
1820
}
1921

2022
func (a SingleNestedAttributeBuilder) BuildDataSourceAttribute() dataschema.Attribute {
@@ -38,6 +40,7 @@ func (a SingleNestedAttributeBuilder) BuildResourceAttribute() schema.Attribute
3840
DeprecationMessage: a.DeprecationMessage,
3941
Computed: a.Computed,
4042
Validators: a.Validators,
43+
PlanModifiers: a.PlanModifiers,
4144
}
4245
}
4346

@@ -94,3 +97,8 @@ func (a SingleNestedAttributeBuilder) AddValidator(v validator.Object) Attribute
9497
a.Validators = append(a.Validators, v)
9598
return a
9699
}
100+
101+
func (a SingleNestedAttributeBuilder) AddPlanModifier(v planmodifier.Object) AttributeBuilder {
102+
a.PlanModifiers = append(a.PlanModifiers, v)
103+
return a
104+
}

0 commit comments

Comments
 (0)