Skip to content

Commit b591a15

Browse files
authored
netlify_site_domain_settings_changes fix update in place without changes (#121)
* fix: prevent drift in netlify_site_domain_settings resource Fix constant drift detection in netlify_site_domain_settings by properly handling null values from the API. The Read function now correctly sets null values for empty optional fields instead of converting them to empty strings, preventing Terraform from detecting false differences. * test: prevent drift in netlify_site_domain_settings resource
1 parent cff34a4 commit b591a15

File tree

2 files changed

+57
-3
lines changed

2 files changed

+57
-3
lines changed

internal/provider/site_domain_settings_resource.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,26 @@ func (r *siteDomainSettingsResource) Read(ctx context.Context, req resource.Read
133133
return
134134
}
135135

136-
state.CustomDomain = types.StringValue(site.CustomDomain)
136+
if site.CustomDomain != "" {
137+
state.CustomDomain = types.StringValue(site.CustomDomain)
138+
} else {
139+
state.CustomDomain = types.StringNull()
140+
}
137141
state.DomainAliases = make([]types.String, len(site.DomainAliases))
138142
for i, domainAlias := range site.DomainAliases {
139143
state.DomainAliases[i] = types.StringValue(domainAlias)
140144
}
141-
state.BranchDeployCustomDomain = types.StringValue(site.BranchDeployCustomDomain)
142-
state.DeployPreviewCustomDomain = types.StringValue(site.DeployPreviewCustomDomain)
145+
if site.BranchDeployCustomDomain != "" {
146+
state.BranchDeployCustomDomain = types.StringValue(site.BranchDeployCustomDomain)
147+
} else {
148+
state.BranchDeployCustomDomain = types.StringNull()
149+
}
150+
151+
if site.DeployPreviewCustomDomain != "" {
152+
state.DeployPreviewCustomDomain = types.StringValue(site.DeployPreviewCustomDomain)
153+
} else {
154+
state.DeployPreviewCustomDomain = types.StringNull()
155+
}
143156

144157
resp.Diagnostics.Append(resp.State.Set(ctx, &state)...)
145158
if resp.Diagnostics.HasError() {

internal/provider/site_domain_settings_resource_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,44 @@ func TestAccSiteDomainSettings(t *testing.T) {
5454
},
5555
}, func(s *terraform.State) error { return nil })
5656
}
57+
58+
func TestAccSiteDomainSettingsNullFields(t *testing.T) {
59+
// Test case for preventing drift when optional fields are null from API
60+
accTest(t, []resource.TestStep{
61+
{
62+
Config: `resource "netlify_site_domain_settings" "null_fields" {
63+
site_id = "5b407d6d-9385-4e7a-a4c4-8efc11ea3c26"
64+
custom_domain = "tf-test-null-fields.examplepetstore.com"
65+
}`,
66+
Check: resource.ComposeAggregateTestCheckFunc(
67+
resource.TestCheckResourceAttr("netlify_site_domain_settings.null_fields", "site_id", "5b407d6d-9385-4e7a-a4c4-8efc11ea3c26"),
68+
resource.TestCheckResourceAttr("netlify_site_domain_settings.null_fields", "custom_domain", "tf-test-null-fields.examplepetstore.com"),
69+
resource.TestCheckResourceAttr("netlify_site_domain_settings.null_fields", "domain_aliases.#", "0"),
70+
// These should be null/empty when not set
71+
resource.TestCheckNoResourceAttr("netlify_site_domain_settings.null_fields", "branch_deploy_custom_domain"),
72+
resource.TestCheckNoResourceAttr("netlify_site_domain_settings.null_fields", "deploy_preview_custom_domain"),
73+
),
74+
},
75+
{
76+
// Second step with same config should not detect changes (no drift)
77+
Config: `resource "netlify_site_domain_settings" "null_fields" {
78+
site_id = "5b407d6d-9385-4e7a-a4c4-8efc11ea3c26"
79+
custom_domain = "tf-test-null-fields.examplepetstore.com"
80+
}`,
81+
PlanOnly: true,
82+
Check: resource.ComposeAggregateTestCheckFunc(
83+
resource.TestCheckResourceAttr("netlify_site_domain_settings.null_fields", "site_id", "5b407d6d-9385-4e7a-a4c4-8efc11ea3c26"),
84+
resource.TestCheckResourceAttr("netlify_site_domain_settings.null_fields", "custom_domain", "tf-test-null-fields.examplepetstore.com"),
85+
resource.TestCheckResourceAttr("netlify_site_domain_settings.null_fields", "domain_aliases.#", "0"),
86+
),
87+
},
88+
{
89+
ResourceName: "netlify_site_domain_settings.null_fields",
90+
ImportState: true,
91+
ImportStateId: "5b407d6d-9385-4e7a-a4c4-8efc11ea3c26",
92+
ImportStateVerifyIdentifierAttribute: "site_id",
93+
ImportStateVerify: true,
94+
ImportStateVerifyIgnore: []string{"last_updated"},
95+
},
96+
}, func(s *terraform.State) error { return nil })
97+
}

0 commit comments

Comments
 (0)