mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-07 01:56:57 +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 {
|
if len(toDeleteIds) > 0 {
|
||||||
// Copy the records because we need to mutate the list.
|
// Copy the records because we need to mutate the list.
|
||||||
existingRecords = slices.Clone(existingRecords)
|
newExistingRecords := make([]ovhRecord, 0, len(existingRecords)-len(toDeleteIds))
|
||||||
alreadyRemoved := 0
|
for id := range existingRecords {
|
||||||
for _, id := range toDeleteIds {
|
if slices.Contains(toDeleteIds, id) {
|
||||||
existingRecords = slices.Delete(existingRecords, id-alreadyRemoved, id-alreadyRemoved+1)
|
continue
|
||||||
alreadyRemoved++
|
}
|
||||||
|
newExistingRecords = append(newExistingRecords, existingRecords[id])
|
||||||
}
|
}
|
||||||
|
existingRecords = newExistingRecords
|
||||||
}
|
}
|
||||||
|
|
||||||
return ovhChanges, existingRecords
|
return ovhChanges, existingRecords
|
||||||
@ -615,7 +617,7 @@ func (p OVHProvider) newOvhChangeUpdate(endpointsOld []*endpoint.Endpoint, endpo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
toInsertTargetToDelete := []int{}
|
createChangeConvertedToUpdateChange := []int{}
|
||||||
for i, target := range toInsertTarget {
|
for i, target := range toInsertTarget {
|
||||||
if len(oldRecords) == 0 {
|
if len(oldRecords) == 0 {
|
||||||
break
|
break
|
||||||
@ -637,11 +639,17 @@ func (p OVHProvider) newOvhChangeUpdate(endpointsOld []*endpoint.Endpoint, endpo
|
|||||||
}
|
}
|
||||||
p.formatCNAMETarget(&change)
|
p.formatCNAMETarget(&change)
|
||||||
changes = append(changes, 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 {
|
if len(toInsertTarget) > 0 {
|
||||||
for _, target := range toInsertTarget {
|
for _, target := range toInsertTarget {
|
||||||
|
@ -390,18 +390,18 @@ func TestOvhNewChange(t *testing.T) {
|
|||||||
|
|
||||||
// Delete change
|
// Delete change
|
||||||
endpoints = []*endpoint.Endpoint{
|
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{
|
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: 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"}}},
|
{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)
|
changes, _ = provider.newOvhChangeCreateDelete(ovhDelete, endpoints, "example.net", records)
|
||||||
td.Cmp(t, changes, []ovhChange{
|
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: 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: 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
|
// Create change with CNAME relative
|
||||||
|
Loading…
Reference in New Issue
Block a user