Merge pull request #6191 from Richardds/fix-dns-01-cloudflare

Handle multiple Cloudflare DNS01 challenges for the same FQDN
This commit is contained in:
jetstack-bot 2023-06-28 13:08:39 +02:00 committed by GitHub
commit 7482de8bac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -141,41 +141,33 @@ func FindNearestZoneForFQDN(c DNSProviderType, fqdn string) (DNSZone, error) {
// Present creates a TXT record to fulfil the dns-01 challenge
func (c *DNSProvider) Present(domain, fqdn, value string) error {
zoneID, err := c.getHostedZoneID(fqdn)
if err != nil {
return err
}
record, err := c.findTxtRecord(fqdn)
if err != nil && err != errNoExistingRecord {
// this is a real error
return err
}
if record != nil {
if record.Content == value {
// the record is already set to the desired value
return nil
_, err := c.findTxtRecord(fqdn, value)
if err == errNoExistingRecord {
rec := cloudFlareRecord{
Type: "TXT",
Name: util.UnFqdn(fqdn),
Content: value,
TTL: 120,
}
_, err = c.makeRequest("DELETE", fmt.Sprintf("/zones/%s/dns_records/%s", record.ZoneID, record.ID), nil)
body, err := json.Marshal(rec)
if err != nil {
return err
}
zoneID, err := c.getHostedZoneID(fqdn)
if err != nil {
return err
}
_, err = c.makeRequest("POST", fmt.Sprintf("/zones/%s/dns_records", zoneID), bytes.NewReader(body))
if err != nil {
return err
}
return nil
}
rec := cloudFlareRecord{
Type: "TXT",
Name: util.UnFqdn(fqdn),
Content: value,
TTL: 120,
}
body, err := json.Marshal(rec)
if err != nil {
return err
}
_, err = c.makeRequest("POST", fmt.Sprintf("/zones/%s/dns_records", zoneID), bytes.NewReader(body))
if err != nil {
return err
}
@ -185,7 +177,7 @@ func (c *DNSProvider) Present(domain, fqdn, value string) error {
// CleanUp removes the TXT record matching the specified parameters
func (c *DNSProvider) CleanUp(domain, fqdn, value string) error {
record, err := c.findTxtRecord(fqdn)
record, err := c.findTxtRecord(fqdn, value)
// Nothing to cleanup
if err == errNoExistingRecord {
return nil
@ -212,7 +204,7 @@ func (c *DNSProvider) getHostedZoneID(fqdn string) (string, error) {
var errNoExistingRecord = errors.New("No existing record found")
func (c *DNSProvider) findTxtRecord(fqdn string) (*cloudFlareRecord, error) {
func (c *DNSProvider) findTxtRecord(fqdn, content string) (*cloudFlareRecord, error) {
zoneID, err := c.getHostedZoneID(fqdn)
if err != nil {
return nil, err
@ -234,7 +226,7 @@ func (c *DNSProvider) findTxtRecord(fqdn string) (*cloudFlareRecord, error) {
}
for _, rec := range records {
if rec.Name == util.UnFqdn(fqdn) {
if rec.Name == util.UnFqdn(fqdn) && rec.Content == content {
return &rec, nil
}
}