Skip to content

Commit b93ddf8

Browse files
Merge branch 'master' into feat-pod-add-support-for-fqdn
* master: test(source): fix flaky test (kubernetes-sigs#5514) chore(source/node): added resouce labels for nodes (kubernetes-sigs#5509) chore(deps): bump the dev-dependencies group across 1 directory with 14 updates (kubernetes-sigs#5511) fix(ovh): correct handling of records deletion (kubernetes-sigs#5450)
2 parents fc790f3 + fd21414 commit b93ddf8

File tree

8 files changed

+101
-85
lines changed

8 files changed

+101
-85
lines changed

go.mod

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ require (
1414
github.com/alecthomas/kingpin/v2 v2.4.0
1515
github.com/aliyun/alibaba-cloud-sdk-go v1.63.107
1616
github.com/aws/aws-sdk-go-v2 v1.36.3
17-
github.com/aws/aws-sdk-go-v2/config v1.29.14
18-
github.com/aws/aws-sdk-go-v2/credentials v1.17.67
19-
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.19.0
20-
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.43.1
21-
github.com/aws/aws-sdk-go-v2/service/route53 v1.51.1
22-
github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.35.4
23-
github.com/aws/aws-sdk-go-v2/service/sts v1.33.19
17+
github.com/aws/aws-sdk-go-v2/config v1.29.15
18+
github.com/aws/aws-sdk-go-v2/credentials v1.17.68
19+
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.19.1
20+
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.43.2
21+
github.com/aws/aws-sdk-go-v2/service/route53 v1.52.0
22+
github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.35.5
23+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.20
2424
github.com/bodgit/tsig v1.2.2
2525
github.com/cenkalti/backoff/v5 v5.0.2
26-
github.com/civo/civogo v0.5.3
26+
github.com/civo/civogo v0.5.4
2727
github.com/cloudflare/cloudflare-go v0.115.0
2828
github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381
2929
github.com/datawire/ambassador v1.12.4
@@ -53,14 +53,15 @@ require (
5353
github.com/sirupsen/logrus v1.9.3
5454
github.com/stretchr/testify v1.10.0
5555
github.com/transip/gotransip/v6 v6.26.0
56-
go.etcd.io/etcd/client/v3 v3.6.0
56+
go.etcd.io/etcd/api/v3 v3.6.1
57+
go.etcd.io/etcd/client/v3 v3.6.1
5758
go.uber.org/ratelimit v0.3.1
58-
golang.org/x/net v0.40.0
59+
golang.org/x/net v0.41.0
5960
golang.org/x/oauth2 v0.30.0
60-
golang.org/x/sync v0.14.0
61-
golang.org/x/text v0.25.0
62-
golang.org/x/time v0.11.0
63-
google.golang.org/api v0.235.0
61+
golang.org/x/sync v0.15.0
62+
golang.org/x/text v0.26.0
63+
golang.org/x/time v0.12.0
64+
google.golang.org/api v0.236.0
6465
gopkg.in/ns1/ns1-go.v2 v2.14.3
6566
istio.io/api v1.26.1
6667
istio.io/client-go v1.26.1
@@ -86,7 +87,7 @@ require (
8687
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
8788
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
8889
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
89-
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.25.3 // indirect
90+
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.25.4 // indirect
9091
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect
9192
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.15 // indirect
9293
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect
@@ -165,8 +166,7 @@ require (
165166
github.com/x448/float16 v0.8.4 // indirect
166167
github.com/xhit/go-str2duration/v2 v2.1.0 // indirect
167168
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
168-
go.etcd.io/etcd/api/v3 v3.6.0 // indirect
169-
go.etcd.io/etcd/client/pkg/v3 v3.6.0 // indirect
169+
go.etcd.io/etcd/client/pkg/v3 v3.6.1 // indirect
170170
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
171171
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
172172
go.opentelemetry.io/otel v1.35.0 // indirect
@@ -175,14 +175,14 @@ require (
175175
go.uber.org/atomic v1.10.0 // indirect
176176
go.uber.org/multierr v1.11.0 // indirect
177177
go.uber.org/zap v1.27.0 // indirect
178-
golang.org/x/crypto v0.38.0 // indirect
179-
golang.org/x/mod v0.24.0 // indirect
178+
golang.org/x/crypto v0.39.0 // indirect
179+
golang.org/x/mod v0.25.0 // indirect
180180
golang.org/x/sys v0.33.0 // indirect
181181
golang.org/x/term v0.32.0 // indirect
182-
golang.org/x/tools v0.32.0 // indirect
182+
golang.org/x/tools v0.33.0 // indirect
183183
google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 // indirect
184-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 // indirect
185-
google.golang.org/grpc v1.72.1 // indirect
184+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
185+
google.golang.org/grpc v1.72.2 // indirect
186186
google.golang.org/protobuf v1.36.6 // indirect
187187
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
188188
gopkg.in/inf.v0 v0.9.1 // indirect

go.sum

Lines changed: 44 additions & 44 deletions
Large diffs are not rendered by default.

provider/ovh/ovh.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -539,12 +539,14 @@ func (p OVHProvider) newOvhChangeCreateDelete(action int, endpoints []*endpoint.
539539

540540
if len(toDeleteIds) > 0 {
541541
// Copy the records because we need to mutate the list.
542-
existingRecords = slices.Clone(existingRecords)
543-
alreadyRemoved := 0
544-
for _, id := range toDeleteIds {
545-
existingRecords = slices.Delete(existingRecords, id-alreadyRemoved, id-alreadyRemoved+1)
546-
alreadyRemoved++
542+
newExistingRecords := make([]ovhRecord, 0, len(existingRecords)-len(toDeleteIds))
543+
for id := range existingRecords {
544+
if slices.Contains(toDeleteIds, id) {
545+
continue
546+
}
547+
newExistingRecords = append(newExistingRecords, existingRecords[id])
547548
}
549+
existingRecords = newExistingRecords
548550
}
549551

550552
return ovhChanges, existingRecords
@@ -615,7 +617,7 @@ func (p OVHProvider) newOvhChangeUpdate(endpointsOld []*endpoint.Endpoint, endpo
615617
}
616618
}
617619

618-
toInsertTargetToDelete := []int{}
620+
createChangeConvertedToUpdateChange := []int{}
619621
for i, target := range toInsertTarget {
620622
if len(oldRecords) == 0 {
621623
break
@@ -637,11 +639,17 @@ func (p OVHProvider) newOvhChangeUpdate(endpointsOld []*endpoint.Endpoint, endpo
637639
}
638640
p.formatCNAMETarget(&change)
639641
changes = append(changes, change)
640-
toInsertTargetToDelete = append(toInsertTargetToDelete, i)
642+
createChangeConvertedToUpdateChange = append(createChangeConvertedToUpdateChange, i)
641643
}
642-
for _, i := range toInsertTargetToDelete {
643-
toInsertTarget = slices.Delete(toInsertTarget, i, i+1)
644+
645+
newToInsertTarget := make([]string, 0, len(toInsertTarget)-len(createChangeConvertedToUpdateChange))
646+
for i := range toInsertTarget {
647+
if slices.Contains(createChangeConvertedToUpdateChange, i) {
648+
continue
649+
}
650+
newToInsertTarget = append(newToInsertTarget, toInsertTarget[i])
644651
}
652+
toInsertTarget = newToInsertTarget
645653

646654
if len(toInsertTarget) > 0 {
647655
for _, target := range toInsertTarget {

provider/ovh/ovh_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -390,18 +390,18 @@ func TestOvhNewChange(t *testing.T) {
390390

391391
// Delete change
392392
endpoints = []*endpoint.Endpoint{
393-
{DNSName: "ovh.example.net", RecordType: "A", Targets: []string{"203.0.113.42", "203.0.113.42", "203.0.113.42"}},
393+
{DNSName: "ovh.example.net", RecordType: "A", Targets: []string{"203.0.113.42", "203.0.113.42", "203.0.113.43"}},
394394
}
395395
records := []ovhRecord{
396-
{ID: 42, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", Target: "203.0.113.42"}}},
396+
{ID: 42, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", Target: "203.0.113.43"}}},
397397
{ID: 43, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", Target: "203.0.113.42"}}},
398398
{ID: 44, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", Target: "203.0.113.42"}}},
399399
}
400400
changes, _ = provider.newOvhChangeCreateDelete(ovhDelete, endpoints, "example.net", records)
401401
td.Cmp(t, changes, []ovhChange{
402-
{Action: ovhDelete, ovhRecord: ovhRecord{ID: 42, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", TTL: defaultTTL, Target: "203.0.113.42"}}}},
403402
{Action: ovhDelete, ovhRecord: ovhRecord{ID: 43, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", TTL: defaultTTL, Target: "203.0.113.42"}}}},
404403
{Action: ovhDelete, ovhRecord: ovhRecord{ID: 44, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", TTL: defaultTTL, Target: "203.0.113.42"}}}},
404+
{Action: ovhDelete, ovhRecord: ovhRecord{ID: 42, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", TTL: defaultTTL, Target: "203.0.113.43"}}}},
405405
})
406406

407407
// Create change with CNAME relative

source/ingress_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1460,6 +1460,11 @@ func testIngressEndpoints(t *testing.T) {
14601460
require.NoError(t, err)
14611461
}
14621462
validateEndpoints(t, res, ti.expected)
1463+
1464+
// TODO; when all resources have the resource label, we could add this check to the validateEndpoints function.
1465+
for _, ep := range res {
1466+
require.Contains(t, ep.Labels, endpoint.ResourceLabelKey)
1467+
}
14631468
})
14641469
}
14651470
}

source/node.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (ns *nodeSource) Endpoints(ctx context.Context) ([]*endpoint.Endpoint, erro
102102

103103
// create endpoints for all nodes
104104
for _, node := range nodes {
105-
// Check controller annotation to see if we are responsible.
105+
// Check the controller annotation to see if we are responsible.
106106
if controller, ok := node.Annotations[controllerAnnotationKey]; ok && controller != controllerAnnotationValue {
107107
log.Debugf("Skipping node %s because controller value does not match, found: %s, required: %s",
108108
node.Name, controller, controllerAnnotationValue)
@@ -149,6 +149,8 @@ func (ns *nodeSource) Endpoints(ctx context.Context) ([]*endpoint.Endpoint, erro
149149

150150
for _, addr := range addrs {
151151
ep := endpoint.NewEndpointWithTTL(dns, suitableType(addr), ttl)
152+
ep.WithLabel(endpoint.ResourceLabelKey, fmt.Sprintf("node/%s", node.Name))
153+
152154
log.Debugf("adding endpoint %s target %s", ep, addr)
153155
key := endpoint.EndpointKey{
154156
DNSName: ep.DNSName,

source/node_test.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,11 @@ func testNodeEndpointsWithIPv6(t *testing.T) {
573573

574574
// Validate returned endpoints against desired endpoints.
575575
validateEndpoints(t, endpoints, tc.expected)
576+
577+
// TODO; when all resources have the resource label, we could add this check to the validateEndpoints function.
578+
for _, ep := range endpoints {
579+
require.Contains(t, ep.Labels, endpoint.ResourceLabelKey)
580+
}
576581
}
577582
}
578583

@@ -605,9 +610,8 @@ func TestResourceLabelIsSetForEachNodeEndpoint(t *testing.T) {
605610
got, err := client.Endpoints(t.Context())
606611
require.NoError(t, err)
607612
for _, ep := range got {
608-
// TODO: node source should always set the resource label key. currently not supported by the node source.
609-
assert.Empty(t, ep.Labels, "Labels should not be empty for endpoint %s", ep.DNSName)
610-
assert.NotContains(t, ep.Labels, endpoint.ResourceLabelKey)
613+
assert.NotEmpty(t, ep.Labels, "Labels should not be empty for endpoint %s", ep.DNSName)
614+
assert.Contains(t, ep.Labels, endpoint.ResourceLabelKey)
611615
}
612616
}
613617

source/pod_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -642,10 +642,7 @@ func TestPodSource(t *testing.T) {
642642
},
643643
},
644644
} {
645-
646645
t.Run(tc.title, func(t *testing.T) {
647-
t.Parallel()
648-
649646
kubernetes := fake.NewClientset()
650647
ctx := t.Context()
651648

0 commit comments

Comments
 (0)