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>
This commit is contained in:
parent
6800f7a421
commit
2c93e4a6f0
3 changed files with 30 additions and 35 deletions
|
|
@ -18,23 +18,24 @@ import (
|
||||||
|
|
||||||
// Zone resource data
|
// Zone resource data
|
||||||
var zoneResource = map[string]string{
|
var zoneResource = map[string]string{
|
||||||
"project_id": testutil.ProjectId,
|
"project_id": testutil.ProjectId,
|
||||||
"name": testutil.ResourceNameWithDateTime("zone"),
|
"name": testutil.ResourceNameWithDateTime("zone"),
|
||||||
"dns_name": fmt.Sprintf("www.%s.com", acctest.RandStringFromCharSet(20, acctest.CharSetAlpha)),
|
"dns_name": fmt.Sprintf("www.%s.com", acctest.RandStringFromCharSet(20, acctest.CharSetAlpha)),
|
||||||
"dns_name_min": fmt.Sprintf("www.%s.com", acctest.RandStringFromCharSet(20, acctest.CharSetAlpha)),
|
"dns_name_min": fmt.Sprintf("www.%s.com", acctest.RandStringFromCharSet(20, acctest.CharSetAlpha)),
|
||||||
"description": "my description",
|
"description": "my description",
|
||||||
"acl": "192.168.0.0/24",
|
"description_updated": "my description updated",
|
||||||
"active": "true",
|
"acl": "192.168.0.0/24",
|
||||||
"contact_email": "aa@bb.cc",
|
"active": "true",
|
||||||
"ttl": "12",
|
"contact_email": "aa@bb.cc",
|
||||||
"ttl_updated": "4440",
|
"ttl": "120",
|
||||||
"expire_time": "123456",
|
"ttl_updated": "4440",
|
||||||
"is_reverse_zone": "false",
|
"expire_time": "123456",
|
||||||
"negative_cache": "60",
|
"is_reverse_zone": "false",
|
||||||
"primaries": "1.2.3.4",
|
"negative_cache": "60",
|
||||||
"refresh_time": "500",
|
"primaries": "1.2.3.4",
|
||||||
"retry_time": "700",
|
"refresh_time": "500",
|
||||||
"type": "primary",
|
"retry_time": "700",
|
||||||
|
"type": "primary",
|
||||||
}
|
}
|
||||||
|
|
||||||
// Record set resource data
|
// Record set resource data
|
||||||
|
|
@ -49,7 +50,7 @@ var recordSetResource = map[string]string{
|
||||||
"comment": "a comment",
|
"comment": "a comment",
|
||||||
}
|
}
|
||||||
|
|
||||||
func inputConfig(zoneName, ttl, records string) string {
|
func inputConfig(zoneName, description, ttl, records string) string {
|
||||||
return fmt.Sprintf(`
|
return fmt.Sprintf(`
|
||||||
%s
|
%s
|
||||||
|
|
||||||
|
|
@ -87,7 +88,7 @@ func inputConfig(zoneName, ttl, records string) string {
|
||||||
zoneResource["project_id"],
|
zoneResource["project_id"],
|
||||||
zoneName,
|
zoneName,
|
||||||
zoneResource["dns_name"],
|
zoneResource["dns_name"],
|
||||||
zoneResource["description"],
|
description,
|
||||||
zoneResource["acl"],
|
zoneResource["acl"],
|
||||||
zoneResource["active"],
|
zoneResource["active"],
|
||||||
zoneResource["contact_email"],
|
zoneResource["contact_email"],
|
||||||
|
|
@ -115,7 +116,7 @@ func TestAccDnsResource(t *testing.T) {
|
||||||
Steps: []resource.TestStep{
|
Steps: []resource.TestStep{
|
||||||
// Creation
|
// Creation
|
||||||
{
|
{
|
||||||
Config: inputConfig(zoneResource["name"], zoneResource["ttl"], recordSetResource["records"]),
|
Config: inputConfig(zoneResource["name"], zoneResource["description"], zoneResource["ttl"], recordSetResource["records"]),
|
||||||
Check: resource.ComposeAggregateTestCheckFunc(
|
Check: resource.ComposeAggregateTestCheckFunc(
|
||||||
// Zone data
|
// Zone data
|
||||||
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "project_id", zoneResource["project_id"]),
|
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "project_id", zoneResource["project_id"]),
|
||||||
|
|
@ -174,7 +175,7 @@ func TestAccDnsResource(t *testing.T) {
|
||||||
zone_id = stackit_dns_zone.zone.zone_id
|
zone_id = stackit_dns_zone.zone.zone_id
|
||||||
record_set_id = stackit_dns_record_set.record_set.record_set_id
|
record_set_id = stackit_dns_record_set.record_set.record_set_id
|
||||||
}`,
|
}`,
|
||||||
inputConfig(zoneResource["name"], zoneResource["ttl"], recordSetResource["records"]),
|
inputConfig(zoneResource["name"], zoneResource["description"], zoneResource["ttl"], recordSetResource["records"]),
|
||||||
),
|
),
|
||||||
Check: resource.ComposeAggregateTestCheckFunc(
|
Check: resource.ComposeAggregateTestCheckFunc(
|
||||||
// Zone data
|
// Zone data
|
||||||
|
|
@ -268,14 +269,14 @@ func TestAccDnsResource(t *testing.T) {
|
||||||
},
|
},
|
||||||
// Update. The zone ttl should not be updated according to the DNS API.
|
// Update. The zone ttl should not be updated according to the DNS API.
|
||||||
{
|
{
|
||||||
Config: inputConfig(zoneResource["name"], zoneResource["ttl"], recordSetResource["records_updated"]),
|
Config: inputConfig(zoneResource["name"], zoneResource["description_updated"], zoneResource["ttl"], recordSetResource["records_updated"]),
|
||||||
Check: resource.ComposeAggregateTestCheckFunc(
|
Check: resource.ComposeAggregateTestCheckFunc(
|
||||||
// Zone data
|
// Zone data
|
||||||
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "project_id", zoneResource["project_id"]),
|
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "project_id", zoneResource["project_id"]),
|
||||||
resource.TestCheckResourceAttrSet("stackit_dns_zone.zone", "zone_id"),
|
resource.TestCheckResourceAttrSet("stackit_dns_zone.zone", "zone_id"),
|
||||||
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "name", zoneResource["name"]),
|
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "name", zoneResource["name"]),
|
||||||
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "dns_name", zoneResource["dns_name"]),
|
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "dns_name", zoneResource["dns_name"]),
|
||||||
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "description", zoneResource["description"]),
|
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "description", zoneResource["description_updated"]),
|
||||||
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "acl", zoneResource["acl"]),
|
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "acl", zoneResource["acl"]),
|
||||||
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "active", zoneResource["active"]),
|
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "active", zoneResource["active"]),
|
||||||
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "contact_email", zoneResource["contact_email"]),
|
resource.TestCheckResourceAttr("stackit_dns_zone.zone", "contact_email", zoneResource["contact_email"]),
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import (
|
||||||
"github.com/hashicorp/terraform-plugin-framework/resource"
|
"github.com/hashicorp/terraform-plugin-framework/resource"
|
||||||
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
|
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
|
||||||
"github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault"
|
"github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/resource/schema/listplanmodifier"
|
||||||
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
|
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
|
||||||
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringdefault"
|
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringdefault"
|
||||||
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
|
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
|
||||||
|
|
@ -228,6 +229,9 @@ func (r *zoneResource) Schema(_ context.Context, _ resource.SchemaRequest, resp
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
ElementType: types.StringType,
|
ElementType: types.StringType,
|
||||||
|
PlanModifiers: []planmodifier.List{
|
||||||
|
listplanmodifier.RequiresReplace(),
|
||||||
|
},
|
||||||
Validators: []validator.List{
|
Validators: []validator.List{
|
||||||
listvalidator.SizeAtMost(10),
|
listvalidator.SizeAtMost(10),
|
||||||
},
|
},
|
||||||
|
|
@ -585,14 +589,6 @@ func toUpdatePayload(model *Model) (*dns.UpdateZonePayload, error) {
|
||||||
return nil, fmt.Errorf("nil model")
|
return nil, fmt.Errorf("nil model")
|
||||||
}
|
}
|
||||||
|
|
||||||
modelPrimaries := []string{}
|
|
||||||
for _, primary := range model.Primaries.Elements() {
|
|
||||||
primaryString, ok := primary.(types.String)
|
|
||||||
if !ok {
|
|
||||||
return nil, fmt.Errorf("type assertion failed")
|
|
||||||
}
|
|
||||||
modelPrimaries = append(modelPrimaries, primaryString.ValueString())
|
|
||||||
}
|
|
||||||
return &dns.UpdateZonePayload{
|
return &dns.UpdateZonePayload{
|
||||||
Name: model.Name.ValueStringPointer(),
|
Name: model.Name.ValueStringPointer(),
|
||||||
ContactEmail: model.ContactEmail.ValueStringPointer(),
|
ContactEmail: model.ContactEmail.ValueStringPointer(),
|
||||||
|
|
@ -603,6 +599,6 @@ func toUpdatePayload(model *Model) (*dns.UpdateZonePayload, error) {
|
||||||
RefreshTime: conversion.ToPtrInt32(model.RefreshTime),
|
RefreshTime: conversion.ToPtrInt32(model.RefreshTime),
|
||||||
RetryTime: conversion.ToPtrInt32(model.RetryTime),
|
RetryTime: conversion.ToPtrInt32(model.RetryTime),
|
||||||
NegativeCache: conversion.ToPtrInt32(model.NegativeCache),
|
NegativeCache: conversion.ToPtrInt32(model.NegativeCache),
|
||||||
Primaries: &modelPrimaries,
|
Primaries: nil, // API returns error if this field is set, even if nothing changes
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -290,8 +290,7 @@ func TestToPayloadUpdate(t *testing.T) {
|
||||||
Name: types.StringValue("Name"),
|
Name: types.StringValue("Name"),
|
||||||
},
|
},
|
||||||
&dns.UpdateZonePayload{
|
&dns.UpdateZonePayload{
|
||||||
Name: utils.Ptr("Name"),
|
Name: utils.Ptr("Name"),
|
||||||
Primaries: &[]string{},
|
|
||||||
},
|
},
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
|
|
@ -321,7 +320,6 @@ func TestToPayloadUpdate(t *testing.T) {
|
||||||
Acl: utils.Ptr("Acl"),
|
Acl: utils.Ptr("Acl"),
|
||||||
Description: utils.Ptr("Description"),
|
Description: utils.Ptr("Description"),
|
||||||
ContactEmail: utils.Ptr("ContactEmail"),
|
ContactEmail: utils.Ptr("ContactEmail"),
|
||||||
Primaries: &[]string{"Primary"},
|
|
||||||
RetryTime: utils.Ptr(int32(3)),
|
RetryTime: utils.Ptr(int32(3)),
|
||||||
RefreshTime: utils.Ptr(int32(4)),
|
RefreshTime: utils.Ptr(int32(4)),
|
||||||
ExpireTime: utils.Ptr(int32(5)),
|
ExpireTime: utils.Ptr(int32(5)),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue