Correctly collect existing records from all zones in RFC2136 provider.

Fixes https://github.com/kubernetes-sigs/external-dns/issues/5261
This commit is contained in:
Joshua Reese 2025-05-16 16:06:08 -05:00
parent 849a09ff6e
commit 0f7f2602a1
No known key found for this signature in database
GPG Key ID: B9A1331E42BC9C47
2 changed files with 22 additions and 5 deletions

View File

@ -318,7 +318,7 @@ func (r *rfc2136Provider) List() ([]dns.RR, error) {
}
// If records were fetched successfully, break out of the loop
if len(records) > 0 {
return records, nil
break
}
}

View File

@ -152,7 +152,24 @@ func (r *rfc2136Stub) IncomeTransfer(m *dns.Msg, a string) (env chan *dns.Envelo
outChan := make(chan *dns.Envelope)
go func() {
for _, e := range r.output {
outChan <- e
var responseEnvelope *dns.Envelope
for _, record := range e.RR {
for _, q := range m.Question {
if strings.HasSuffix(record.Header().Name, q.Name) {
if responseEnvelope == nil {
responseEnvelope = &dns.Envelope{}
}
responseEnvelope.RR = append(responseEnvelope.RR, record)
break
}
}
}
if responseEnvelope == nil {
continue
}
outChan <- responseEnvelope
}
close(outChan)
}()
@ -160,7 +177,7 @@ func (r *rfc2136Stub) IncomeTransfer(m *dns.Msg, a string) (env chan *dns.Envelo
return outChan, nil
}
func createRfc2136StubProvider(stub *rfc2136Stub) (provider.Provider, error) {
func createRfc2136StubProvider(stub *rfc2136Stub, zoneNames ...string) (provider.Provider, error) {
tlsConfig := TLSConfig{
UseTLS: false,
SkipTLSVerify: false,
@ -168,7 +185,7 @@ func createRfc2136StubProvider(stub *rfc2136Stub) (provider.Provider, error) {
ClientCertFilePath: "",
ClientCertKeyFilePath: "",
}
return NewRfc2136Provider([]string{""}, 0, nil, false, "key", "secret", "hmac-sha512", true, endpoint.DomainFilter{}, false, 300*time.Second, false, false, "", "", "", 50, tlsConfig, "", stub)
return NewRfc2136Provider([]string{""}, 0, zoneNames, false, "key", "secret", "hmac-sha512", true, endpoint.DomainFilter{}, false, 300*time.Second, false, false, "", "", "", 50, tlsConfig, "", stub)
}
func createRfc2136StubProviderWithHosts(stub *rfc2136Stub) (provider.Provider, error) {
@ -505,7 +522,7 @@ func TestRfc2136GetRecords(t *testing.T) {
})
assert.NoError(t, err)
provider, err := createRfc2136StubProvider(stub)
provider, err := createRfc2136StubProvider(stub, "barfoo.com", "foo.com", "bar.com", "foobar.com")
assert.NoError(t, err)
recs, err := provider.Records(context.Background())