mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-06 09:36:58 +02:00
fix(ovh): correct handling of records deletion (#5450)
Signed-off-by: Romain Beuque <556072+rbeuque74@users.noreply.github.com>
This commit is contained in:
parent
f55be38b45
commit
226c45e766
@ -539,12 +539,14 @@ func (p OVHProvider) newOvhChangeCreateDelete(action int, endpoints []*endpoint.
|
||||
|
||||
if len(toDeleteIds) > 0 {
|
||||
// Copy the records because we need to mutate the list.
|
||||
existingRecords = slices.Clone(existingRecords)
|
||||
alreadyRemoved := 0
|
||||
for _, id := range toDeleteIds {
|
||||
existingRecords = slices.Delete(existingRecords, id-alreadyRemoved, id-alreadyRemoved+1)
|
||||
alreadyRemoved++
|
||||
newExistingRecords := make([]ovhRecord, 0, len(existingRecords)-len(toDeleteIds))
|
||||
for id := range existingRecords {
|
||||
if slices.Contains(toDeleteIds, id) {
|
||||
continue
|
||||
}
|
||||
newExistingRecords = append(newExistingRecords, existingRecords[id])
|
||||
}
|
||||
existingRecords = newExistingRecords
|
||||
}
|
||||
|
||||
return ovhChanges, existingRecords
|
||||
@ -615,7 +617,7 @@ func (p OVHProvider) newOvhChangeUpdate(endpointsOld []*endpoint.Endpoint, endpo
|
||||
}
|
||||
}
|
||||
|
||||
toInsertTargetToDelete := []int{}
|
||||
createChangeConvertedToUpdateChange := []int{}
|
||||
for i, target := range toInsertTarget {
|
||||
if len(oldRecords) == 0 {
|
||||
break
|
||||
@ -637,11 +639,17 @@ func (p OVHProvider) newOvhChangeUpdate(endpointsOld []*endpoint.Endpoint, endpo
|
||||
}
|
||||
p.formatCNAMETarget(&change)
|
||||
changes = append(changes, change)
|
||||
toInsertTargetToDelete = append(toInsertTargetToDelete, i)
|
||||
createChangeConvertedToUpdateChange = append(createChangeConvertedToUpdateChange, i)
|
||||
}
|
||||
for _, i := range toInsertTargetToDelete {
|
||||
toInsertTarget = slices.Delete(toInsertTarget, i, i+1)
|
||||
|
||||
newToInsertTarget := make([]string, 0, len(toInsertTarget)-len(createChangeConvertedToUpdateChange))
|
||||
for i := range toInsertTarget {
|
||||
if slices.Contains(createChangeConvertedToUpdateChange, i) {
|
||||
continue
|
||||
}
|
||||
newToInsertTarget = append(newToInsertTarget, toInsertTarget[i])
|
||||
}
|
||||
toInsertTarget = newToInsertTarget
|
||||
|
||||
if len(toInsertTarget) > 0 {
|
||||
for _, target := range toInsertTarget {
|
||||
|
@ -390,18 +390,18 @@ func TestOvhNewChange(t *testing.T) {
|
||||
|
||||
// Delete change
|
||||
endpoints = []*endpoint.Endpoint{
|
||||
{DNSName: "ovh.example.net", RecordType: "A", Targets: []string{"203.0.113.42", "203.0.113.42", "203.0.113.42"}},
|
||||
{DNSName: "ovh.example.net", RecordType: "A", Targets: []string{"203.0.113.42", "203.0.113.42", "203.0.113.43"}},
|
||||
}
|
||||
records := []ovhRecord{
|
||||
{ID: 42, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", Target: "203.0.113.42"}}},
|
||||
{ID: 42, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", Target: "203.0.113.43"}}},
|
||||
{ID: 43, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", Target: "203.0.113.42"}}},
|
||||
{ID: 44, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", Target: "203.0.113.42"}}},
|
||||
}
|
||||
changes, _ = provider.newOvhChangeCreateDelete(ovhDelete, endpoints, "example.net", records)
|
||||
td.Cmp(t, changes, []ovhChange{
|
||||
{Action: ovhDelete, ovhRecord: ovhRecord{ID: 42, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", TTL: defaultTTL, Target: "203.0.113.42"}}}},
|
||||
{Action: ovhDelete, ovhRecord: ovhRecord{ID: 43, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", TTL: defaultTTL, Target: "203.0.113.42"}}}},
|
||||
{Action: ovhDelete, ovhRecord: ovhRecord{ID: 44, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", TTL: defaultTTL, Target: "203.0.113.42"}}}},
|
||||
{Action: ovhDelete, ovhRecord: ovhRecord{ID: 42, Zone: "example.net", ovhRecordFields: ovhRecordFields{FieldType: "A", ovhRecordFieldUpdate: ovhRecordFieldUpdate{SubDomain: "ovh", TTL: defaultTTL, Target: "203.0.113.43"}}}},
|
||||
})
|
||||
|
||||
// Create change with CNAME relative
|
||||
|
Loading…
Reference in New Issue
Block a user