diff --git a/provider/dnsimple.go b/provider/dnsimple.go index 51d1ac8f29..d7c7c7606d 100644 --- a/provider/dnsimple.go +++ b/provider/dnsimple.go @@ -227,9 +227,11 @@ func (p *dnsimpleProvider) submitChanges(changes []*dnsimpleChange) error { } for _, change := range changes { zone := dnsimpleSuitableZone(change.ResourceRecordSet.Name, zones) - if zone.ID == 0 { - return fmt.Errorf("No suitable zone name found") + if zone == nil { + log.Debugf("Skipping record %s because no hosted zone matching record DNS Name was detected ", change.ResourceRecordSet.Name) + continue } + log.Infof("Changing records: %s %v in zone: %s", change.Action, change.ResourceRecordSet, zone.Name) change.ResourceRecordSet.Name = strings.TrimSuffix(change.ResourceRecordSet.Name, "."+zone.Name) @@ -290,12 +292,13 @@ func (p *dnsimpleProvider) GetRecordID(zone string, recordName string) (recordID } // dnsimpleSuitableZone returns the most suitable zone for a given hostname and a set of zones. -func dnsimpleSuitableZone(hostname string, zones map[string]dnsimple.Zone) dnsimple.Zone { - var zone dnsimple.Zone +func dnsimpleSuitableZone(hostname string, zones map[string]dnsimple.Zone) *dnsimple.Zone { + var zone *dnsimple.Zone for _, z := range zones { if strings.HasSuffix(hostname, z.Name) { - if zone.ID == 0 || len(z.Name) > len(zone.Name) { - zone = z + if zone == nil || len(z.Name) > len(zone.Name) { + newZ := z + zone = &newZ } } } diff --git a/provider/dnsimple_test.go b/provider/dnsimple_test.go index 6ce817dd25..78cf3658c7 100644 --- a/provider/dnsimple_test.go +++ b/provider/dnsimple_test.go @@ -124,6 +124,7 @@ func TestDnsimpleServices(t *testing.T) { t.Run("Zones", testDnsimpleProviderZones) t.Run("Records", testDnsimpleProviderRecords) t.Run("ApplyChanges", testDnsimpleProviderApplyChanges) + t.Run("ApplyChanges/SkipUnknownZone", testDnsimpleProviderApplyChangesSkipsUnknown) t.Run("SuitableZone", testDnsimpleSuitableZone) t.Run("GetRecordID", testDnsimpleGetRecordID) } @@ -165,6 +166,19 @@ func testDnsimpleProviderApplyChanges(t *testing.T) { } } +func testDnsimpleProviderApplyChangesSkipsUnknown(t *testing.T) { + changes := &plan.Changes{} + changes.Create = []*endpoint.Endpoint{ + {DNSName: "example.not-included.com", Targets: endpoint.Targets{"dasd"}, RecordType: endpoint.RecordTypeCNAME}, + } + + mockProvider.accountID = "1" + err := mockProvider.ApplyChanges(changes) + if err != nil { + t.Errorf("Failed to ignore unknown zones: %v", err) + } +} + func testDnsimpleSuitableZone(t *testing.T) { mockProvider.accountID = "1" zones, err := mockProvider.Zones()