Skip to content

Commit 1d76428

Browse files
committed
Add Domain filter interface
1 parent d10211e commit 1d76428

File tree

14 files changed

+30
-24
lines changed

14 files changed

+30
-24
lines changed

controller/controller.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ type Controller struct {
186186
// The interval between individual synchronizations
187187
Interval time.Duration
188188
// The DomainFilter defines which DNS records to keep or exclude
189-
DomainFilter endpoint.DomainFilter
189+
DomainFilter endpoint.DomainFilterInterface
190190
// The nextRunAt used for throttling and batching reconciliation
191191
nextRunAt time.Time
192192
// The nextRunAtMux is for atomic updating of nextRunAt
@@ -239,7 +239,7 @@ func (c *Controller) RunOnce(ctx context.Context) error {
239239
Policies: []plan.Policy{c.Policy},
240240
Current: records,
241241
Desired: endpoints,
242-
DomainFilter: endpoint.MatchAllDomainFilters{&c.DomainFilter, &registryFilter},
242+
DomainFilter: endpoint.MatchAllDomainFilters{c.DomainFilter, registryFilter},
243243
ManagedRecords: c.ManagedRecordTypes,
244244
ExcludeRecords: c.ExcludeRecordTypes,
245245
OwnerID: c.Registry.OwnerID(),

controller/controller_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ type errorMockProvider struct {
5757
mockProvider
5858
}
5959

60-
func (p *filteredMockProvider) GetDomainFilter() endpoint.DomainFilter {
60+
func (p *filteredMockProvider) GetDomainFilter() endpoint.DomainFilterInterface {
6161
return p.domainFilter
6262
}
6363

endpoint/domain_filter.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import (
2525
"strings"
2626
)
2727

28-
type MatchAllDomainFilters []*DomainFilter
28+
type MatchAllDomainFilters []DomainFilterInterface
2929

3030
func (f MatchAllDomainFilters) Match(domain string) bool {
3131
for _, filter := range f {
@@ -39,6 +39,10 @@ func (f MatchAllDomainFilters) Match(domain string) bool {
3939
return true
4040
}
4141

42+
type DomainFilterInterface interface {
43+
Match(domain string) bool
44+
}
45+
4246
// DomainFilter holds a lists of valid domain names
4347
type DomainFilter struct {
4448
// Filters define what domains to match
@@ -51,6 +55,8 @@ type DomainFilter struct {
5155
regexExclusion *regexp.Regexp
5256
}
5357

58+
var _ DomainFilterInterface = &DomainFilter{}
59+
5460
// domainFilterSerde is a helper type for serializing and deserializing DomainFilter.
5561
type domainFilterSerde struct {
5662
Include []string `json:"include,omitempty"`

pkg/apis/externaldns/types.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ type Config struct {
6767
AlwaysPublishNotReadyAddresses bool
6868
ConnectorSourceServer string
6969
Provider string
70-
ProviderCacheTime int
70+
ProviderCacheTime time.Duration
7171
GoogleProject string
7272
GoogleBatchChangeSize int
7373
GoogleBatchChangeInterval time.Duration

provider/aws/aws.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ func (p *AWSProvider) createUpdateChanges(newEndpoints, oldEndpoints []*endpoint
567567
}
568568

569569
// GetDomainFilter generates a filter to exclude any domain that is not controlled by the provider
570-
func (p *AWSProvider) GetDomainFilter() endpoint.DomainFilter {
570+
func (p *AWSProvider) GetDomainFilter() endpoint.DomainFilterInterface {
571571
zones, err := p.Zones(context.Background())
572572
if err != nil {
573573
log.Errorf("failed to list zones: %v", err)

provider/aws/aws_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -319,10 +319,10 @@ func TestAWSZones(t *testing.T) {
319319
func TestAWSRecordsFilter(t *testing.T) {
320320
provider, _ := newAWSProvider(t, endpoint.DomainFilter{}, provider.ZoneIDFilter{}, provider.ZoneTypeFilter{}, false, false, nil)
321321
domainFilter := provider.GetDomainFilter()
322-
assert.NotNil(t, domainFilter)
322+
require.NotNil(t, domainFilter)
323323
require.IsType(t, endpoint.DomainFilter{}, domainFilter)
324324
count := 0
325-
filters := domainFilter.Filters
325+
filters := domainFilter.(endpoint.DomainFilter).Filters
326326
for _, tld := range []string{
327327
"zone-4.ext-dns-test-3.teapot.zalan.do",
328328
".zone-4.ext-dns-test-3.teapot.zalan.do",

provider/cached_provider.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -50,25 +50,26 @@ var (
5050
type CachedProvider struct {
5151
Provider
5252
RefreshDelay time.Duration
53-
err error
5453
lastRead time.Time
5554
cache []*endpoint.Endpoint
5655
}
5756

5857
func (c *CachedProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) {
5958
if c.needRefresh() {
6059
log.Info("Records cache provider: refreshing records list cache")
61-
c.cache, c.err = c.Provider.Records(ctx)
62-
if c.err != nil {
63-
log.Errorf("Records cache provider: list records failed: %v", c.err)
60+
records, err := c.Provider.Records(ctx)
61+
if err != nil {
62+
c.cache = nil
63+
return nil, err
6464
}
65+
c.cache = records
6566
c.lastRead = time.Now()
6667
cachedRecordsCallsTotal.WithLabelValues("false").Inc()
6768
} else {
68-
log.Info("Records cache provider: using records list from cache")
69+
log.Debug("Records cache provider: using records list from cache")
6970
cachedRecordsCallsTotal.WithLabelValues("true").Inc()
7071
}
71-
return c.cache, c.err
72+
return c.cache, nil
7273
}
7374
func (c *CachedProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error {
7475
if !changes.HasChanges() {
@@ -81,13 +82,12 @@ func (c *CachedProvider) ApplyChanges(ctx context.Context, changes *plan.Changes
8182
}
8283

8384
func (c *CachedProvider) Reset() {
84-
c.err = nil
8585
c.cache = nil
8686
c.lastRead = time.Time{}
8787
}
8888

8989
func (c *CachedProvider) needRefresh() bool {
90-
if c.cache == nil || c.err != nil {
90+
if c.cache == nil {
9191
log.Debug("Records cache provider is not initialized")
9292
return true
9393
}

provider/inmemory/inmemory.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ var (
4646
// initialized as dns provider with no records
4747
type InMemoryProvider struct {
4848
provider.BaseProvider
49-
domain endpoint.DomainFilter
49+
domain endpoint.DomainFilterInterface
5050
client *inMemoryClient
5151
filter *filter
5252
OnApplyChanges func(ctx context.Context, changes *plan.Changes)

provider/provider.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ type Provider interface {
4848
// unnecessary (potentially failing) changes. It may also modify other fields, add, or remove
4949
// Endpoints. It is permitted to modify the supplied endpoints.
5050
AdjustEndpoints(endpoints []*endpoint.Endpoint) ([]*endpoint.Endpoint, error)
51-
GetDomainFilter() endpoint.DomainFilter
51+
GetDomainFilter() endpoint.DomainFilterInterface
5252
}
5353

5454
type BaseProvider struct{}
@@ -57,7 +57,7 @@ func (b BaseProvider) AdjustEndpoints(endpoints []*endpoint.Endpoint) ([]*endpoi
5757
return endpoints, nil
5858
}
5959

60-
func (b BaseProvider) GetDomainFilter() endpoint.DomainFilter {
60+
func (b BaseProvider) GetDomainFilter() endpoint.DomainFilterInterface {
6161
return endpoint.DomainFilter{}
6262
}
6363

registry/aws_sd_registry.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func NewAWSSDRegistry(provider provider.Provider, ownerID string) (*AWSSDRegistr
4242
}, nil
4343
}
4444

45-
func (sdr *AWSSDRegistry) GetDomainFilter() endpoint.DomainFilter {
45+
func (sdr *AWSSDRegistry) GetDomainFilter() endpoint.DomainFilterInterface {
4646
return sdr.provider.GetDomainFilter()
4747
}
4848

registry/dynamodb.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func NewDynamoDBRegistry(provider provider.Provider, ownerID string, dynamodbAPI
105105
}, nil
106106
}
107107

108-
func (im *DynamoDBRegistry) GetDomainFilter() endpoint.DomainFilter {
108+
func (im *DynamoDBRegistry) GetDomainFilter() endpoint.DomainFilterInterface {
109109
return im.provider.GetDomainFilter()
110110
}
111111

registry/noop.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func NewNoopRegistry(provider provider.Provider) (*NoopRegistry, error) {
3636
}, nil
3737
}
3838

39-
func (im *NoopRegistry) GetDomainFilter() endpoint.DomainFilter {
39+
func (im *NoopRegistry) GetDomainFilter() endpoint.DomainFilterInterface {
4040
return im.provider.GetDomainFilter()
4141
}
4242

registry/registry.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ type Registry interface {
3131
Records(ctx context.Context) ([]*endpoint.Endpoint, error)
3232
ApplyChanges(ctx context.Context, changes *plan.Changes) error
3333
AdjustEndpoints(endpoints []*endpoint.Endpoint) ([]*endpoint.Endpoint, error)
34-
GetDomainFilter() endpoint.DomainFilter
34+
GetDomainFilter() endpoint.DomainFilterInterface
3535
OwnerID() string
3636
}

registry/txt.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func getSupportedTypes() []string {
9595
return []string{endpoint.RecordTypeA, endpoint.RecordTypeAAAA, endpoint.RecordTypeCNAME, endpoint.RecordTypeNS}
9696
}
9797

98-
func (im *TXTRegistry) GetDomainFilter() endpoint.DomainFilter {
98+
func (im *TXTRegistry) GetDomainFilter() endpoint.DomainFilterInterface {
9999
return im.provider.GetDomainFilter()
100100
}
101101

0 commit comments

Comments
 (0)