diff --git a/go.mod b/go.mod index df7be65..a0290fa 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/spf13/pflag v1.0.10 github.com/spf13/viper v1.21.0 github.com/stackitcloud/stackit-sdk-go/core v0.24.1 - github.com/stackitcloud/stackit-sdk-go/services/dns v0.17.6 + github.com/stackitcloud/stackit-sdk-go/services/dns v0.19.2 github.com/stretchr/testify v1.11.1 go.uber.org/mock v0.6.0 go.uber.org/zap v1.27.1 diff --git a/go.sum b/go.sum index 93b7fe8..4233bf0 100644 --- a/go.sum +++ b/go.sum @@ -155,8 +155,8 @@ github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= github.com/stackitcloud/stackit-sdk-go/core v0.24.1 h1:IrG0XBlJivUpXC4Y6TE+6FeSxNPs1JQXsero0ivwh0o= github.com/stackitcloud/stackit-sdk-go/core v0.24.1/go.mod h1:osMglDby4csGZ5sIfhNyYq1bS1TxIdPY88+skE/kkmI= -github.com/stackitcloud/stackit-sdk-go/services/dns v0.17.6 h1:GBRb49x5Nax/oQQaaf2F3kKwv8DQQOL0TQOC0C/v/Ew= -github.com/stackitcloud/stackit-sdk-go/services/dns v0.17.6/go.mod h1:IX9iL3MigDZUmzwswTJMfYvyi118KAHrFMfjJUy5NYk= +github.com/stackitcloud/stackit-sdk-go/services/dns v0.19.2 h1:PE7TXoR2ZjVym5E4apZFJxEkApAid1/Z4x1Mz2QIcD0= +github.com/stackitcloud/stackit-sdk-go/services/dns v0.19.2/go.mod h1:3NZpITg0qJ+f1y0RUTcXKc4e122tFhHDIVm2mY0wWsw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= diff --git a/internal/stackitprovider/apply_changes.go b/internal/stackitprovider/apply_changes.go index 87f994b..5518d8b 100644 --- a/internal/stackitprovider/apply_changes.go +++ b/internal/stackitprovider/apply_changes.go @@ -5,7 +5,7 @@ import ( "fmt" "sync" - stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns" + stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api" "go.uber.org/zap" "sigs.k8s.io/external-dns/endpoint" "sigs.k8s.io/external-dns/plan" @@ -124,7 +124,7 @@ func (d *StackitDNSProvider) createRRSet( return fmt.Errorf("no matching zone found for %s", change.DNSName) } - logFields := getLogFields(change, CREATE, *resultZone.Id) + logFields := getLogFields(change, CREATE, resultZone.Id) d.logger.Info("create record set", logFields...) if d.dryRun { @@ -138,7 +138,7 @@ func (d *StackitDNSProvider) createRRSet( rrSetPayload := getStackitRecordSetPayload(change) // ignore all errors to just retry on next run - _, err := d.apiClient.CreateRecordSet(ctx, d.projectId, *resultZone.Id).CreateRecordSetPayload(rrSetPayload).Execute() + _, err := d.apiClient.DefaultAPI.CreateRecordSet(ctx, d.projectId, resultZone.Id).CreateRecordSetPayload(rrSetPayload).Execute() if err != nil { d.logger.Error("error creating record set", zap.Error(err)) @@ -163,7 +163,7 @@ func (d *StackitDNSProvider) updateRRSet( return err } - logFields := getLogFields(change, UPDATE, *resultRRSet.Id) + logFields := getLogFields(change, UPDATE, resultRRSet.Id) d.logger.Info("update record set", logFields...) if d.dryRun { @@ -174,7 +174,7 @@ func (d *StackitDNSProvider) updateRRSet( rrSet := getStackitPartialUpdateRecordSetPayload(change) - _, err = d.apiClient.PartialUpdateRecordSet(ctx, d.projectId, *resultZone.Id, *resultRRSet.Id).PartialUpdateRecordSetPayload(rrSet).Execute() + _, err = d.apiClient.DefaultAPI.PartialUpdateRecordSet(ctx, d.projectId, resultZone.Id, resultRRSet.Id).PartialUpdateRecordSetPayload(rrSet).Execute() if err != nil { d.logger.Error("error updating record set", zap.Error(err)) @@ -199,7 +199,7 @@ func (d *StackitDNSProvider) deleteRRSet( return err } - logFields := getLogFields(change, DELETE, *resultRRSet.Id) + logFields := getLogFields(change, DELETE, resultRRSet.Id) d.logger.Info("delete record set", logFields...) if d.dryRun { @@ -208,7 +208,7 @@ func (d *StackitDNSProvider) deleteRRSet( return nil } - _, err = d.apiClient.DeleteRecordSet(ctx, d.projectId, *resultZone.Id, *resultRRSet.Id).Execute() + _, err = d.apiClient.DefaultAPI.DeleteRecordSet(ctx, d.projectId, resultZone.Id, resultRRSet.Id).Execute() if err != nil { d.logger.Error("error deleting record set", zap.Error(err)) diff --git a/internal/stackitprovider/apply_changes_test.go b/internal/stackitprovider/apply_changes_test.go index 7c692c0..b831b5a 100644 --- a/internal/stackitprovider/apply_changes_test.go +++ b/internal/stackitprovider/apply_changes_test.go @@ -8,7 +8,7 @@ import ( "net/http/httptest" "testing" - stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns" + stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api" "github.com/stretchr/testify/assert" "sigs.k8s.io/external-dns/endpoint" "sigs.k8s.io/external-dns/plan" @@ -114,8 +114,7 @@ func TestNoRRSetFound(t *testing.T) { ctx := context.Background() validZoneResponse := getValidResponseZoneAllBytes(t) rrSets := getValidResponseRRSetAll() - rrSet := *rrSets.RrSets - *rrSet[0].Name = "notfound.test.com" + rrSets.RrSets[0].Name = "notfound.test.com" validRRSetResponse, err := json.Marshal(rrSets) assert.NoError(t, err) @@ -375,13 +374,13 @@ func getValidResponseZoneAllBytes(t *testing.T) []byte { func getValidZoneResponseAll() stackitdnsclient.ListZonesResponse { return stackitdnsclient.ListZonesResponse{ - ItemsPerPage: pointerTo(int64(10)), - Message: pointerTo("success"), - TotalItems: pointerTo(int64(2)), - TotalPages: pointerTo(int64(1)), - Zones: &[]stackitdnsclient.Zone{ - {Id: pointerTo("1234"), DnsName: pointerTo("test.com")}, - {Id: pointerTo("5678"), DnsName: pointerTo("test2.com")}, + ItemsPerPage: int32(10), + Message: new("success"), + TotalItems: int32(2), + TotalPages: int32(1), + Zones: []stackitdnsclient.Zone{ + {Id: "1234", DnsName: "test.com"}, + {Id: "5678", DnsName: "test2.com"}, }, } } @@ -389,28 +388,42 @@ func getValidZoneResponseAll() stackitdnsclient.ListZonesResponse { func getValidResponseRRSetAllBytes(t *testing.T) []byte { t.Helper() - rrSets := getValidResponseRRSetAll() - validRRSetResponse, err := json.Marshal(rrSets) + rrSetResponse := getValidRecordSetResponse() + validRRSetResponse, err := json.Marshal(rrSetResponse) assert.NoError(t, err) return validRRSetResponse } +func getValidRecordSetResponse() stackitdnsclient.RecordSetResponse { + return stackitdnsclient.RecordSetResponse{ + Message: new("success"), + Rrset: stackitdnsclient.RecordSet{ + Name: "test.com", + Type: "A", + Ttl: int32(300), + Records: []stackitdnsclient.Record{ + {Content: "1.2.3.4"}, + }, + }, + } +} + func getValidResponseRRSetAll() stackitdnsclient.ListRecordSetsResponse { return stackitdnsclient.ListRecordSetsResponse{ - ItemsPerPage: pointerTo(int64(20)), - Message: pointerTo("success"), - RrSets: &[]stackitdnsclient.RecordSet{ + ItemsPerPage: int32(20), + Message: new("success"), + RrSets: []stackitdnsclient.RecordSet{ { - Name: pointerTo("test.com"), - Type: pointerTo(stackitdnsclient.RECORDSETTYPE_A), - Ttl: pointerTo(int64(300)), - Records: &[]stackitdnsclient.Record{ - {Content: pointerTo("1.2.3.4")}, + Name: "test.com", + Type: "A", + Ttl: int32(300), + Records: []stackitdnsclient.Record{ + {Content: "1.2.3.4"}, }, }, }, - TotalItems: pointerTo(int64(2)), - TotalPages: pointerTo(int64(1)), + TotalItems: int32(2), + TotalPages: int32(1), } } diff --git a/internal/stackitprovider/helper.go b/internal/stackitprovider/helper.go index 006bc4d..d54cf09 100644 --- a/internal/stackitprovider/helper.go +++ b/internal/stackitprovider/helper.go @@ -1,9 +1,10 @@ package stackitprovider import ( + "math" "strings" - stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns" + stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api" "go.uber.org/zap" "sigs.k8s.io/external-dns/endpoint" ) @@ -20,10 +21,7 @@ func findBestMatchingZone( for i := range zones { zone := &zones[i] - if zone.DnsName == nil { - continue - } - if l := len(*zone.DnsName); l > count && strings.Contains(rrSetName, *zone.DnsName) { + if l := len(zone.DnsName); l > count && strings.Contains(rrSetName, zone.DnsName) { count = l domainZone = zone } @@ -43,10 +41,7 @@ func findRRSet( ) (*stackitdnsclient.RecordSet, bool) { for i := range rrSets { rrSet := &rrSets[i] - if rrSet.Name == nil || rrSet.Type == nil { - continue - } - if *rrSet.Name == rrSetName && string(*rrSet.Type) == recordType { + if rrSet.Name == rrSetName && rrSet.Type == recordType { return rrSet, true } } @@ -77,15 +72,15 @@ func getStackitRecordSetPayload(change *endpoint.Endpoint) stackitdnsclient.Crea records := make([]stackitdnsclient.RecordPayload, len(change.Targets)) for i := range change.Targets { records[i] = stackitdnsclient.RecordPayload{ - Content: &change.Targets[i], + Content: change.Targets[i], } } return stackitdnsclient.CreateRecordSetPayload{ - Name: &change.DNSName, - Records: &records, - Ttl: pointerTo(int64(change.RecordTTL)), - Type: (stackitdnsclient.CreateRecordSetPayloadGetTypeAttributeType)(&change.RecordType), + Name: change.DNSName, + Records: records, + Ttl: safeTTLToInt32(change.RecordTTL), + Type: change.RecordType, } } @@ -94,14 +89,14 @@ func getStackitPartialUpdateRecordSetPayload(change *endpoint.Endpoint) stackitd records := make([]stackitdnsclient.RecordPayload, len(change.Targets)) for i := range change.Targets { records[i] = stackitdnsclient.RecordPayload{ - Content: &change.Targets[i], + Content: change.Targets[i], } } return stackitdnsclient.PartialUpdateRecordSetPayload{ Name: &change.DNSName, - Records: &records, - Ttl: pointerTo(int64(change.RecordTTL)), + Records: records, + Ttl: safeTTLToInt32(change.RecordTTL), } } @@ -116,7 +111,18 @@ func getLogFields(change *endpoint.Endpoint, action string, id string) []zap.Fie } } -// pointerTo returns a pointer to the given value. -func pointerTo[T any](v T) *T { +// safeTTLToInt32 safely converts an endpoint.TTL (int64) to *int32, clamping to valid bounds. +func safeTTLToInt32(ttl endpoint.TTL) *int32 { + var v int32 + + switch { + case int64(ttl) > math.MaxInt32: + v = math.MaxInt32 + case int64(ttl) < 0: + v = 0 + default: + v = int32(ttl) // #nosec G115 -- bounds checked above + } + return &v } diff --git a/internal/stackitprovider/helper_test.go b/internal/stackitprovider/helper_test.go index 78b128a..14fa489 100644 --- a/internal/stackitprovider/helper_test.go +++ b/internal/stackitprovider/helper_test.go @@ -4,7 +4,7 @@ import ( "reflect" "testing" - stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns" + stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api" "go.uber.org/zap" "sigs.k8s.io/external-dns/endpoint" ) @@ -72,15 +72,15 @@ func TestGetStackitRRSetRecordPost(t *testing.T) { }, } expected := stackitdnsclient.CreateRecordSetPayload{ - Name: pointerTo("test."), - Ttl: pointerTo(int64(300)), - Type: (stackitdnsclient.CreateRecordSetPayloadGetTypeAttributeType)(pointerTo("A")), - Records: &[]stackitdnsclient.RecordPayload{ + Name: "test.", + Ttl: new(int32(300)), + Type: "A", + Records: []stackitdnsclient.RecordPayload{ { - Content: pointerTo("192.0.2.1"), + Content: "192.0.2.1", }, { - Content: pointerTo("192.0.2.2"), + Content: "192.0.2.2", }, }, } @@ -94,9 +94,9 @@ func TestFindBestMatchingZone(t *testing.T) { t.Parallel() zones := []stackitdnsclient.Zone{ - {DnsName: pointerTo("foo.com")}, - {DnsName: pointerTo("bar.com")}, - {DnsName: pointerTo("baz.com")}, + {DnsName: "foo.com"}, + {DnsName: "bar.com"}, + {DnsName: "baz.com"}, } tests := []struct { @@ -125,9 +125,9 @@ func TestFindRRSet(t *testing.T) { t.Parallel() rrSets := []stackitdnsclient.RecordSet{ - {Name: pointerTo("www.foo.com"), Type: pointerTo(stackitdnsclient.RECORDSETTYPE_A)}, - {Name: pointerTo("www.bar.com"), Type: pointerTo(stackitdnsclient.RECORDSETTYPE_A)}, - {Name: pointerTo("www.baz.com"), Type: pointerTo(stackitdnsclient.RECORDSETTYPE_A)}, + {Name: "www.foo.com", Type: "A"}, + {Name: "www.bar.com", Type: "A"}, + {Name: "www.baz.com", Type: "A"}, } tests := []struct { @@ -196,14 +196,14 @@ func TestGetStackitRRSetRecordPatch(t *testing.T) { } expected := stackitdnsclient.PartialUpdateRecordSetPayload{ - Name: pointerTo("test."), - Ttl: pointerTo(int64(300)), - Records: &[]stackitdnsclient.RecordPayload{ + Name: new("test."), + Ttl: new(int32(300)), + Records: []stackitdnsclient.RecordPayload{ { - Content: pointerTo("192.0.2.1"), + Content: "192.0.2.1", }, { - Content: pointerTo("192.0.2.2"), + Content: "192.0.2.2", }, }, } diff --git a/internal/stackitprovider/records.go b/internal/stackitprovider/records.go index a4e5aec..5b66d9b 100644 --- a/internal/stackitprovider/records.go +++ b/internal/stackitprovider/records.go @@ -3,7 +3,7 @@ package stackitprovider import ( "context" - stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns" + stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api" "sigs.k8s.io/external-dns/endpoint" "sigs.k8s.io/external-dns/provider" ) @@ -25,10 +25,7 @@ func (d *StackitDNSProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, for i := range zones { zone := &zones[i] - if zone.Id == nil { - continue - } - zoneIdsChannel <- *zone.Id + zoneIdsChannel <- zone.Id } for i := 0; i < len(zones); i++ { @@ -104,11 +101,11 @@ func (d *StackitDNSProvider) collectEndPoints( } func recordSetCoreFields(r *stackitdnsclient.RecordSet) (name string, recordType string, ttl endpoint.TTL, records []stackitdnsclient.Record, ok bool) { - if r == nil || r.Type == nil || r.Name == nil || r.Ttl == nil || r.Records == nil { + if r == nil || len(r.Records) == 0 { return "", "", 0, nil, false } - return *r.Name, string(*r.Type), endpoint.TTL(*r.Ttl), *r.Records, true + return r.Name, r.Type, endpoint.TTL(r.Ttl), r.Records, true } func endpointsFromRecords(name, recordType string, ttl endpoint.TTL, records []stackitdnsclient.Record) []*endpoint.Endpoint { @@ -116,11 +113,8 @@ func endpointsFromRecords(name, recordType string, ttl endpoint.TTL, records []s for i := range records { rec := &records[i] - if rec.Content == nil { - continue - } - endpoints = append(endpoints, endpoint.NewEndpointWithTTL(name, recordType, ttl, *rec.Content)) + endpoints = append(endpoints, endpoint.NewEndpointWithTTL(name, recordType, ttl, rec.Content)) } return endpoints diff --git a/internal/stackitprovider/records_test.go b/internal/stackitprovider/records_test.go index 71d53bb..feb44d5 100644 --- a/internal/stackitprovider/records_test.go +++ b/internal/stackitprovider/records_test.go @@ -8,7 +8,7 @@ import ( "github.com/goccy/go-json" stackitconfig "github.com/stackitcloud/stackit-sdk-go/core/config" - stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns" + stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api" "github.com/stretchr/testify/assert" "go.uber.org/zap" "sigs.k8s.io/external-dns/endpoint" @@ -110,11 +110,11 @@ func TestEmptyRRSetRouteRecords(t *testing.T) { w.Header().Set("Content-Type", "application/json") zones := stackitdnsclient.ListZonesResponse{ - ItemsPerPage: pointerTo(int64(1)), - Message: pointerTo("success"), - TotalItems: pointerTo(int64(2)), - TotalPages: pointerTo(int64(2)), - Zones: &[]stackitdnsclient.Zone{{Id: pointerTo("1234")}}, + ItemsPerPage: int32(1), + Message: new("success"), + TotalItems: int32(2), + TotalPages: int32(2), + Zones: []stackitdnsclient.Zone{{Id: "1234"}}, } successResponseBytes, err := json.Marshal(zones) assert.NoError(t, err) @@ -212,20 +212,20 @@ func getZonesHandlerRecordsPaged(t *testing.T) http.HandlerFunc { zones := stackitdnsclient.ListZonesResponse{} if r.URL.Query().Get("page") == "1" { zones = stackitdnsclient.ListZonesResponse{ - ItemsPerPage: pointerTo(int64(1)), - Message: pointerTo("success"), - TotalItems: pointerTo(int64(2)), - TotalPages: pointerTo(int64(2)), - Zones: &[]stackitdnsclient.Zone{{Id: pointerTo("1234")}}, + ItemsPerPage: int32(1), + Message: new("success"), + TotalItems: int32(2), + TotalPages: int32(2), + Zones: []stackitdnsclient.Zone{{Id: "1234"}}, } } if r.URL.Query().Get("page") == "2" { zones = stackitdnsclient.ListZonesResponse{ - ItemsPerPage: pointerTo(int64(1)), - Message: pointerTo("success"), - TotalItems: pointerTo(int64(2)), - TotalPages: pointerTo(int64(2)), - Zones: &[]stackitdnsclient.Zone{{Id: pointerTo("5678")}}, + ItemsPerPage: int32(1), + Message: new("success"), + TotalItems: int32(2), + TotalPages: int32(2), + Zones: []stackitdnsclient.Zone{{Id: "5678"}}, } } successResponseBytes, err := json.Marshal(zones) @@ -245,38 +245,38 @@ func getRrsetsHandlerReecodsPaged(t *testing.T, domain string) http.HandlerFunc rrSets := stackitdnsclient.ListRecordSetsResponse{} if domain == "1234" { rrSets = stackitdnsclient.ListRecordSetsResponse{ - ItemsPerPage: pointerTo(int64(1)), - Message: pointerTo("success"), - RrSets: &[]stackitdnsclient.RecordSet{ + ItemsPerPage: int32(1), + Message: new("success"), + RrSets: []stackitdnsclient.RecordSet{ { - Name: pointerTo("test.com."), - Type: pointerTo(stackitdnsclient.RECORDSETTYPE_A), - Ttl: pointerTo(int64(300)), - Records: &[]stackitdnsclient.Record{ - {Content: pointerTo("1.2.3.4")}, + Name: "test.com.", + Type: "A", + Ttl: int32(300), + Records: []stackitdnsclient.Record{ + {Content: "1.2.3.4"}, }, }, }, - TotalItems: pointerTo(int64(1)), - TotalPages: pointerTo(int64(1)), + TotalItems: int32(1), + TotalPages: int32(1), } } if domain == "5678" { rrSets = stackitdnsclient.ListRecordSetsResponse{ - ItemsPerPage: pointerTo(int64(1)), - Message: pointerTo("success"), - RrSets: &[]stackitdnsclient.RecordSet{ + ItemsPerPage: int32(1), + Message: new("success"), + RrSets: []stackitdnsclient.RecordSet{ { - Name: pointerTo("test2.com."), - Type: pointerTo(stackitdnsclient.RECORDSETTYPE_A), - Ttl: pointerTo(int64(300)), - Records: &[]stackitdnsclient.Record{ - {Content: pointerTo("5.6.7.8")}, + Name: "test2.com.", + Type: "A", + Ttl: int32(300), + Records: []stackitdnsclient.Record{ + {Content: "5.6.7.8"}, }, }, }, - TotalItems: pointerTo(int64(1)), - TotalPages: pointerTo(int64(1)), + TotalItems: int32(1), + TotalPages: int32(1), } } @@ -307,13 +307,13 @@ func getZonesResponseRecordsNonPaged(t *testing.T, w http.ResponseWriter) { w.Header().Set("Content-Type", "application/json") zones := stackitdnsclient.ListZonesResponse{ - ItemsPerPage: pointerTo(int64(10)), - Message: pointerTo("success"), - TotalItems: pointerTo(int64(2)), - TotalPages: pointerTo(int64(1)), - Zones: &[]stackitdnsclient.Zone{ - {Id: pointerTo("1234"), DnsName: pointerTo("test.com")}, - {Id: pointerTo("5678"), DnsName: pointerTo("test2.com")}, + ItemsPerPage: int32(10), + Message: new("success"), + TotalItems: int32(2), + TotalPages: int32(1), + Zones: []stackitdnsclient.Zone{ + {Id: "1234", DnsName: "test.com"}, + {Id: "5678", DnsName: "test2.com"}, }, } successResponseBytes, err := json.Marshal(zones) @@ -329,21 +329,21 @@ func getRrsetsResponseRecordsNonPaged(t *testing.T, w http.ResponseWriter, domai w.Header().Set("Content-Type", "application/json") var rrSets = stackitdnsclient.ListRecordSetsResponse{ - ItemsPerPage: pointerTo(int64(20)), - Message: pointerTo("success"), - RrSets: &[]stackitdnsclient.RecordSet{ + ItemsPerPage: int32(20), + Message: new("success"), + RrSets: []stackitdnsclient.RecordSet{ { - Name: pointerTo(domain), - Type: pointerTo(stackitdnsclient.RECORDSETTYPE_A), - Ttl: pointerTo(int64(300)), - Records: &[]stackitdnsclient.Record{ - {Content: pointerTo(record)}, + Name: domain, + Type: "A", + Ttl: int32(300), + Records: []stackitdnsclient.Record{ + {Content: record}, }, - Id: pointerTo(id), + Id: id, }, }, - TotalItems: pointerTo(int64(2)), - TotalPages: pointerTo(int64(1)), + TotalItems: int32(2), + TotalPages: int32(1), } successResponseBytes, err := json.Marshal(rrSets) diff --git a/internal/stackitprovider/rrset_fetcher.go b/internal/stackitprovider/rrset_fetcher.go index 4819df1..c4308c5 100644 --- a/internal/stackitprovider/rrset_fetcher.go +++ b/internal/stackitprovider/rrset_fetcher.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns" + stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api" "go.uber.org/zap" "sigs.k8s.io/external-dns/endpoint" ) @@ -39,7 +39,7 @@ func (r *rrSetFetcher) fetchRecords( var result []stackitdnsclient.RecordSet var pager int32 = 1 - listRequest := r.apiClient.ListRecordSets(ctx, r.projectId, zoneId).Page(pager).PageSize(10000).ActiveEq(true) + listRequest := r.apiClient.DefaultAPI.ListRecordSets(ctx, r.projectId, zoneId).Page(pager).PageSize(10000).ActiveEq(true) if nameFilter != nil { listRequest = listRequest.NameLike(*nameFilter) @@ -50,17 +50,17 @@ func (r *rrSetFetcher) fetchRecords( return nil, err } - result = append(result, *rrSetResponse.RrSets...) + result = append(result, rrSetResponse.RrSets...) // if there is more than one page, we need to loop over the other pages and // issue another API request for each one of them pager++ - for int64(pager) <= *rrSetResponse.TotalPages { + for pager <= rrSetResponse.TotalPages { rrSetResponse, err := listRequest.Page(pager).Execute() if err != nil { return nil, err } - result = append(result, *rrSetResponse.RrSets...) + result = append(result, rrSetResponse.RrSets...) pager++ } @@ -83,7 +83,7 @@ func (r *rrSetFetcher) getRRSetForUpdateDeletion( return nil, nil, fmt.Errorf("record set name contains no zone dns name") } - domainRRSets, err := r.fetchRecords(ctx, *resultZone.Id, &change.DNSName) + domainRRSets, err := r.fetchRecords(ctx, resultZone.Id, &change.DNSName) if err != nil { return nil, nil, err } diff --git a/internal/stackitprovider/stackit.go b/internal/stackitprovider/stackit.go index 17815ba..adbbaad 100644 --- a/internal/stackitprovider/stackit.go +++ b/internal/stackitprovider/stackit.go @@ -2,7 +2,7 @@ package stackitprovider import ( stackitconfig "github.com/stackitcloud/stackit-sdk-go/core/config" - stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns" + stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api" "go.uber.org/zap" "sigs.k8s.io/external-dns/endpoint" "sigs.k8s.io/external-dns/provider" diff --git a/internal/stackitprovider/zone_fetcher.go b/internal/stackitprovider/zone_fetcher.go index b2e6c57..1ed90a2 100644 --- a/internal/stackitprovider/zone_fetcher.go +++ b/internal/stackitprovider/zone_fetcher.go @@ -3,7 +3,7 @@ package stackitprovider import ( "context" - stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns" + stackitdnsclient "github.com/stackitcloud/stackit-sdk-go/services/dns/v1api" "sigs.k8s.io/external-dns/endpoint" ) @@ -29,8 +29,7 @@ func newZoneFetcher( func (z *zoneFetcher) zones(ctx context.Context) ([]stackitdnsclient.Zone, error) { if len(z.domainFilter.Filters) == 0 { // no filters, return all zones - listRequest := z.apiClient.ListZones(ctx, z.projectId).ActiveEq(true) - zones, err := z.fetchZones(listRequest) + zones, err := z.fetchZones(new(z.apiClient.DefaultAPI.ListZones(ctx, z.projectId).ActiveEq(true))) if err != nil { return nil, err } @@ -41,8 +40,7 @@ func (z *zoneFetcher) zones(ctx context.Context) ([]stackitdnsclient.Zone, error var result []stackitdnsclient.Zone // send one request per filter for _, filter := range z.domainFilter.Filters { - listRequest := z.apiClient.ListZones(ctx, z.projectId).ActiveEq(true).DnsNameLike(filter) - zones, err := z.fetchZones(listRequest) + zones, err := z.fetchZones(new(z.apiClient.DefaultAPI.ListZones(ctx, z.projectId).ActiveEq(true).DnsNameLike(filter))) if err != nil { return nil, err } @@ -54,29 +52,29 @@ func (z *zoneFetcher) zones(ctx context.Context) ([]stackitdnsclient.Zone, error // fetchZones fetches all []stackitdnsclient.Zone from STACKIT DNS API. func (z *zoneFetcher) fetchZones( - listRequest stackitdnsclient.ApiListZonesRequest, + listRequest *stackitdnsclient.ApiListZonesRequest, ) ([]stackitdnsclient.Zone, error) { var result []stackitdnsclient.Zone var pager int32 = 1 - listRequest = listRequest.Page(1).PageSize(10000) + req := listRequest.Page(1).PageSize(10000) - zoneResponse, err := listRequest.Execute() + zoneResponse, err := req.Execute() if err != nil { return nil, err } - result = append(result, *zoneResponse.Zones...) + result = append(result, zoneResponse.Zones...) // if there is more than one page, we need to loop over the other pages and // issue another API request for each one of them pager++ - for int64(pager) <= *zoneResponse.TotalPages { - zoneResponse, err := listRequest.Page(pager).Execute() + for pager <= zoneResponse.TotalPages { + zoneResponse, err := req.Page(pager).Execute() if err != nil { return nil, err } - result = append(result, *zoneResponse.Zones...) + result = append(result, zoneResponse.Zones...) pager++ } diff --git a/pkg/api/adjust_endpoints_test.go b/pkg/api/adjust_endpoints_test.go index 9a7ddc4..b9d48cb 100644 --- a/pkg/api/adjust_endpoints_test.go +++ b/pkg/api/adjust_endpoints_test.go @@ -14,7 +14,7 @@ import ( "sigs.k8s.io/external-dns/endpoint" "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api" - mock_provider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" + mockprovider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" ) func TestWebhook_AdjustEndpoints(t *testing.T) { @@ -24,7 +24,7 @@ func TestWebhook_AdjustEndpoints(t *testing.T) { t.Cleanup(ctrl.Finish) mockLogger := zap.NewNop() - mockProvider := mock_provider.NewMockProvider(ctrl) + mockProvider := mockprovider.NewMockProvider(ctrl) mockMetricsCollector := getTestMockMetricsCollector(ctrl) app := api.New(mockLogger, mockMetricsCollector, mockProvider) diff --git a/pkg/api/api.go b/pkg/api/api.go index 5bd4e3f..3366db3 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -9,7 +9,7 @@ import ( "syscall" "time" - json "github.com/goccy/go-json" + "github.com/goccy/go-json" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/helmet" fiberlogger "github.com/gofiber/fiber/v2/middleware/logger" diff --git a/pkg/api/api_test.go b/pkg/api/api_test.go index 5f6b4e1..bd143f3 100644 --- a/pkg/api/api_test.go +++ b/pkg/api/api_test.go @@ -10,7 +10,7 @@ import ( "go.uber.org/zap" "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api" - mock_provider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" + mockprovider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" ) func TestApi(t *testing.T) { @@ -20,7 +20,7 @@ func TestApi(t *testing.T) { t.Cleanup(ctrl.Finish) mockLogger := zap.NewNop() - mockProvider := mock_provider.NewMockProvider(ctrl) + mockProvider := mockprovider.NewMockProvider(ctrl) mockMetricsCollector := getTestMockMetricsCollector(ctrl) app := api.New(mockLogger, mockMetricsCollector, mockProvider) diff --git a/pkg/api/apply_changes_test.go b/pkg/api/apply_changes_test.go index 3ebda65..372f1bf 100644 --- a/pkg/api/apply_changes_test.go +++ b/pkg/api/apply_changes_test.go @@ -16,7 +16,7 @@ import ( "sigs.k8s.io/external-dns/plan" "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api" - mock_provider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" + mockprovider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" ) func TestWebhook_ApplyChanges(t *testing.T) { @@ -33,7 +33,7 @@ func TestWebhook_ApplyChanges(t *testing.T) { t.Parallel() mockLogger := zap.NewNop() - mockProvider := mock_provider.NewMockProvider(ctrl) + mockProvider := mockprovider.NewMockProvider(ctrl) mockMetricsCollector := getTestMockMetricsCollector(ctrl) app := api.New(mockLogger, mockMetricsCollector, mockProvider) @@ -51,7 +51,7 @@ func TestWebhook_ApplyChanges(t *testing.T) { t.Parallel() mockLogger := zap.NewNop() - mockProvider := mock_provider.NewMockProvider(ctrl) + mockProvider := mockprovider.NewMockProvider(ctrl) mockMetricsCollector := getTestMockMetricsCollector(ctrl) app := api.New(mockLogger, mockMetricsCollector, mockProvider) @@ -68,7 +68,7 @@ func TestWebhook_ApplyChanges(t *testing.T) { t.Parallel() mockLogger := zap.NewNop() - mockProvider := mock_provider.NewMockProvider(ctrl) + mockProvider := mockprovider.NewMockProvider(ctrl) mockMetricsCollector := getTestMockMetricsCollector(ctrl) app := api.New(mockLogger, mockMetricsCollector, mockProvider) @@ -86,7 +86,7 @@ func TestWebhook_ApplyChanges(t *testing.T) { t.Parallel() mockLogger := zap.NewNop() - mockProvider := mock_provider.NewMockProvider(ctrl) + mockProvider := mockprovider.NewMockProvider(ctrl) mockMetricsCollector := getTestMockMetricsCollector(ctrl) app := api.New(mockLogger, mockMetricsCollector, mockProvider) diff --git a/pkg/api/domain_filter_test.go b/pkg/api/domain_filter_test.go index 1bb396b..2300a5a 100644 --- a/pkg/api/domain_filter_test.go +++ b/pkg/api/domain_filter_test.go @@ -14,7 +14,7 @@ import ( "sigs.k8s.io/external-dns/endpoint" "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api" - mock_provider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" + mockprovider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" ) func TestWebhook_DomainFilter(t *testing.T) { @@ -24,7 +24,7 @@ func TestWebhook_DomainFilter(t *testing.T) { t.Cleanup(ctrl.Finish) mockLogger := zap.NewNop() - mockProvider := mock_provider.NewMockProvider(ctrl) + mockProvider := mockprovider.NewMockProvider(ctrl) mockMetricsCollector := getTestMockMetricsCollector(ctrl) expectedDomainFilter := endpoint.DomainFilter{Filters: []string{"test"}} diff --git a/pkg/api/health_test.go b/pkg/api/health_test.go index 5377b44..ae9c9e2 100644 --- a/pkg/api/health_test.go +++ b/pkg/api/health_test.go @@ -11,7 +11,7 @@ import ( "go.uber.org/zap" "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api" - mock_provider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" + mockprovider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" ) func TestHealth(t *testing.T) { @@ -20,7 +20,7 @@ func TestHealth(t *testing.T) { ctrl := gomock.NewController(t) mockLogger := zap.NewNop() - mockProvider := mock_provider.NewMockProvider(ctrl) + mockProvider := mockprovider.NewMockProvider(ctrl) mockMetricsCollector := getTestMockMetricsCollector(ctrl) app := api.New(mockLogger, mockMetricsCollector, mockProvider) diff --git a/pkg/api/metrics.go b/pkg/api/metrics.go index e495d2e..d4368eb 100644 --- a/pkg/api/metrics.go +++ b/pkg/api/metrics.go @@ -8,7 +8,7 @@ import ( "github.com/gofiber/fiber/v2" "github.com/prometheus/client_golang/prometheus/promhttp" - metrics_collector "github.com/stackitcloud/external-dns-stackit-webhook/pkg/metrics" + metricscollector "github.com/stackitcloud/external-dns-stackit-webhook/pkg/metrics" ) // registerAt registers the metrics endpoint. @@ -16,7 +16,7 @@ func registerAt(app *fiber.App, path string) { app.Get(path, adaptor.HTTPHandler(promhttp.Handler())) } -func NewMetricsMiddleware(collector metrics_collector.HttpApiMetrics) fiber.Handler { +func NewMetricsMiddleware(collector metricscollector.HttpApiMetrics) fiber.Handler { return func(c *fiber.Ctx) error { started := time.Now() @@ -40,7 +40,7 @@ func NewMetricsMiddleware(collector metrics_collector.HttpApiMetrics) fiber.Hand } } -func collectHttpStatusErrors(status int, collector metrics_collector.HttpApiMetrics) { +func collectHttpStatusErrors(status int, collector metricscollector.HttpApiMetrics) { if status >= 400 && status < 500 { collector.Collect400TotalRequests() } else if status >= 500 && status < 600 { diff --git a/pkg/api/metrics_test.go b/pkg/api/metrics_test.go index 6d246e1..5412fd7 100644 --- a/pkg/api/metrics_test.go +++ b/pkg/api/metrics_test.go @@ -10,8 +10,8 @@ import ( "go.uber.org/mock/gomock" "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api" - metrics_collector "github.com/stackitcloud/external-dns-stackit-webhook/pkg/metrics" - mock_metrics_collector "github.com/stackitcloud/external-dns-stackit-webhook/pkg/metrics/mock" + metricscollector "github.com/stackitcloud/external-dns-stackit-webhook/pkg/metrics" + mockmetricscollector "github.com/stackitcloud/external-dns-stackit-webhook/pkg/metrics/mock" ) func TestMetricsMiddleware(t *testing.T) { @@ -20,7 +20,7 @@ func TestMetricsMiddleware(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - metricsCollector := mock_metrics_collector.NewMockHttpApiMetrics(mockCtrl) + metricsCollector := mockmetricscollector.NewMockHttpApiMetrics(mockCtrl) // Expectations method := http.MethodGet @@ -42,7 +42,7 @@ func TestMetricsMiddleware(t *testing.T) { assert.Equal(t, http.StatusOK, resp.StatusCode) } -func setupTestMetrics(collector metrics_collector.HttpApiMetrics) *fiber.App { +func setupTestMetrics(collector metricscollector.HttpApiMetrics) *fiber.App { app := fiber.New() app.Use(api.NewMetricsMiddleware(collector)) app.Get("/", func(c *fiber.Ctx) error { @@ -52,8 +52,8 @@ func setupTestMetrics(collector metrics_collector.HttpApiMetrics) *fiber.App { return app } -func getTestMockMetricsCollector(ctrl *gomock.Controller) metrics_collector.HttpApiMetrics { - metricsCollector := mock_metrics_collector.NewMockHttpApiMetrics(ctrl) +func getTestMockMetricsCollector(ctrl *gomock.Controller) metricscollector.HttpApiMetrics { + metricsCollector := mockmetricscollector.NewMockHttpApiMetrics(ctrl) metricsCollector.EXPECT().CollectRequest(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes() metricsCollector.EXPECT().CollectTotalRequests().AnyTimes() diff --git a/pkg/api/records_test.go b/pkg/api/records_test.go index 38cefc8..0decc0f 100644 --- a/pkg/api/records_test.go +++ b/pkg/api/records_test.go @@ -13,7 +13,7 @@ import ( "sigs.k8s.io/external-dns/endpoint" "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api" - mock_provider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" + mockprovider "github.com/stackitcloud/external-dns-stackit-webhook/pkg/api/mock" ) func TestWebhook_Records(t *testing.T) { @@ -34,7 +34,7 @@ func TestWebhook_Records(t *testing.T) { t.Parallel() mockLogger := zap.NewNop() - mockProvider := mock_provider.NewMockProvider(ctrl) + mockProvider := mockprovider.NewMockProvider(ctrl) mockMetricsCollector := getTestMockMetricsCollector(ctrl) app := api.New(mockLogger, mockMetricsCollector, mockProvider) @@ -56,7 +56,7 @@ func TestWebhook_Records(t *testing.T) { t.Parallel() mockLogger := zap.NewNop() - mockProvider := mock_provider.NewMockProvider(ctrl) + mockProvider := mockprovider.NewMockProvider(ctrl) mockMetricsCollector := getTestMockMetricsCollector(ctrl) app := api.New(mockLogger, mockMetricsCollector, mockProvider)