Skip to content

Commit

Permalink
Merge pull request #4162 from toujou/fix/pdns-converts-cname-to-alias
Browse files Browse the repository at this point in the history
fix(pdns): provider implicitly changes CNAME to ALIAS
  • Loading branch information
k8s-ci-robot authored Jan 11, 2024
2 parents 17f9ab3 + 99b7abd commit 67fc042
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 3 deletions.
9 changes: 6 additions & 3 deletions provider/pdns/pdns.go
Original file line number Diff line number Diff line change
Expand Up @@ -316,12 +316,15 @@ func (p *PDNSProvider) ConvertEndpointsToZones(eps []*endpoint.Endpoint, changet
for _, t := range ep.Targets {
if ep.RecordType == "CNAME" || ep.RecordType == "ALIAS" {
t = provider.EnsureTrailingDot(t)
if t != zone.Name && !strings.HasSuffix(t, "."+zone.Name) {
RecordType_ = "ALIAS"
}
}
records = append(records, pgo.Record{Content: t})
}

if dnsname == zone.Name && ep.RecordType == "CNAME" {
log.Debugf("Converting APEX record %s from CNAME to ALIAS", dnsname)
RecordType_ = "ALIAS"
}

rrset := pgo.RrSet{
Name: dnsname,
Type_: RecordType_,
Expand Down
77 changes: 77 additions & 0 deletions provider/pdns/pdns_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,12 @@ var (
endpoint.NewEndpointWithTTL("test.simexample.com", endpoint.RecordTypeA, endpoint.TTL(300), "9.9.9.9"),
endpoint.NewEndpointWithTTL("test.simexample.com", endpoint.RecordTypeTXT, endpoint.TTL(300), "\"heritage=external-dns,external-dns/owner=tower-pdns\""),
}
endpointsApexRecords = []*endpoint.Endpoint{
endpoint.NewEndpointWithTTL("cname.example.com", endpoint.RecordTypeTXT, endpoint.TTL(300), "\"heritage=external-dns,external-dns/owner=tower-pdns\""),
endpoint.NewEndpointWithTTL("cname.example.com", endpoint.RecordTypeCNAME, endpoint.TTL(300), "example.by.any.other.name.com"),
endpoint.NewEndpointWithTTL("example.com", endpoint.RecordTypeTXT, endpoint.TTL(300), "\"heritage=external-dns,external-dns/owner=tower-pdns\""),
endpoint.NewEndpointWithTTL("example.com", endpoint.RecordTypeCNAME, endpoint.TTL(300), "example.by.any.other.name.com"),
}

ZoneEmpty = pgo.Zone{
// Opaque zone id (string), assigned by the server, should not be interpreted by the application. Guaranteed to be safe for embedding in URLs.
Expand Down Expand Up @@ -484,6 +490,72 @@ var (
},
}

ZoneEmptyToApexPatch = pgo.Zone{
Id: "example.com.",
Name: "example.com.",
Type_: "Zone",
Url: "/api/v1/servers/localhost/zones/example.com.",
Kind: "Native",
Rrsets: []pgo.RrSet{
{
Name: "cname.example.com.",
Type_: "CNAME",
Ttl: 300,
Changetype: "REPLACE",
Records: []pgo.Record{
{
Content: "example.by.any.other.name.com.",
Disabled: false,
SetPtr: false,
},
},
Comments: []pgo.Comment(nil),
},
{
Name: "cname.example.com.",
Type_: "TXT",
Ttl: 300,
Changetype: "REPLACE",
Records: []pgo.Record{
{
Content: "\"heritage=external-dns,external-dns/owner=tower-pdns\"",
Disabled: false,
SetPtr: false,
},
},
Comments: []pgo.Comment(nil),
},
{
Name: "example.com.",
Type_: "ALIAS",
Ttl: 300,
Changetype: "REPLACE",
Records: []pgo.Record{
{
Content: "example.by.any.other.name.com.",
Disabled: false,
SetPtr: false,
},
},
Comments: []pgo.Comment(nil),
},
{
Name: "example.com.",
Type_: "TXT",
Ttl: 300,
Changetype: "REPLACE",
Records: []pgo.Record{
{
Content: "\"heritage=external-dns,external-dns/owner=tower-pdns\"",
Disabled: false,
SetPtr: false,
},
},
Comments: []pgo.Comment(nil),
},
},
}

DomainFilterListSingle = endpoint.DomainFilter{
Filters: []string{
"example.com",
Expand Down Expand Up @@ -871,6 +943,11 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSConvertEndpointsToZones() {
}
}
}

// Check endpoints of type CNAME are converted to ALIAS on the domain apex
zlist, err = p.ConvertEndpointsToZones(endpointsApexRecords, PdnsReplace)
assert.Nil(suite.T(), err)
assert.Equal(suite.T(), []pgo.Zone{ZoneEmptyToApexPatch}, zlist)
}

func (suite *NewPDNSProviderTestSuite) TestPDNSConvertEndpointsToZonesPartitionZones() {
Expand Down

0 comments on commit 67fc042

Please sign in to comment.