Skip to content

Commit 2c93e4a

Browse files
hcsa73Henrique Santos
andauthored
DNS | Fix zone updates failing (#6)
* Fix API returning error on updates * Add DNS zone update test * Fix primaires not used to update * Add primaries to model --------- Co-authored-by: Henrique Santos <henrique.santos@freiheit.com>
1 parent 6800f7a commit 2c93e4a

3 files changed

Lines changed: 30 additions & 35 deletions

File tree

stackit/services/dns/dns_acc_test.go

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,24 @@ import (
1818

1919
// Zone resource data
2020
var zoneResource = map[string]string{
21-
"project_id": testutil.ProjectId,
22-
"name": testutil.ResourceNameWithDateTime("zone"),
23-
"dns_name": fmt.Sprintf("www.%s.com", acctest.RandStringFromCharSet(20, acctest.CharSetAlpha)),
24-
"dns_name_min": fmt.Sprintf("www.%s.com", acctest.RandStringFromCharSet(20, acctest.CharSetAlpha)),
25-
"description": "my description",
26-
"acl": "192.168.0.0/24",
27-
"active": "true",
28-
"contact_email": "aa@bb.cc",
29-
"ttl": "12",
30-
"ttl_updated": "4440",
31-
"expire_time": "123456",
32-
"is_reverse_zone": "false",
33-
"negative_cache": "60",
34-
"primaries": "1.2.3.4",
35-
"refresh_time": "500",
36-
"retry_time": "700",
37-
"type": "primary",
21+
"project_id": testutil.ProjectId,
22+
"name": testutil.ResourceNameWithDateTime("zone"),
23+
"dns_name": fmt.Sprintf("www.%s.com", acctest.RandStringFromCharSet(20, acctest.CharSetAlpha)),
24+
"dns_name_min": fmt.Sprintf("www.%s.com", acctest.RandStringFromCharSet(20, acctest.CharSetAlpha)),
25+
"description": "my description",
26+
"description_updated": "my description updated",
27+
"acl": "192.168.0.0/24",
28+
"active": "true",
29+
"contact_email": "aa@bb.cc",
30+
"ttl": "120",
31+
"ttl_updated": "4440",
32+
"expire_time": "123456",
33+
"is_reverse_zone": "false",
34+
"negative_cache": "60",
35+
"primaries": "1.2.3.4",
36+
"refresh_time": "500",
37+
"retry_time": "700",
38+
"type": "primary",
3839
}
3940

4041
// Record set resource data
@@ -49,7 +50,7 @@ var recordSetResource = map[string]string{
4950
"comment": "a comment",
5051
}
5152

52-
func inputConfig(zoneName, ttl, records string) string {
53+
func inputConfig(zoneName, description, ttl, records string) string {
5354
return fmt.Sprintf(`
5455
%s
5556
@@ -87,7 +88,7 @@ func inputConfig(zoneName, ttl, records string) string {
8788
zoneResource["project_id"],
8889
zoneName,
8990
zoneResource["dns_name"],
90-
zoneResource["description"],
91+
description,
9192
zoneResource["acl"],
9293
zoneResource["active"],
9394
zoneResource["contact_email"],
@@ -115,7 +116,7 @@ func TestAccDnsResource(t *testing.T) {
115116
Steps: []resource.TestStep{
116117
// Creation
117118
{
118-
Config: inputConfig(zoneResource["name"], zoneResource["ttl"], recordSetResource["records"]),
119+
Config: inputConfig(zoneResource["name"], zoneResource["description"], zoneResource["ttl"], recordSetResource["records"]),
119120
Check: resource.ComposeAggregateTestCheckFunc(
120121
// Zone data
121122
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "project_id", zoneResource["project_id"]),
@@ -174,7 +175,7 @@ func TestAccDnsResource(t *testing.T) {
174175
zone_id = stackit_dns_zone.zone.zone_id
175176
record_set_id = stackit_dns_record_set.record_set.record_set_id
176177
}`,
177-
inputConfig(zoneResource["name"], zoneResource["ttl"], recordSetResource["records"]),
178+
inputConfig(zoneResource["name"], zoneResource["description"], zoneResource["ttl"], recordSetResource["records"]),
178179
),
179180
Check: resource.ComposeAggregateTestCheckFunc(
180181
// Zone data
@@ -268,14 +269,14 @@ func TestAccDnsResource(t *testing.T) {
268269
},
269270
// Update. The zone ttl should not be updated according to the DNS API.
270271
{
271-
Config: inputConfig(zoneResource["name"], zoneResource["ttl"], recordSetResource["records_updated"]),
272+
Config: inputConfig(zoneResource["name"], zoneResource["description_updated"], zoneResource["ttl"], recordSetResource["records_updated"]),
272273
Check: resource.ComposeAggregateTestCheckFunc(
273274
// Zone data
274275
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "project_id", zoneResource["project_id"]),
275276
resource.TestCheckResourceAttrSet("stackit_dns_zone.zone", "zone_id"),
276277
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "name", zoneResource["name"]),
277278
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "dns_name", zoneResource["dns_name"]),
278-
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "description", zoneResource["description"]),
279+
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "description", zoneResource["description_updated"]),
279280
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "acl", zoneResource["acl"]),
280281
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "active", zoneResource["active"]),
281282
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "contact_email", zoneResource["contact_email"]),

stackit/services/dns/zone/resource.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/hashicorp/terraform-plugin-framework/resource"
1616
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
1717
"github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault"
18+
"github.com/hashicorp/terraform-plugin-framework/resource/schema/listplanmodifier"
1819
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
1920
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringdefault"
2021
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
@@ -228,6 +229,9 @@ func (r *zoneResource) Schema(_ context.Context, _ resource.SchemaRequest, resp
228229
Optional: true,
229230
Computed: true,
230231
ElementType: types.StringType,
232+
PlanModifiers: []planmodifier.List{
233+
listplanmodifier.RequiresReplace(),
234+
},
231235
Validators: []validator.List{
232236
listvalidator.SizeAtMost(10),
233237
},
@@ -585,14 +589,6 @@ func toUpdatePayload(model *Model) (*dns.UpdateZonePayload, error) {
585589
return nil, fmt.Errorf("nil model")
586590
}
587591

588-
modelPrimaries := []string{}
589-
for _, primary := range model.Primaries.Elements() {
590-
primaryString, ok := primary.(types.String)
591-
if !ok {
592-
return nil, fmt.Errorf("type assertion failed")
593-
}
594-
modelPrimaries = append(modelPrimaries, primaryString.ValueString())
595-
}
596592
return &dns.UpdateZonePayload{
597593
Name: model.Name.ValueStringPointer(),
598594
ContactEmail: model.ContactEmail.ValueStringPointer(),
@@ -603,6 +599,6 @@ func toUpdatePayload(model *Model) (*dns.UpdateZonePayload, error) {
603599
RefreshTime: conversion.ToPtrInt32(model.RefreshTime),
604600
RetryTime: conversion.ToPtrInt32(model.RetryTime),
605601
NegativeCache: conversion.ToPtrInt32(model.NegativeCache),
606-
Primaries: &modelPrimaries,
602+
Primaries: nil, // API returns error if this field is set, even if nothing changes
607603
}, nil
608604
}

stackit/services/dns/zone/resource_test.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -290,8 +290,7 @@ func TestToPayloadUpdate(t *testing.T) {
290290
Name: types.StringValue("Name"),
291291
},
292292
&dns.UpdateZonePayload{
293-
Name: utils.Ptr("Name"),
294-
Primaries: &[]string{},
293+
Name: utils.Ptr("Name"),
295294
},
296295
true,
297296
},
@@ -321,7 +320,6 @@ func TestToPayloadUpdate(t *testing.T) {
321320
Acl: utils.Ptr("Acl"),
322321
Description: utils.Ptr("Description"),
323322
ContactEmail: utils.Ptr("ContactEmail"),
324-
Primaries: &[]string{"Primary"},
325323
RetryTime: utils.Ptr(int32(3)),
326324
RefreshTime: utils.Ptr(int32(4)),
327325
ExpireTime: utils.Ptr(int32(5)),

0 commit comments

Comments
 (0)