Skip to content

Commit b39c585

Browse files
committed
fix more scenarios with conditionsets
1 parent 588a3c0 commit b39c585

2 files changed

Lines changed: 50 additions & 5 deletions

File tree

internal/provider/conditionsets/client.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,22 @@ func (c *ConditionSetClient) Read(ctx context.Context, data ConditionSetModel) (
4545
return ConditionSetModel{}, err
4646
}
4747

48-
var resourceKey string
49-
48+
// Handle resource: if API returns null, keep it null to maintain consistency
49+
var resource types.String
5050
if conditionSet.Resource != nil {
51-
resourceKey = conditionSet.Resource.Key
51+
resource = types.StringValue(conditionSet.Resource.Key)
52+
} else {
53+
resource = types.StringPointerValue(nil)
54+
}
55+
56+
// Handle description: if API returns null and state is null, keep it null
57+
// This ensures consistency for omitted description fields
58+
var description types.String
59+
if conditionSet.Description != nil {
60+
description = types.StringPointerValue(conditionSet.Description)
61+
} else {
62+
// API returned null - explicitly set to null to maintain consistency
63+
description = types.StringPointerValue(nil)
5264
}
5365

5466
state := ConditionSetModel{
@@ -58,8 +70,8 @@ func (c *ConditionSetClient) Read(ctx context.Context, data ConditionSetModel) (
5870
EnvironmentId: types.StringValue(conditionSet.EnvironmentId),
5971
Key: types.StringValue(conditionSet.Key),
6072
Name: types.StringValue(conditionSet.Name),
61-
Description: types.StringPointerValue(conditionSet.Description),
62-
Resource: types.StringValue(resourceKey),
73+
Description: description,
74+
Resource: resource,
6375
Conditions: types.StringValue(string(conditionsMarshalled)),
6476
}
6577

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package conditionsets
2+
3+
import (
4+
"context"
5+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
6+
"github.com/hashicorp/terraform-plugin-framework/types"
7+
)
8+
9+
// normalizeEmptyStringToNull is a plan modifier that treats empty strings as null
10+
// This ensures consistency between the API behavior and Terraform state
11+
type normalizeEmptyStringToNull struct{}
12+
13+
func (m normalizeEmptyStringToNull) Description(ctx context.Context) string {
14+
return "Normalizes empty strings to null for consistency with API behavior"
15+
}
16+
17+
func (m normalizeEmptyStringToNull) MarkdownDescription(ctx context.Context) string {
18+
return "Normalizes empty strings to null for consistency with API behavior"
19+
}
20+
21+
func (m normalizeEmptyStringToNull) PlanModifyString(ctx context.Context, req planmodifier.StringRequest, resp *planmodifier.StringResponse) {
22+
// If the planned value is an empty string, change it to null
23+
if !req.PlanValue.IsNull() && !req.PlanValue.IsUnknown() {
24+
if req.PlanValue.ValueString() == "" {
25+
resp.PlanValue = types.StringNull()
26+
}
27+
}
28+
}
29+
30+
// NormalizeEmptyStringToNull returns a plan modifier that normalizes empty strings to null
31+
func NormalizeEmptyStringToNull() planmodifier.String {
32+
return normalizeEmptyStringToNull{}
33+
}

0 commit comments

Comments
 (0)