diff --git a/provider/pdns/pdns.go b/provider/pdns/pdns.go index a609b281e..cf8132b7f 100644 --- a/provider/pdns/pdns.go +++ b/provider/pdns/pdns.go @@ -166,7 +166,7 @@ func (c *PDNSAPIClient) ListZones() (zones []pgo.Zone, resp *http.Response, err func (c *PDNSAPIClient) PartitionZones(zones []pgo.Zone) (filteredZones []pgo.Zone, residualZones []pgo.Zone) { if c.domainFilter.IsConfigured() { for _, zone := range zones { - if c.domainFilter.Match(zone.Name) { + if c.domainFilter.Match(zone.Name) || c.domainFilter.MatchParent(zone.Name) { filteredZones = append(filteredZones, zone) } else { residualZones = append(residualZones, zone) diff --git a/provider/pdns/pdns_test.go b/provider/pdns/pdns_test.go index 4fc2dc61a..d9fd9b401 100644 --- a/provider/pdns/pdns_test.go +++ b/provider/pdns/pdns_test.go @@ -478,6 +478,12 @@ var ( }, } + DomainFilterChildListSingle = endpoint.DomainFilter{ + Filters: []string{ + "a.example.com", + }, + } + DomainFilterListMultiple = endpoint.DomainFilter{ Filters: []string{ "example.com", @@ -485,6 +491,13 @@ var ( }, } + DomainFilterChildListMultiple = endpoint.DomainFilter{ + Filters: []string{ + "a.example.com", + "c.example.com", + }, + } + DomainFilterListEmpty = endpoint.DomainFilter{ Filters: []string{}, } @@ -503,12 +516,26 @@ var ( domainFilter: DomainFilterListSingle, } + DomainFilterChildSingleClient = &PDNSAPIClient{ + dryRun: false, + authCtx: context.WithValue(context.Background(), pgo.ContextAPIKey, pgo.APIKey{Key: "TEST-API-KEY"}), + client: pgo.NewAPIClient(pgo.NewConfiguration()), + domainFilter: DomainFilterChildListSingle, + } + DomainFilterMultipleClient = &PDNSAPIClient{ dryRun: false, authCtx: context.WithValue(context.Background(), pgo.ContextAPIKey, pgo.APIKey{Key: "TEST-API-KEY"}), client: pgo.NewAPIClient(pgo.NewConfiguration()), domainFilter: DomainFilterListMultiple, } + + DomainFilterChildMultipleClient = &PDNSAPIClient{ + dryRun: false, + authCtx: context.WithValue(context.Background(), pgo.ContextAPIKey, pgo.APIKey{Key: "TEST-API-KEY"}), + client: pgo.NewAPIClient(pgo.NewConfiguration()), + domainFilter: DomainFilterChildListMultiple, + } ) /******************************************************************************/ @@ -1015,6 +1042,16 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSClientPartitionZones() { filteredZones, residualZones = DomainFilterMultipleClient.PartitionZones(zoneList) assert.Equal(suite.T(), partitionResultFilteredMultipleFilter, filteredZones) assert.Equal(suite.T(), partitionResultResidualMultipleFilter, residualZones) + + // Check filtered, residual zones when a single child domain filter specified + filteredZones, residualZones = DomainFilterChildSingleClient.PartitionZones(zoneList) + assert.Equal(suite.T(), partitionResultFilteredSingleFilter, filteredZones) + assert.Equal(suite.T(), partitionResultResidualSingleFilter, residualZones) + + // Check filter, residual zones when multiple child domain filters specified + filteredZones, residualZones = DomainFilterChildMultipleClient.PartitionZones(zoneList) + assert.Equal(suite.T(), partitionResultFilteredMultipleFilter, filteredZones) + assert.Equal(suite.T(), partitionResultResidualMultipleFilter, residualZones) } func TestNewPDNSProviderTestSuite(t *testing.T) {