pdns: also match parent zones when partitioning zones

This commit is contained in:
Eugene Venter 2021-05-26 13:47:40 +12:00
parent fc37ff0f2c
commit e32daefbbc
2 changed files with 38 additions and 1 deletions

View File

@ -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) { func (c *PDNSAPIClient) PartitionZones(zones []pgo.Zone) (filteredZones []pgo.Zone, residualZones []pgo.Zone) {
if c.domainFilter.IsConfigured() { if c.domainFilter.IsConfigured() {
for _, zone := range zones { 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) filteredZones = append(filteredZones, zone)
} else { } else {
residualZones = append(residualZones, zone) residualZones = append(residualZones, zone)

View File

@ -478,6 +478,12 @@ var (
}, },
} }
DomainFilterChildListSingle = endpoint.DomainFilter{
Filters: []string{
"a.example.com",
},
}
DomainFilterListMultiple = endpoint.DomainFilter{ DomainFilterListMultiple = endpoint.DomainFilter{
Filters: []string{ Filters: []string{
"example.com", "example.com",
@ -485,6 +491,13 @@ var (
}, },
} }
DomainFilterChildListMultiple = endpoint.DomainFilter{
Filters: []string{
"a.example.com",
"c.example.com",
},
}
DomainFilterListEmpty = endpoint.DomainFilter{ DomainFilterListEmpty = endpoint.DomainFilter{
Filters: []string{}, Filters: []string{},
} }
@ -503,12 +516,26 @@ var (
domainFilter: DomainFilterListSingle, 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{ DomainFilterMultipleClient = &PDNSAPIClient{
dryRun: false, dryRun: false,
authCtx: context.WithValue(context.Background(), pgo.ContextAPIKey, pgo.APIKey{Key: "TEST-API-KEY"}), authCtx: context.WithValue(context.Background(), pgo.ContextAPIKey, pgo.APIKey{Key: "TEST-API-KEY"}),
client: pgo.NewAPIClient(pgo.NewConfiguration()), client: pgo.NewAPIClient(pgo.NewConfiguration()),
domainFilter: DomainFilterListMultiple, 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) filteredZones, residualZones = DomainFilterMultipleClient.PartitionZones(zoneList)
assert.Equal(suite.T(), partitionResultFilteredMultipleFilter, filteredZones) assert.Equal(suite.T(), partitionResultFilteredMultipleFilter, filteredZones)
assert.Equal(suite.T(), partitionResultResidualMultipleFilter, residualZones) 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) { func TestNewPDNSProviderTestSuite(t *testing.T) {