Skip to content

Commit f669d4d

Browse files
authored
fix(domain): replace waiting zone on dns record (#2073)
* fix(domain): replace waiting zone by check record * fix(domain): replace waitdnszone * chore: update cassettes with domain related * fix(domain): remove unused variable * fix(domain): instance test * chore: update cassettes domain
1 parent e8ab5f7 commit f669d4d

23 files changed

+4408
-7410
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ require (
1616
github.com/nats-io/jwt/v2 v2.4.1
1717
github.com/nats-io/nats.go v1.27.1
1818
github.com/robfig/cron/v3 v3.0.1
19-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.19.0.20230717114303-9b6e07d6384b
19+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.20
2020
github.com/stretchr/testify v1.8.4
2121
)
2222

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
175175
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
176176
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.19.0.20230717114303-9b6e07d6384b h1:b5kG1Uzb4Fst6BoLXsgowQHj6WOkECIj+UkM1YwTIQY=
177177
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.19.0.20230717114303-9b6e07d6384b/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
178+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.20 h1:a9hSJdJcd16e0HoMsnFvaHvxB3pxSD+SC7+CISp7xY0=
179+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.20/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
178180
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
179181
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
180182
github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0=

scaleway/helpers_domain.go

+15
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,21 @@ func waitForDNSZone(ctx context.Context, domainAPI *domain.API, dnsZone string,
274274
}, scw.WithContext(ctx))
275275
}
276276

277+
func waitForDNSRecordExist(ctx context.Context, domainAPI *domain.API, dnsZone, recordName string, recordType domain.RecordType, timeout time.Duration) (*domain.Record, error) {
278+
retryInterval := defaultDomainZoneRetryInterval
279+
if DefaultWaitRetryInterval != nil {
280+
retryInterval = *DefaultWaitRetryInterval
281+
}
282+
283+
return domainAPI.WaitForDNSRecordExist(&domain.WaitForDNSRecordExistRequest{
284+
DNSZone: dnsZone,
285+
RecordName: recordName,
286+
RecordType: recordType,
287+
Timeout: scw.TimeDurationPtr(timeout),
288+
RetryInterval: scw.TimeDurationPtr(retryInterval),
289+
}, scw.WithContext(ctx))
290+
}
291+
277292
func findDefaultReverse(address string) string {
278293
parts := strings.Split(address, ".")
279294
for i, j := 0, len(parts)-1; i < j; i, j = i+1, j-1 {

scaleway/resource_domain_record.go

+15-22
Original file line numberDiff line numberDiff line change
@@ -275,15 +275,15 @@ func resourceScalewayDomainRecordCreate(ctx context.Context, d *schema.ResourceD
275275
return diag.FromErr(err)
276276
}
277277

278-
dnsZoneRes, err := waitForDNSZone(ctx, domainAPI, dnsZone, d.Timeout(schema.TimeoutCreate))
278+
record, err = waitForDNSRecordExist(ctx, domainAPI, dnsZone, record.Name, record.Type, d.Timeout(schema.TimeoutCreate))
279279
if err != nil {
280280
return diag.FromErr(err)
281281
}
282282

283-
tflog.Debug(ctx, fmt.Sprintf("DNS ZONE domain: %s subdomain: %s, status: %s",
284-
dnsZoneRes.Domain,
285-
dnsZoneRes.Subdomain,
286-
dnsZoneRes.Status))
283+
tflog.Debug(ctx, fmt.Sprintf("DNS ZONE domain: %s record: %s, type: %s",
284+
dnsZone,
285+
record.Name,
286+
record.Type))
287287

288288
dnsZoneData, err := domainAPI.ListDNSZoneRecords(&domain.ListDNSZoneRecordsRequest{
289289
DNSZone: dnsZone,
@@ -312,6 +312,7 @@ func resourceScalewayDomainRecordRead(ctx context.Context, d *schema.ResourceDat
312312
var record *domain.Record
313313
var dnsZone string
314314
var projectID string
315+
var err error
315316

316317
currentData := d.Get("data")
317318
// check if this is an inline import. Like: "terraform import scaleway_domain_record.www subdomain.domain.tld/11111111-1111-1111-1111-111111111111"
@@ -323,7 +324,6 @@ func resourceScalewayDomainRecordRead(ctx context.Context, d *schema.ResourceDat
323324

324325
dnsZone = tab[0]
325326
recordID := tab[1]
326-
327327
res, err := domainAPI.ListDNSZoneRecords(&domain.ListDNSZoneRecordsRequest{
328328
DNSZone: dnsZone,
329329
ID: &recordID,
@@ -342,8 +342,8 @@ func resourceScalewayDomainRecordRead(ctx context.Context, d *schema.ResourceDat
342342
} else {
343343
dnsZone = d.Get("dns_zone").(string)
344344

345-
recordTypeRaw, recordtTypeExist := d.GetOk("type")
346-
if !recordtTypeExist {
345+
recordTypeRaw, recordTypeExist := d.GetOk("type")
346+
if !recordTypeExist {
347347
return diag.FromErr(fmt.Errorf("record type not found"))
348348
}
349349
recordType := domain.RecordType(recordTypeRaw.(string))
@@ -376,7 +376,7 @@ func resourceScalewayDomainRecordRead(ctx context.Context, d *schema.ResourceDat
376376
return nil
377377
}
378378

379-
res, err := waitForDNSZone(ctx, domainAPI, dnsZone, d.Timeout(schema.TimeoutRead))
379+
dnsZones, err := domainAPI.ListDNSZones(&domain.ListDNSZonesRequest{DNSZone: dnsZone}, scw.WithAllPages(), scw.WithContext(ctx))
380380
if err != nil {
381381
if is404Error(err) || is403Error(err) {
382382
d.SetId("")
@@ -385,8 +385,9 @@ func resourceScalewayDomainRecordRead(ctx context.Context, d *schema.ResourceDat
385385
return diag.FromErr(err)
386386
}
387387

388-
projectID = res.ProjectID
389-
_ = d.Set("root_zone", res.Subdomain == "")
388+
// get the default first record
389+
projectID = dnsZones.DNSZones[0].ProjectID
390+
_ = d.Set("root_zone", dnsZones.DNSZones[0].Subdomain == "")
390391

391392
// retrieve data from record
392393
if len(currentData.(string)) == 0 {
@@ -481,7 +482,7 @@ func resourceScalewayDomainRecordUpdate(ctx context.Context, d *schema.ResourceD
481482
return diag.FromErr(err)
482483
}
483484

484-
_, err = waitForDNSZone(ctx, domainAPI, d.Get("dns_zone").(string), d.Timeout(schema.TimeoutUpdate))
485+
_, err = waitForDNSRecordExist(ctx, domainAPI, d.Get("dns_zone").(string), record.Name, record.Type, d.Timeout(schema.TimeoutUpdate))
485486
if err != nil {
486487
return diag.FromErr(err)
487488
}
@@ -510,14 +511,6 @@ func resourceScalewayDomainRecordDelete(ctx context.Context, d *schema.ResourceD
510511
}
511512
d.SetId("")
512513

513-
_, err = waitForDNSZone(ctx, domainAPI, d.Get("dns_zone").(string), d.Timeout(schema.TimeoutDelete))
514-
if err != nil && !errorCheck(err, domain.ErrCodeNoSuchDNSZone) {
515-
if is404Error(err) || is403Error(err) {
516-
return nil
517-
}
518-
return diag.FromErr(err)
519-
}
520-
521514
// for non-root zone, if the zone have only NS records, then delete the zone
522515
if d.Get("keep_empty_zone").(bool) || d.Get("root_zone").(bool) {
523516
return nil
@@ -543,10 +536,10 @@ func resourceScalewayDomainRecordDelete(ctx context.Context, d *schema.ResourceD
543536

544537
_, err = waitForDNSZone(ctx, domainAPI, d.Get("dns_zone").(string), d.Timeout(schema.TimeoutDelete))
545538
if err != nil {
546-
if errorCheck(err, domain.ErrCodeNoSuchDNSZone) {
539+
if is404Error(err) || is403Error(err) {
547540
return nil
548541
}
549-
return diag.FromErr(fmt.Errorf("failed to wait for dns zone before deleting: %w", err))
542+
return diag.FromErr(err)
550543
}
551544

552545
_, err = domainAPI.DeleteDNSZone(&domain.DeleteDNSZoneRequest{

scaleway/resource_domain_zone.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,15 @@ func resourceScalewayDomainZoneUpdate(ctx context.Context, d *schema.ResourceDat
181181
func resourceScalewayDomainZoneDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
182182
domainAPI := newDomainAPI(meta)
183183

184-
_, err := domainAPI.DeleteDNSZone(&domain.DeleteDNSZoneRequest{
184+
_, err := waitForDNSZone(ctx, domainAPI, d.Id(), d.Timeout(schema.TimeoutDelete))
185+
if err != nil {
186+
if is404Error(err) || is403Error(err) {
187+
return nil
188+
}
189+
return diag.FromErr(err)
190+
}
191+
192+
_, err = domainAPI.DeleteDNSZone(&domain.DeleteDNSZoneRequest{
185193
ProjectID: d.Get("project_id").(string),
186194
DNSZone: d.Id(),
187195
}, scw.WithContext(ctx))

scaleway/resource_instance_ip_reverse_dns_test.go

+12-11
Original file line numberDiff line numberDiff line change
@@ -22,32 +22,33 @@ func TestAccScalewayInstanceIPReverseDns_Basic(t *testing.T) {
2222
2323
resource "scaleway_domain_record" "tf_A" {
2424
dns_zone = %[1]q
25-
name = "tf-reverse-instance"
25+
name = ""
2626
type = "A"
2727
data = "${scaleway_instance_ip.main.address}"
2828
ttl = 3600
2929
priority = 1
3030
}
31-
`, testDomain),
31+
`, testDNSZone),
3232
},
3333
{
3434
Config: fmt.Sprintf(`
3535
resource "scaleway_instance_ip" "main" {}
3636
3737
resource "scaleway_domain_record" "tf_A" {
38-
dns_zone = %[1]q
39-
name = "tf-reverse-instance"
40-
type = "A"
41-
data = "${scaleway_instance_ip.main.address}"
42-
ttl = 3600
43-
priority = 1
38+
dns_zone = %[1]q
39+
name = ""
40+
type = "A"
41+
data = "${scaleway_instance_ip.main.address}"
42+
ttl = 3600
43+
priority = 1
4444
}
4545
4646
resource "scaleway_instance_ip_reverse_dns" "base" {
47-
ip_id = scaleway_instance_ip.main.id
48-
reverse = %[2]q
47+
ip_id = scaleway_instance_ip.main.id
48+
reverse = %[1]q
49+
depends_on = [scaleway_domain_record.tf_A]
4950
}
50-
`, testDomain, testDNSZone),
51+
`, testDNSZone),
5152
Check: resource.ComposeTestCheckFunc(
5253
resource.TestCheckResourceAttr("scaleway_instance_ip_reverse_dns.base", "reverse", testDNSZone),
5354
),

scaleway/resource_vpc_public_gateway_ip_reverse_test.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func TestAccScalewayVPCPublicGatewayIPReverseDns_Basic(t *testing.T) {
2424
2525
resource "scaleway_domain_record" "tf_A" {
2626
dns_zone = %[1]q
27-
name = "tf-reverse-vpcgw"
27+
name = ""
2828
type = "A"
2929
data = "${scaleway_vpc_public_gateway_ip.main.address}"
3030
ttl = 3600
@@ -33,9 +33,10 @@ func TestAccScalewayVPCPublicGatewayIPReverseDns_Basic(t *testing.T) {
3333
3434
resource "scaleway_vpc_public_gateway_ip_reverse_dns" "main" {
3535
gateway_ip_id = scaleway_vpc_public_gateway_ip.main.id
36-
reverse = %[2]q
36+
reverse = %[1]q
37+
depends_on = [scaleway_domain_record.tf_A]
3738
}
38-
`, testDomain, testDNSZone),
39+
`, testDNSZone),
3940
Check: resource.ComposeTestCheckFunc(
4041
resource.TestCheckResourceAttr("scaleway_vpc_public_gateway_ip_reverse_dns.main", "reverse", testDNSZone),
4142
),

0 commit comments

Comments
 (0)