Skip to content

Commit c0b3475

Browse files
committed
feat(domain): add chore of new resource order domain
1 parent 288e3f2 commit c0b3475

File tree

5 files changed

+357
-169
lines changed

5 files changed

+357
-169
lines changed

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ require (
3636
gopkg.in/dnaeon/go-vcr.v3 v3.2.0
3737
)
3838

39+
replace github.com/scaleway/scaleway-sdk-go => /Users/jonathanremy/Desktop/scaleway-sdk-go
40+
3941
require (
4042
github.com/Masterminds/goutils v1.1.1 // indirect
4143
github.com/Masterminds/semver/v3 v3.2.0 // indirect

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,6 @@ github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXq
280280
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
281281
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
282282
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
283-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30.0.20241129094524-023aa8142bc1 h1:0OKzyRfLH+dWSPOBvwbhNcBTbEiuNkv8mdYGev1+/1g=
284-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30.0.20241129094524-023aa8142bc1/go.mod h1:kAoejOVBg1E/aVAR6IwKWEmbLCEg2IXklzPAkxzAaXA=
285283
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
286284
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
287285
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=

internal/services/domain/helpers.go

Lines changed: 113 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
"strconv"
87
"strings"
98
"time"
109

@@ -481,6 +480,7 @@ func flattenTldOffers(offers map[string]*domain.TldOffer) []map[string]interface
481480

482481
return flattenedOffers
483482
}
483+
484484
func flattenExternalDomainRegistrationStatus(status *domain.DomainRegistrationStatusExternalDomain) map[string]interface{} {
485485
if status == nil {
486486
return nil
@@ -590,6 +590,118 @@ func waitForTaskCompletion(ctx context.Context, registrarAPI *domain.RegistrarAP
590590
return retry.NonRetryableError(fmt.Errorf("unexpected task status: %v", status))
591591
})
592592
}
593+
func waitForUpdateDomainTaskCompletion(ctx context.Context, registrarAPI *domain.RegistrarAPI, domainName string, duration int) ([]*domain.Task, error) {
594+
timeout := time.Duration(duration) * time.Second
595+
var completedTasks []*domain.Task
596+
597+
err := retry.RetryContext(ctx, timeout, func() *retry.RetryError {
598+
tasks, err := registrarAPI.ListTasks(&domain.RegistrarAPIListTasksRequest{
599+
Domain: &domainName,
600+
}, scw.WithContext(ctx), scw.WithAllPages())
601+
if err != nil {
602+
return retry.NonRetryableError(fmt.Errorf("failed to list tasks: %w", err))
603+
}
604+
605+
allSuccess := true
606+
completedTasks = tasks.Tasks
607+
for _, task := range tasks.Tasks {
608+
if task.Type == domain.TaskTypeUpdateDomain {
609+
if task.Status != domain.TaskStatusSuccess {
610+
allSuccess = false
611+
if task.Status == domain.TaskStatusPending {
612+
return retry.RetryableError(errors.New("update_domain task is still pending, retrying"))
613+
}
614+
}
615+
}
616+
}
617+
618+
if allSuccess {
619+
return nil
620+
}
621+
622+
return retry.RetryableError(errors.New("not all update_domain tasks are successful, retrying"))
623+
})
624+
625+
if err != nil {
626+
return nil, err
627+
}
628+
629+
return completedTasks, nil
630+
}
631+
632+
func ExpandDSRecord(dsRecordList []interface{}) *domain.DSRecord {
633+
if len(dsRecordList) == 0 || dsRecordList[0] == nil {
634+
return nil
635+
}
636+
637+
dsRecordMap := dsRecordList[0].(map[string]interface{})
638+
dsRecord := &domain.DSRecord{
639+
KeyID: uint32(dsRecordMap["key_id"].(int)),
640+
Algorithm: domain.DSRecordAlgorithm(dsRecordMap["algorithm"].(string)),
641+
}
642+
643+
if digestList, ok := dsRecordMap["digest"].([]interface{}); ok && len(digestList) > 0 {
644+
digestMap := digestList[0].(map[string]interface{})
645+
dsRecord.Digest = &domain.DSRecordDigest{
646+
Type: domain.DSRecordDigestType(digestMap["type"].(string)),
647+
Digest: digestMap["digest"].(string),
648+
}
649+
650+
if publicKeyList, ok := digestMap["public_key"].([]interface{}); ok && len(publicKeyList) > 0 {
651+
publicKeyMap := publicKeyList[0].(map[string]interface{})
652+
dsRecord.Digest.PublicKey = &domain.DSRecordPublicKey{
653+
Key: publicKeyMap["key"].(string),
654+
}
655+
}
656+
}
657+
658+
if publicKeyList, ok := dsRecordMap["public_key"].([]interface{}); ok && len(publicKeyList) > 0 {
659+
publicKeyMap := publicKeyList[0].(map[string]interface{})
660+
dsRecord.PublicKey = &domain.DSRecordPublicKey{
661+
Key: publicKeyMap["key"].(string),
662+
}
663+
}
664+
665+
return dsRecord
666+
}
667+
668+
func FlattenDSRecord(dsRecord *domain.DSRecord) []map[string]interface{} {
669+
if dsRecord == nil {
670+
return nil
671+
}
672+
673+
result := map[string]interface{}{
674+
"key_id": dsRecord.KeyID,
675+
"algorithm": string(dsRecord.Algorithm),
676+
}
677+
678+
if dsRecord.Digest != nil {
679+
digest := map[string]interface{}{
680+
"type": string(dsRecord.Digest.Type),
681+
"digest": dsRecord.Digest.Digest,
682+
}
683+
684+
if dsRecord.Digest.PublicKey != nil {
685+
digest["public_key"] = []map[string]interface{}{
686+
{
687+
"key": dsRecord.Digest.PublicKey.Key,
688+
},
689+
}
690+
}
691+
692+
result["digest"] = []map[string]interface{}{digest}
693+
}
694+
695+
if dsRecord.PublicKey != nil {
696+
result["public_key"] = []map[string]interface{}{
697+
{
698+
"key": dsRecord.PublicKey.Key,
699+
},
700+
}
701+
}
702+
703+
return []map[string]interface{}{result}
704+
}
593705

594706
func ExpandDSRecord(dsRecordList []interface{}) *domain.DSRecord {
595707
if len(dsRecordList) == 0 || dsRecordList[0] == nil {

0 commit comments

Comments
 (0)