Merge pull request #1442 from freenowtech/filter-record-creation

Change DomainFilter to apply to records as well
This commit is contained in:
Kubernetes Prow Robot 2020-03-10 09:03:35 -07:00 committed by GitHub
commit ec7c6ba4d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
51 changed files with 286 additions and 200 deletions

View File

@ -23,6 +23,7 @@ import (
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"sigs.k8s.io/external-dns/endpoint"
"sigs.k8s.io/external-dns/plan" "sigs.k8s.io/external-dns/plan"
"sigs.k8s.io/external-dns/provider" "sigs.k8s.io/external-dns/provider"
"sigs.k8s.io/external-dns/registry" "sigs.k8s.io/external-dns/registry"
@ -100,6 +101,8 @@ type Controller struct {
Policy plan.Policy Policy plan.Policy
// The interval between individual synchronizations // The interval between individual synchronizations
Interval time.Duration Interval time.Duration
// The DomainFilter defines which DNS records to keep or exclude
DomainFilter endpoint.DomainFilter
} }
// RunOnce runs a single iteration of a reconciliation loop. // RunOnce runs a single iteration of a reconciliation loop.
@ -126,6 +129,7 @@ func (c *Controller) RunOnce(ctx context.Context) error {
Policies: []plan.Policy{c.Policy}, Policies: []plan.Policy{c.Policy},
Current: records, Current: records,
Desired: endpoints, Desired: endpoints,
DomainFilter: c.DomainFilter,
} }
plan = plan.Calculate() plan = plan.Calculate()

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package provider package endpoint
import ( import (
"strings" "strings"
@ -22,7 +22,9 @@ import (
// DomainFilter holds a lists of valid domain names // DomainFilter holds a lists of valid domain names
type DomainFilter struct { type DomainFilter struct {
filters []string // Filters define what domains to match
Filters []string
// exclude define what domains not to match
exclude []string exclude []string
} }
@ -47,7 +49,7 @@ func NewDomainFilter(domainFilters []string) DomainFilter {
// Match checks whether a domain can be found in the DomainFilter. // Match checks whether a domain can be found in the DomainFilter.
func (df DomainFilter) Match(domain string) bool { func (df DomainFilter) Match(domain string) bool {
return matchFilter(df.filters, domain, true) && !matchFilter(df.exclude, domain, false) return matchFilter(df.Filters, domain, true) && !matchFilter(df.exclude, domain, false)
} }
// matchFilter determines if any `filters` match `domain`. // matchFilter determines if any `filters` match `domain`.
@ -78,8 +80,8 @@ func matchFilter(filters []string, domain string, emptyval bool) bool {
// IsConfigured returns true if DomainFilter is configured, false otherwise // IsConfigured returns true if DomainFilter is configured, false otherwise
func (df DomainFilter) IsConfigured() bool { func (df DomainFilter) IsConfigured() bool {
if len(df.filters) == 1 { if len(df.Filters) == 1 {
return df.filters[0] != "" return df.Filters[0] != ""
} }
return len(df.filters) > 0 return len(df.Filters) > 0
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package provider package endpoint
import ( import (
"testing" "testing"

View File

@ -30,6 +30,7 @@ import (
_ "k8s.io/client-go/plugin/pkg/client/auth" _ "k8s.io/client-go/plugin/pkg/client/auth"
"sigs.k8s.io/external-dns/controller" "sigs.k8s.io/external-dns/controller"
"sigs.k8s.io/external-dns/endpoint"
"sigs.k8s.io/external-dns/pkg/apis/externaldns" "sigs.k8s.io/external-dns/pkg/apis/externaldns"
"sigs.k8s.io/external-dns/pkg/apis/externaldns/validation" "sigs.k8s.io/external-dns/pkg/apis/externaldns/validation"
"sigs.k8s.io/external-dns/plan" "sigs.k8s.io/external-dns/plan"
@ -114,7 +115,7 @@ func main() {
// Combine multiple sources into a single, deduplicated source. // Combine multiple sources into a single, deduplicated source.
endpointsSource := source.NewDedupSource(source.NewMultiSource(sources)) endpointsSource := source.NewDedupSource(source.NewMultiSource(sources))
domainFilter := provider.NewDomainFilterWithExclusions(cfg.DomainFilter, cfg.ExcludeDomains) domainFilter := endpoint.NewDomainFilterWithExclusions(cfg.DomainFilter, cfg.ExcludeDomains)
zoneIDFilter := provider.NewZoneIDFilter(cfg.ZoneIDFilter) zoneIDFilter := provider.NewZoneIDFilter(cfg.ZoneIDFilter)
zoneTypeFilter := provider.NewZoneTypeFilter(cfg.AWSZoneType) zoneTypeFilter := provider.NewZoneTypeFilter(cfg.AWSZoneType)
zoneTagFilter := provider.NewZoneTagFilter(cfg.AWSZoneTagFilter) zoneTagFilter := provider.NewZoneTagFilter(cfg.AWSZoneTagFilter)
@ -289,6 +290,7 @@ func main() {
Registry: r, Registry: r,
Policy: policy, Policy: policy,
Interval: cfg.Interval, Interval: cfg.Interval,
DomainFilter: domainFilter,
} }
if cfg.UpdateEvents { if cfg.UpdateEvents {

View File

@ -35,6 +35,8 @@ type Plan struct {
// List of changes necessary to move towards desired state // List of changes necessary to move towards desired state
// Populated after calling Calculate() // Populated after calling Calculate()
Changes *Changes Changes *Changes
// DomainFilter matches DNS names
DomainFilter endpoint.DomainFilter
} }
// Changes holds lists of actions to be executed by dns providers // Changes holds lists of actions to be executed by dns providers
@ -111,10 +113,10 @@ func (t planTable) addCandidate(e *endpoint.Endpoint) {
func (p *Plan) Calculate() *Plan { func (p *Plan) Calculate() *Plan {
t := newPlanTable() t := newPlanTable()
for _, current := range filterRecordsForPlan(p.Current) { for _, current := range filterRecordsForPlan(p.Current, p.DomainFilter) {
t.addCurrent(current) t.addCurrent(current)
} }
for _, desired := range filterRecordsForPlan(p.Desired) { for _, desired := range filterRecordsForPlan(p.Desired, p.DomainFilter) {
t.addCandidate(desired) t.addCandidate(desired)
} }
@ -227,10 +229,15 @@ func shouldUpdateProviderSpecific(desired, current *endpoint.Endpoint) bool {
// Per RFC 1034, CNAME records conflict with all other records - it is the // Per RFC 1034, CNAME records conflict with all other records - it is the
// only record with this property. The behavior of the planner may need to be // only record with this property. The behavior of the planner may need to be
// made more sophisticated to codify this. // made more sophisticated to codify this.
func filterRecordsForPlan(records []*endpoint.Endpoint) []*endpoint.Endpoint { func filterRecordsForPlan(records []*endpoint.Endpoint, domainFilter endpoint.DomainFilter) []*endpoint.Endpoint {
filtered := []*endpoint.Endpoint{} filtered := []*endpoint.Endpoint{}
for _, record := range records { for _, record := range records {
// Ignore records that do not match the domain filter provided
if !domainFilter.Match(record.DNSName) {
continue
}
// Explicitly specify which records we want to use for planning. // Explicitly specify which records we want to use for planning.
// TODO: Add AAAA records as well when they are supported. // TODO: Add AAAA records as well when they are supported.
switch record.RecordType { switch record.RecordType {

View File

@ -42,6 +42,10 @@ type PlanTestSuite struct {
multiple1 *endpoint.Endpoint multiple1 *endpoint.Endpoint
multiple2 *endpoint.Endpoint multiple2 *endpoint.Endpoint
multiple3 *endpoint.Endpoint multiple3 *endpoint.Endpoint
domainFilterFiltered1 *endpoint.Endpoint
domainFilterFiltered2 *endpoint.Endpoint
domainFilterFiltered3 *endpoint.Endpoint
domainFilterExcluded *endpoint.Endpoint
} }
func (suite *PlanTestSuite) SetupTest() { func (suite *PlanTestSuite) SetupTest() {
@ -160,6 +164,26 @@ func (suite *PlanTestSuite) SetupTest() {
RecordType: "A", RecordType: "A",
SetIdentifier: "test-set-2", SetIdentifier: "test-set-2",
} }
suite.domainFilterFiltered1 = &endpoint.Endpoint{
DNSName: "foo.domain.tld",
Targets: endpoint.Targets{"1.2.3.4"},
RecordType: "A",
}
suite.domainFilterFiltered2 = &endpoint.Endpoint{
DNSName: "bar.domain.tld",
Targets: endpoint.Targets{"1.2.3.5"},
RecordType: "A",
}
suite.domainFilterFiltered3 = &endpoint.Endpoint{
DNSName: "baz.domain.tld",
Targets: endpoint.Targets{"1.2.3.6"},
RecordType: "A",
}
suite.domainFilterExcluded = &endpoint.Endpoint{
DNSName: "foo.ex.domain.tld",
Targets: endpoint.Targets{"1.1.1.1"},
RecordType: "A",
}
} }
func (suite *PlanTestSuite) TestSyncFirstRound() { func (suite *PlanTestSuite) TestSyncFirstRound() {
@ -492,6 +516,52 @@ func (suite *PlanTestSuite) TestSetIdentifierUpdateCreatesAndDeletes() {
validateEntries(suite.T(), changes.Delete, expectedDelete) validateEntries(suite.T(), changes.Delete, expectedDelete)
} }
func (suite *PlanTestSuite) TestDomainFiltersInitial() {
current := []*endpoint.Endpoint{suite.domainFilterExcluded}
desired := []*endpoint.Endpoint{suite.domainFilterExcluded, suite.domainFilterFiltered1, suite.domainFilterFiltered2, suite.domainFilterFiltered3}
expectedCreate := []*endpoint.Endpoint{suite.domainFilterFiltered1, suite.domainFilterFiltered2, suite.domainFilterFiltered3}
expectedUpdateOld := []*endpoint.Endpoint{}
expectedUpdateNew := []*endpoint.Endpoint{}
expectedDelete := []*endpoint.Endpoint{}
p := &Plan{
Policies: []Policy{&SyncPolicy{}},
Current: current,
Desired: desired,
DomainFilter: endpoint.NewDomainFilterWithExclusions([]string{"domain.tld"}, []string{"ex.domain.tld"}),
}
changes := p.Calculate().Changes
validateEntries(suite.T(), changes.Create, expectedCreate)
validateEntries(suite.T(), changes.UpdateNew, expectedUpdateNew)
validateEntries(suite.T(), changes.UpdateOld, expectedUpdateOld)
validateEntries(suite.T(), changes.Delete, expectedDelete)
}
func (suite *PlanTestSuite) TestDomainFiltersUpdate() {
current := []*endpoint.Endpoint{suite.domainFilterExcluded, suite.domainFilterFiltered1, suite.domainFilterFiltered2}
desired := []*endpoint.Endpoint{suite.domainFilterExcluded, suite.domainFilterFiltered1, suite.domainFilterFiltered2, suite.domainFilterFiltered3}
expectedCreate := []*endpoint.Endpoint{suite.domainFilterFiltered3}
expectedUpdateOld := []*endpoint.Endpoint{}
expectedUpdateNew := []*endpoint.Endpoint{}
expectedDelete := []*endpoint.Endpoint{}
p := &Plan{
Policies: []Policy{&SyncPolicy{}},
Current: current,
Desired: desired,
DomainFilter: endpoint.NewDomainFilterWithExclusions([]string{"domain.tld"}, []string{"ex.domain.tld"}),
}
changes := p.Calculate().Changes
validateEntries(suite.T(), changes.Create, expectedCreate)
validateEntries(suite.T(), changes.UpdateNew, expectedUpdateNew)
validateEntries(suite.T(), changes.UpdateOld, expectedUpdateOld)
validateEntries(suite.T(), changes.Delete, expectedDelete)
}
func TestPlan(t *testing.T) { func TestPlan(t *testing.T) {
suite.Run(t, new(PlanTestSuite)) suite.Run(t, new(PlanTestSuite))
} }

View File

@ -49,7 +49,7 @@ func (*akamaiOpenClient) Do(config edgegrid.Config, req *http.Request) (*http.Re
// AkamaiConfig clarifies the method signature // AkamaiConfig clarifies the method signature
type AkamaiConfig struct { type AkamaiConfig struct {
DomainFilter DomainFilter DomainFilter endpoint.DomainFilter
ZoneIDFilter ZoneIDFilter ZoneIDFilter ZoneIDFilter
ServiceConsumerDomain string ServiceConsumerDomain string
ClientToken string ClientToken string
@ -60,7 +60,7 @@ type AkamaiConfig struct {
// AkamaiProvider implements the DNS provider for Akamai. // AkamaiProvider implements the DNS provider for Akamai.
type AkamaiProvider struct { type AkamaiProvider struct {
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
config edgegrid.Config config edgegrid.Config
dryRun bool dryRun bool

View File

@ -108,7 +108,7 @@ func TestFetchZonesZoneIDFilter(t *testing.T) {
func TestFetchZonesEmpty(t *testing.T) { func TestFetchZonesEmpty(t *testing.T) {
config := AkamaiConfig{ config := AkamaiConfig{
DomainFilter: NewDomainFilter([]string{"Nonexistent"}), DomainFilter: endpoint.NewDomainFilter([]string{"Nonexistent"}),
ZoneIDFilter: NewZoneIDFilter([]string{"Nonexistent"}), ZoneIDFilter: NewZoneIDFilter([]string{"Nonexistent"}),
} }
@ -184,7 +184,7 @@ func TestAkamaiRecordsEmpty(t *testing.T) {
func TestAkamaiRecordsFilters(t *testing.T) { func TestAkamaiRecordsFilters(t *testing.T) {
config := AkamaiConfig{ config := AkamaiConfig{
DomainFilter: NewDomainFilter([]string{"www.exclude.me"}), DomainFilter: endpoint.NewDomainFilter([]string{"www.exclude.me"}),
ZoneIDFilter: NewZoneIDFilter([]string{"Exclude-Me"}), ZoneIDFilter: NewZoneIDFilter([]string{"Exclude-Me"}),
} }
@ -221,7 +221,7 @@ func TestCreateRecords(t *testing.T) {
func TestCreateRecordsDomainFilter(t *testing.T) { func TestCreateRecordsDomainFilter(t *testing.T) {
config := AkamaiConfig{ config := AkamaiConfig{
DomainFilter: NewDomainFilter([]string{"example.com"}), DomainFilter: endpoint.NewDomainFilter([]string{"example.com"}),
} }
client := &mockAkamaiClient{} client := &mockAkamaiClient{}
@ -260,7 +260,7 @@ func TestDeleteRecords(t *testing.T) {
func TestDeleteRecordsDomainFilter(t *testing.T) { func TestDeleteRecordsDomainFilter(t *testing.T) {
config := AkamaiConfig{ config := AkamaiConfig{
DomainFilter: NewDomainFilter([]string{"example.com"}), DomainFilter: endpoint.NewDomainFilter([]string{"example.com"}),
} }
client := &mockAkamaiClient{} client := &mockAkamaiClient{}
@ -299,7 +299,7 @@ func TestUpdateRecords(t *testing.T) {
func TestUpdateRecordsDomainFilter(t *testing.T) { func TestUpdateRecordsDomainFilter(t *testing.T) {
config := AkamaiConfig{ config := AkamaiConfig{
DomainFilter: NewDomainFilter([]string{"example.com"}), DomainFilter: endpoint.NewDomainFilter([]string{"example.com"}),
} }
client := &mockAkamaiClient{} client := &mockAkamaiClient{}

View File

@ -66,7 +66,7 @@ type AlibabaCloudPrivateZoneAPI interface {
// AlibabaCloudProvider implements the DNS provider for Alibaba Cloud. // AlibabaCloudProvider implements the DNS provider for Alibaba Cloud.
type AlibabaCloudProvider struct { type AlibabaCloudProvider struct {
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter // Private Zone only zoneIDFilter ZoneIDFilter // Private Zone only
MaxChangeCount int MaxChangeCount int
EvaluateTargetHealth bool EvaluateTargetHealth bool
@ -93,7 +93,7 @@ type alibabaCloudConfig struct {
// NewAlibabaCloudProvider creates a new Alibaba Cloud provider. // NewAlibabaCloudProvider creates a new Alibaba Cloud provider.
// //
// Returns the provider or an error if a provider could not be created. // Returns the provider or an error if a provider could not be created.
func NewAlibabaCloudProvider(configFile string, domainFilter DomainFilter, zoneIDFileter ZoneIDFilter, zoneType string, dryRun bool) (*AlibabaCloudProvider, error) { func NewAlibabaCloudProvider(configFile string, domainFilter endpoint.DomainFilter, zoneIDFileter ZoneIDFilter, zoneType string, dryRun bool) (*AlibabaCloudProvider, error) {
cfg := alibabaCloudConfig{} cfg := alibabaCloudConfig{}
if configFile != "" { if configFile != "" {
contents, err := ioutil.ReadFile(configFile) contents, err := ioutil.ReadFile(configFile)
@ -382,7 +382,7 @@ func (p *AlibabaCloudProvider) records() ([]alidns.Record, error) {
log.Infof("Retrieving Alibaba Cloud DNS Domain Records") log.Infof("Retrieving Alibaba Cloud DNS Domain Records")
var results []alidns.Record var results []alidns.Record
if len(p.domainFilter.filters) == 1 && p.domainFilter.filters[0] == "" { if len(p.domainFilter.Filters) == 1 && p.domainFilter.Filters[0] == "" {
domainNames, tmpErr := p.getDomainList() domainNames, tmpErr := p.getDomainList()
if tmpErr != nil { if tmpErr != nil {
log.Errorf("AlibabaCloudProvider getDomainList error %v", tmpErr) log.Errorf("AlibabaCloudProvider getDomainList error %v", tmpErr)
@ -397,7 +397,7 @@ func (p *AlibabaCloudProvider) records() ([]alidns.Record, error) {
results = append(results, tmpResults...) results = append(results, tmpResults...)
} }
} else { } else {
for _, domainName := range p.domainFilter.filters { for _, domainName := range p.domainFilter.Filters {
tmpResults, err := p.getDomainRecords(domainName) tmpResults, err := p.getDomainRecords(domainName)
if err != nil { if err != nil {
log.Errorf("getDomainRecords %s error %v", domainName, err) log.Errorf("getDomainRecords %s error %v", domainName, err)
@ -672,7 +672,7 @@ func (p *AlibabaCloudProvider) splitDNSName(endpoint *endpoint.Endpoint) (rr str
found := false found := false
for _, filter := range p.domainFilter.filters { for _, filter := range p.domainFilter.Filters {
if strings.HasSuffix(name, "."+filter) { if strings.HasSuffix(name, "."+filter) {
rr = name[0 : len(name)-len(filter)-1] rr = name[0 : len(name)-len(filter)-1]
domain = filter domain = filter

View File

@ -22,6 +22,7 @@ import (
"github.com/aliyun/alibaba-cloud-sdk-go/services/alidns" "github.com/aliyun/alibaba-cloud-sdk-go/services/alidns"
"github.com/aliyun/alibaba-cloud-sdk-go/services/pvtz" "github.com/aliyun/alibaba-cloud-sdk-go/services/pvtz"
"sigs.k8s.io/external-dns/endpoint" "sigs.k8s.io/external-dns/endpoint"
"sigs.k8s.io/external-dns/plan" "sigs.k8s.io/external-dns/plan"
@ -232,7 +233,7 @@ func newTestAlibabaCloudProvider(private bool) *AlibabaCloudProvider {
// cfg.AccessKeyID, // cfg.AccessKeyID,
// cfg.AccessKeySecret, // cfg.AccessKeySecret,
//) //)
domainFilterTest := NewDomainFilter([]string{"container-service.top.", "example.org"}) domainFilterTest := endpoint.NewDomainFilter([]string{"container-service.top.", "example.org"})
return &AlibabaCloudProvider{ return &AlibabaCloudProvider{
domainFilter: domainFilterTest, domainFilter: domainFilterTest,

View File

@ -117,7 +117,7 @@ type AWSProvider struct {
batchChangeInterval time.Duration batchChangeInterval time.Duration
evaluateTargetHealth bool evaluateTargetHealth bool
// only consider hosted zones managing domains ending in this suffix // only consider hosted zones managing domains ending in this suffix
domainFilter DomainFilter domainFilter endpoint.DomainFilter
// filter hosted zones by id // filter hosted zones by id
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
// filter hosted zones by type (e.g. private or public) // filter hosted zones by type (e.g. private or public)
@ -129,7 +129,7 @@ type AWSProvider struct {
// AWSConfig contains configuration to create a new AWS provider. // AWSConfig contains configuration to create a new AWS provider.
type AWSConfig struct { type AWSConfig struct {
DomainFilter DomainFilter DomainFilter endpoint.DomainFilter
ZoneIDFilter ZoneIDFilter ZoneIDFilter ZoneIDFilter
ZoneTypeFilter ZoneTypeFilter ZoneTypeFilter ZoneTypeFilter
ZoneTagFilter ZoneTagFilter ZoneTagFilter ZoneTagFilter

View File

@ -76,13 +76,13 @@ type AWSSDProvider struct {
client AWSSDClient client AWSSDClient
dryRun bool dryRun bool
// only consider namespaces ending in this suffix // only consider namespaces ending in this suffix
namespaceFilter DomainFilter namespaceFilter endpoint.DomainFilter
// filter namespace by type (private or public) // filter namespace by type (private or public)
namespaceTypeFilter *sd.NamespaceFilter namespaceTypeFilter *sd.NamespaceFilter
} }
// NewAWSSDProvider initializes a new AWS Cloud Map based Provider. // NewAWSSDProvider initializes a new AWS Cloud Map based Provider.
func NewAWSSDProvider(domainFilter DomainFilter, namespaceType string, assumeRole string, dryRun bool) (*AWSSDProvider, error) { func NewAWSSDProvider(domainFilter endpoint.DomainFilter, namespaceType string, assumeRole string, dryRun bool) (*AWSSDProvider, error) {
config := aws.NewConfig() config := aws.NewConfig()
config = config.WithHTTPClient( config = config.WithHTTPClient(

View File

@ -180,7 +180,7 @@ func (s *AWSSDClientStub) UpdateService(input *sd.UpdateServiceInput) (*sd.Updat
return &sd.UpdateServiceOutput{}, nil return &sd.UpdateServiceOutput{}, nil
} }
func newTestAWSSDProvider(api AWSSDClient, domainFilter DomainFilter, namespaceTypeFilter string) *AWSSDProvider { func newTestAWSSDProvider(api AWSSDClient, domainFilter endpoint.DomainFilter, namespaceTypeFilter string) *AWSSDProvider {
return &AWSSDProvider{ return &AWSSDProvider{
client: api, client: api,
namespaceFilter: domainFilter, namespaceFilter: domainFilter,
@ -287,7 +287,7 @@ func TestAWSSDProvider_Records(t *testing.T) {
instances: instances, instances: instances,
} }
provider := newTestAWSSDProvider(api, NewDomainFilter([]string{}), "") provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "")
endpoints, _ := provider.Records(context.Background()) endpoints, _ := provider.Records(context.Background())
@ -315,7 +315,7 @@ func TestAWSSDProvider_ApplyChanges(t *testing.T) {
{DNSName: "service3.private.com", Targets: endpoint.Targets{"cname.target.com"}, RecordType: endpoint.RecordTypeCNAME, RecordTTL: 100}, {DNSName: "service3.private.com", Targets: endpoint.Targets{"cname.target.com"}, RecordType: endpoint.RecordTypeCNAME, RecordTTL: 100},
} }
provider := newTestAWSSDProvider(api, NewDomainFilter([]string{}), "") provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "")
ctx := context.Background() ctx := context.Background()
@ -366,14 +366,14 @@ func TestAWSSDProvider_ListNamespaces(t *testing.T) {
for _, tc := range []struct { for _, tc := range []struct {
msg string msg string
domainFilter DomainFilter domainFilter endpoint.DomainFilter
namespaceTypeFilter string namespaceTypeFilter string
expectedNamespaces []*sd.NamespaceSummary expectedNamespaces []*sd.NamespaceSummary
}{ }{
{"public filter", NewDomainFilter([]string{}), "public", []*sd.NamespaceSummary{namespaceToNamespaceSummary(namespaces["public"])}}, {"public filter", endpoint.NewDomainFilter([]string{}), "public", []*sd.NamespaceSummary{namespaceToNamespaceSummary(namespaces["public"])}},
{"private filter", NewDomainFilter([]string{}), "private", []*sd.NamespaceSummary{namespaceToNamespaceSummary(namespaces["private"])}}, {"private filter", endpoint.NewDomainFilter([]string{}), "private", []*sd.NamespaceSummary{namespaceToNamespaceSummary(namespaces["private"])}},
{"domain filter", NewDomainFilter([]string{"public.com"}), "", []*sd.NamespaceSummary{namespaceToNamespaceSummary(namespaces["public"])}}, {"domain filter", endpoint.NewDomainFilter([]string{"public.com"}), "", []*sd.NamespaceSummary{namespaceToNamespaceSummary(namespaces["public"])}},
{"non-existing domain", NewDomainFilter([]string{"xxx.com"}), "", []*sd.NamespaceSummary{}}, {"non-existing domain", endpoint.NewDomainFilter([]string{"xxx.com"}), "", []*sd.NamespaceSummary{}},
} { } {
provider := newTestAWSSDProvider(api, tc.domainFilter, tc.namespaceTypeFilter) provider := newTestAWSSDProvider(api, tc.domainFilter, tc.namespaceTypeFilter)
@ -438,7 +438,7 @@ func TestAWSSDProvider_ListServicesByNamespace(t *testing.T) {
}{ }{
{map[string]*sd.Service{"service1": services["private"]["srv1"], "service2": services["private"]["srv2"]}}, {map[string]*sd.Service{"service1": services["private"]["srv1"], "service2": services["private"]["srv2"]}},
} { } {
provider := newTestAWSSDProvider(api, NewDomainFilter([]string{}), "") provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "")
result, err := provider.ListServicesByNamespaceID(namespaces["private"].Id) result, err := provider.ListServicesByNamespaceID(namespaces["private"].Id)
require.NoError(t, err) require.NoError(t, err)
@ -494,7 +494,7 @@ func TestAWSSDProvider_ListInstancesByService(t *testing.T) {
instances: instances, instances: instances,
} }
provider := newTestAWSSDProvider(api, NewDomainFilter([]string{}), "") provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "")
result, err := provider.ListInstancesByServiceID(services["private"]["srv1"].Id) result, err := provider.ListInstancesByServiceID(services["private"]["srv1"].Id)
require.NoError(t, err) require.NoError(t, err)
@ -531,7 +531,7 @@ func TestAWSSDProvider_CreateService(t *testing.T) {
expectedServices := make(map[string]*sd.Service) expectedServices := make(map[string]*sd.Service)
provider := newTestAWSSDProvider(api, NewDomainFilter([]string{}), "") provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "")
// A type // A type
provider.CreateService(aws.String("private"), aws.String("A-srv"), &endpoint.Endpoint{ provider.CreateService(aws.String("private"), aws.String("A-srv"), &endpoint.Endpoint{
@ -635,7 +635,7 @@ func TestAWSSDProvider_UpdateService(t *testing.T) {
services: services, services: services,
} }
provider := newTestAWSSDProvider(api, NewDomainFilter([]string{}), "") provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "")
// update service with different TTL // update service with different TTL
provider.UpdateService(services["private"]["srv1"], &endpoint.Endpoint{ provider.UpdateService(services["private"]["srv1"], &endpoint.Endpoint{
@ -702,7 +702,7 @@ func TestAWSSDProvider_RegisterInstance(t *testing.T) {
instances: make(map[string]map[string]*sd.Instance), instances: make(map[string]map[string]*sd.Instance),
} }
provider := newTestAWSSDProvider(api, NewDomainFilter([]string{}), "") provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "")
expectedInstances := make(map[string]*sd.Instance) expectedInstances := make(map[string]*sd.Instance)
@ -819,7 +819,7 @@ func TestAWSSDProvider_DeregisterInstance(t *testing.T) {
instances: instances, instances: instances,
} }
provider := newTestAWSSDProvider(api, NewDomainFilter([]string{}), "") provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "")
provider.DeregisterInstance(services["private"]["srv1"], endpoint.NewEndpoint("srv1.private.com.", endpoint.RecordTypeA, "1.2.3.4")) provider.DeregisterInstance(services["private"]["srv1"], endpoint.NewEndpoint("srv1.private.com.", endpoint.RecordTypeA, "1.2.3.4"))

View File

@ -299,7 +299,7 @@ func TestAWSZones(t *testing.T) {
{"zone id filter", NewZoneIDFilter([]string{"/hostedzone/zone-3.ext-dns-test-2.teapot.zalan.do."}), NewZoneTypeFilter(""), NewZoneTagFilter([]string{}), privateZones}, {"zone id filter", NewZoneIDFilter([]string{"/hostedzone/zone-3.ext-dns-test-2.teapot.zalan.do."}), NewZoneTypeFilter(""), NewZoneTagFilter([]string{}), privateZones},
{"tag filter", NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), NewZoneTagFilter([]string{"zone=3"}), privateZones}, {"tag filter", NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), NewZoneTagFilter([]string{"zone=3"}), privateZones},
} { } {
provider, _ := newAWSProviderWithTagFilter(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), ti.zoneIDFilter, ti.zoneTypeFilter, ti.zoneTagFilter, defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{}) provider, _ := newAWSProviderWithTagFilter(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), ti.zoneIDFilter, ti.zoneTypeFilter, ti.zoneTagFilter, defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{})
zones, err := provider.Zones(context.Background()) zones, err := provider.Zones(context.Background())
require.NoError(t, err) require.NoError(t, err)
@ -309,7 +309,7 @@ func TestAWSZones(t *testing.T) {
} }
func TestAWSRecords(t *testing.T) { func TestAWSRecords(t *testing.T) {
provider, _ := newAWSProvider(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), false, false, []*endpoint.Endpoint{ provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), false, false, []*endpoint.Endpoint{
endpoint.NewEndpointWithTTL("list-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "1.2.3.4"), endpoint.NewEndpointWithTTL("list-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "1.2.3.4"),
endpoint.NewEndpointWithTTL("list-test.zone-2.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8"), endpoint.NewEndpointWithTTL("list-test.zone-2.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8"),
endpoint.NewEndpointWithTTL("*.wildcard-test.zone-2.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8"), endpoint.NewEndpointWithTTL("*.wildcard-test.zone-2.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8"),
@ -351,7 +351,7 @@ func TestAWSRecords(t *testing.T) {
func TestAWSCreateRecords(t *testing.T) { func TestAWSCreateRecords(t *testing.T) {
customTTL := endpoint.TTL(60) customTTL := endpoint.TTL(60)
provider, _ := newAWSProvider(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{}) provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{})
records := []*endpoint.Endpoint{ records := []*endpoint.Endpoint{
endpoint.NewEndpoint("create-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, "1.2.3.4"), endpoint.NewEndpoint("create-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, "1.2.3.4"),
@ -376,7 +376,7 @@ func TestAWSCreateRecords(t *testing.T) {
} }
func TestAWSUpdateRecords(t *testing.T) { func TestAWSUpdateRecords(t *testing.T) {
provider, _ := newAWSProvider(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{ provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{
endpoint.NewEndpointWithTTL("update-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8"), endpoint.NewEndpointWithTTL("update-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8"),
endpoint.NewEndpointWithTTL("update-test.zone-2.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.4.4"), endpoint.NewEndpointWithTTL("update-test.zone-2.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.4.4"),
endpoint.NewEndpointWithTTL("update-test-cname.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeCNAME, endpoint.TTL(recordTTL), "foo.elb.amazonaws.com"), endpoint.NewEndpointWithTTL("update-test-cname.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeCNAME, endpoint.TTL(recordTTL), "foo.elb.amazonaws.com"),
@ -419,7 +419,7 @@ func TestAWSDeleteRecords(t *testing.T) {
endpoint.NewEndpointWithTTL("delete-test-multiple.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8", "8.8.4.4"), endpoint.NewEndpointWithTTL("delete-test-multiple.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8", "8.8.4.4"),
} }
provider, _ := newAWSProvider(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), false, false, originalEndpoints) provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), false, false, originalEndpoints)
require.NoError(t, provider.DeleteRecords(context.Background(), originalEndpoints)) require.NoError(t, provider.DeleteRecords(context.Background(), originalEndpoints))
@ -446,7 +446,7 @@ func TestAWSApplyChanges(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
provider, _ := newAWSProvider(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{ provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{
endpoint.NewEndpointWithTTL("update-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8"), endpoint.NewEndpointWithTTL("update-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8"),
endpoint.NewEndpointWithTTL("delete-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8"), endpoint.NewEndpointWithTTL("delete-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.8.8"),
endpoint.NewEndpointWithTTL("update-test.zone-2.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.4.4"), endpoint.NewEndpointWithTTL("update-test.zone-2.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "8.8.4.4"),
@ -538,7 +538,7 @@ func TestAWSApplyChangesDryRun(t *testing.T) {
endpoint.NewEndpointWithTTL("delete-test-multiple.zone-2.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "1.2.3.4", "4.3.2.1"), endpoint.NewEndpointWithTTL("delete-test-multiple.zone-2.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "1.2.3.4", "4.3.2.1"),
} }
provider, _ := newAWSProvider(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, true, originalEndpoints) provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, true, originalEndpoints)
createRecords := []*endpoint.Endpoint{ createRecords := []*endpoint.Endpoint{
endpoint.NewEndpoint("create-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, "8.8.8.8"), endpoint.NewEndpoint("create-test.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, "8.8.8.8"),
@ -686,7 +686,7 @@ func TestAWSChangesByZones(t *testing.T) {
} }
func TestAWSsubmitChanges(t *testing.T) { func TestAWSsubmitChanges(t *testing.T) {
provider, _ := newAWSProvider(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{}) provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{})
const subnets = 16 const subnets = 16
const hosts = defaultBatchChangeSize / subnets const hosts = defaultBatchChangeSize / subnets
@ -715,7 +715,7 @@ func TestAWSsubmitChanges(t *testing.T) {
} }
func TestAWSsubmitChangesError(t *testing.T) { func TestAWSsubmitChangesError(t *testing.T) {
provider, clientStub := newAWSProvider(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{}) provider, clientStub := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{})
clientStub.MockMethod("ChangeResourceRecordSets", mock.Anything).Return(nil, fmt.Errorf("Mock route53 failure")) clientStub.MockMethod("ChangeResourceRecordSets", mock.Anything).Return(nil, fmt.Errorf("Mock route53 failure"))
ctx := context.Background() ctx := context.Background()
@ -851,7 +851,7 @@ func validateAWSChangeRecord(t *testing.T, record *route53.Change, expected *rou
} }
func TestAWSCreateRecordsWithCNAME(t *testing.T) { func TestAWSCreateRecordsWithCNAME(t *testing.T) {
provider, _ := newAWSProvider(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{}) provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{})
records := []*endpoint.Endpoint{ records := []*endpoint.Endpoint{
{DNSName: "create-test.zone-1.ext-dns-test-2.teapot.zalan.do", Targets: endpoint.Targets{"foo.example.org"}, RecordType: endpoint.RecordTypeCNAME}, {DNSName: "create-test.zone-1.ext-dns-test-2.teapot.zalan.do", Targets: endpoint.Targets{"foo.example.org"}, RecordType: endpoint.RecordTypeCNAME},
@ -881,7 +881,7 @@ func TestAWSCreateRecordsWithALIAS(t *testing.T) {
"false": false, "false": false,
"": false, "": false,
} { } {
provider, _ := newAWSProvider(t, NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{}) provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), NewZoneIDFilter([]string{}), NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*endpoint.Endpoint{})
// Test dualstack and ipv4 load balancer targets // Test dualstack and ipv4 load balancer targets
records := []*endpoint.Endpoint{ records := []*endpoint.Endpoint{
@ -1180,11 +1180,11 @@ func escapeAWSRecords(t *testing.T, provider *AWSProvider, zone string) {
require.NoError(t, err) require.NoError(t, err)
} }
} }
func newAWSProvider(t *testing.T, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, zoneTypeFilter ZoneTypeFilter, evaluateTargetHealth, dryRun bool, records []*endpoint.Endpoint) (*AWSProvider, *Route53APIStub) { func newAWSProvider(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, zoneTypeFilter ZoneTypeFilter, evaluateTargetHealth, dryRun bool, records []*endpoint.Endpoint) (*AWSProvider, *Route53APIStub) {
return newAWSProviderWithTagFilter(t, domainFilter, zoneIDFilter, zoneTypeFilter, NewZoneTagFilter([]string{}), evaluateTargetHealth, dryRun, records) return newAWSProviderWithTagFilter(t, domainFilter, zoneIDFilter, zoneTypeFilter, NewZoneTagFilter([]string{}), evaluateTargetHealth, dryRun, records)
} }
func newAWSProviderWithTagFilter(t *testing.T, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, zoneTypeFilter ZoneTypeFilter, zoneTagFilter ZoneTagFilter, evaluateTargetHealth, dryRun bool, records []*endpoint.Endpoint) (*AWSProvider, *Route53APIStub) { func newAWSProviderWithTagFilter(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, zoneTypeFilter ZoneTypeFilter, zoneTagFilter ZoneTagFilter, evaluateTargetHealth, dryRun bool, records []*endpoint.Endpoint) (*AWSProvider, *Route53APIStub) {
client := NewRoute53APIStub() client := NewRoute53APIStub()
provider := &AWSProvider{ provider := &AWSProvider{

View File

@ -66,7 +66,7 @@ type RecordSetsClient interface {
// AzureProvider implements the DNS provider for Microsoft's Azure cloud platform. // AzureProvider implements the DNS provider for Microsoft's Azure cloud platform.
type AzureProvider struct { type AzureProvider struct {
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
dryRun bool dryRun bool
resourceGroup string resourceGroup string
@ -78,7 +78,7 @@ type AzureProvider struct {
// NewAzureProvider creates a new Azure provider. // NewAzureProvider creates a new Azure provider.
// //
// Returns the provider or an error if a provider could not be created. // Returns the provider or an error if a provider could not be created.
func NewAzureProvider(configFile string, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, resourceGroup string, userAssignedIdentityClientID string, dryRun bool) (*AzureProvider, error) { func NewAzureProvider(configFile string, domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, resourceGroup string, userAssignedIdentityClientID string, dryRun bool) (*AzureProvider, error) {
contents, err := ioutil.ReadFile(configFile) contents, err := ioutil.ReadFile(configFile)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to read Azure config file '%s': %v", configFile, err) return nil, fmt.Errorf("failed to read Azure config file '%s': %v", configFile, err)

View File

@ -45,7 +45,7 @@ type PrivateRecordSetsClient interface {
// AzurePrivateDNSProvider implements the DNS provider for Microsoft's Azure Private DNS service // AzurePrivateDNSProvider implements the DNS provider for Microsoft's Azure Private DNS service
type AzurePrivateDNSProvider struct { type AzurePrivateDNSProvider struct {
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
dryRun bool dryRun bool
subscriptionID string subscriptionID string
@ -57,7 +57,7 @@ type AzurePrivateDNSProvider struct {
// NewAzurePrivateDNSProvider creates a new Azure Private DNS provider. // NewAzurePrivateDNSProvider creates a new Azure Private DNS provider.
// //
// Returns the provider or an error if a provider could not be created. // Returns the provider or an error if a provider could not be created.
func NewAzurePrivateDNSProvider(domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, resourceGroup string, subscriptionID string, dryRun bool) (*AzurePrivateDNSProvider, error) { func NewAzurePrivateDNSProvider(domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, resourceGroup string, subscriptionID string, dryRun bool) (*AzurePrivateDNSProvider, error) {
authorizer, err := auth.NewAuthorizerFromEnvironment() authorizer, err := auth.NewAuthorizerFromEnvironment()
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -203,7 +203,7 @@ func (client *mockPrivateRecordSetsClient) CreateOrUpdate(ctx context.Context, r
} }
// newMockedAzurePrivateDNSProvider creates an AzureProvider comprising the mocked clients for zones and recordsets // newMockedAzurePrivateDNSProvider creates an AzureProvider comprising the mocked clients for zones and recordsets
func newMockedAzurePrivateDNSProvider(domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, resourceGroup string, zones *[]privatedns.PrivateZone, recordSets *[]privatedns.RecordSet) (*AzurePrivateDNSProvider, error) { func newMockedAzurePrivateDNSProvider(domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, resourceGroup string, zones *[]privatedns.PrivateZone, recordSets *[]privatedns.RecordSet) (*AzurePrivateDNSProvider, error) {
// init zone-related parts of the mock-client // init zone-related parts of the mock-client
pageIterator := mockPrivateZoneListResultPageIterator{ pageIterator := mockPrivateZoneListResultPageIterator{
results: []privatedns.PrivateZoneListResult{ results: []privatedns.PrivateZoneListResult{
@ -236,7 +236,7 @@ func newMockedAzurePrivateDNSProvider(domainFilter DomainFilter, zoneIDFilter Zo
return newAzurePrivateDNSProvider(domainFilter, zoneIDFilter, dryRun, resourceGroup, &zonesClient, &recordSetsClient), nil return newAzurePrivateDNSProvider(domainFilter, zoneIDFilter, dryRun, resourceGroup, &zonesClient, &recordSetsClient), nil
} }
func newAzurePrivateDNSProvider(domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, resourceGroup string, privateZonesClient PrivateZonesClient, privateRecordsClient PrivateRecordSetsClient) *AzurePrivateDNSProvider { func newAzurePrivateDNSProvider(domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, resourceGroup string, privateZonesClient PrivateZonesClient, privateRecordsClient PrivateRecordSetsClient) *AzurePrivateDNSProvider {
return &AzurePrivateDNSProvider{ return &AzurePrivateDNSProvider{
domainFilter: domainFilter, domainFilter: domainFilter,
zoneIDFilter: zoneIDFilter, zoneIDFilter: zoneIDFilter,
@ -248,7 +248,7 @@ func newAzurePrivateDNSProvider(domainFilter DomainFilter, zoneIDFilter ZoneIDFi
} }
func TestAzurePrivateDNSRecord(t *testing.T) { func TestAzurePrivateDNSRecord(t *testing.T) {
provider, err := newMockedAzurePrivateDNSProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, "k8s", provider, err := newMockedAzurePrivateDNSProvider(endpoint.NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, "k8s",
&[]privatedns.PrivateZone{ &[]privatedns.PrivateZone{
createMockPrivateZone("example.com", "/privateDnsZones/example.com"), createMockPrivateZone("example.com", "/privateDnsZones/example.com"),
}, },
@ -284,7 +284,7 @@ func TestAzurePrivateDNSRecord(t *testing.T) {
} }
func TestAzurePrivateDNSMultiRecord(t *testing.T) { func TestAzurePrivateDNSMultiRecord(t *testing.T) {
provider, err := newMockedAzurePrivateDNSProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, "k8s", provider, err := newMockedAzurePrivateDNSProvider(endpoint.NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, "k8s",
&[]privatedns.PrivateZone{ &[]privatedns.PrivateZone{
createMockPrivateZone("example.com", "/privateDnsZones/example.com"), createMockPrivateZone("example.com", "/privateDnsZones/example.com"),
}, },
@ -382,7 +382,7 @@ func testAzurePrivateDNSApplyChangesInternal(t *testing.T, dryRun bool, client P
} }
provider := newAzurePrivateDNSProvider( provider := newAzurePrivateDNSProvider(
NewDomainFilter([]string{""}), endpoint.NewDomainFilter([]string{""}),
NewZoneIDFilter([]string{""}), NewZoneIDFilter([]string{""}),
dryRun, dryRun,
"group", "group",

View File

@ -206,7 +206,7 @@ func (client *mockRecordSetsClient) CreateOrUpdate(ctx context.Context, resource
} }
// newMockedAzureProvider creates an AzureProvider comprising the mocked clients for zones and recordsets // newMockedAzureProvider creates an AzureProvider comprising the mocked clients for zones and recordsets
func newMockedAzureProvider(domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, resourceGroup string, userAssignedIdentityClientID string, zones *[]dns.Zone, recordSets *[]dns.RecordSet) (*AzureProvider, error) { func newMockedAzureProvider(domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, resourceGroup string, userAssignedIdentityClientID string, zones *[]dns.Zone, recordSets *[]dns.RecordSet) (*AzureProvider, error) {
// init zone-related parts of the mock-client // init zone-related parts of the mock-client
pageIterator := mockZoneListResultPageIterator{ pageIterator := mockZoneListResultPageIterator{
results: []dns.ZoneListResult{ results: []dns.ZoneListResult{
@ -239,7 +239,7 @@ func newMockedAzureProvider(domainFilter DomainFilter, zoneIDFilter ZoneIDFilter
return newAzureProvider(domainFilter, zoneIDFilter, dryRun, resourceGroup, userAssignedIdentityClientID, &zonesClient, &recordSetsClient), nil return newAzureProvider(domainFilter, zoneIDFilter, dryRun, resourceGroup, userAssignedIdentityClientID, &zonesClient, &recordSetsClient), nil
} }
func newAzureProvider(domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, resourceGroup string, userAssignedIdentityClientID string, zonesClient ZonesClient, recordsClient RecordSetsClient) *AzureProvider { func newAzureProvider(domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, resourceGroup string, userAssignedIdentityClientID string, zonesClient ZonesClient, recordsClient RecordSetsClient) *AzureProvider {
return &AzureProvider{ return &AzureProvider{
domainFilter: domainFilter, domainFilter: domainFilter,
zoneIDFilter: zoneIDFilter, zoneIDFilter: zoneIDFilter,
@ -256,7 +256,7 @@ func validateAzureEndpoints(t *testing.T, endpoints []*endpoint.Endpoint, expect
} }
func TestAzureRecord(t *testing.T) { func TestAzureRecord(t *testing.T) {
provider, err := newMockedAzureProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, "k8s", "", provider, err := newMockedAzureProvider(endpoint.NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, "k8s", "",
&[]dns.Zone{ &[]dns.Zone{
createMockZone("example.com", "/dnszones/example.com"), createMockZone("example.com", "/dnszones/example.com"),
}, },
@ -293,7 +293,7 @@ func TestAzureRecord(t *testing.T) {
} }
func TestAzureMultiRecord(t *testing.T) { func TestAzureMultiRecord(t *testing.T) {
provider, err := newMockedAzureProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, "k8s", "", provider, err := newMockedAzureProvider(endpoint.NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, "k8s", "",
&[]dns.Zone{ &[]dns.Zone{
createMockZone("example.com", "/dnszones/example.com"), createMockZone("example.com", "/dnszones/example.com"),
}, },
@ -392,7 +392,7 @@ func testAzureApplyChangesInternal(t *testing.T, dryRun bool, client RecordSetsC
} }
provider := newAzureProvider( provider := newAzureProvider(
NewDomainFilter([]string{""}), endpoint.NewDomainFilter([]string{""}),
NewZoneIDFilter([]string{""}), NewZoneIDFilter([]string{""}),
dryRun, dryRun,
"group", "group",

View File

@ -102,7 +102,7 @@ func (z zoneService) ListZonesContext(ctx context.Context, opts ...cloudflare.Re
type CloudFlareProvider struct { type CloudFlareProvider struct {
Client cloudFlareDNS Client cloudFlareDNS
// only consider hosted zones managing domains ending in this suffix // only consider hosted zones managing domains ending in this suffix
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
proxiedByDefault bool proxiedByDefault bool
DryRun bool DryRun bool
@ -116,7 +116,7 @@ type cloudFlareChange struct {
} }
// NewCloudFlareProvider initializes a new CloudFlare DNS based Provider. // NewCloudFlareProvider initializes a new CloudFlare DNS based Provider.
func NewCloudFlareProvider(domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, zonesPerPage int, proxiedByDefault bool, dryRun bool) (*CloudFlareProvider, error) { func NewCloudFlareProvider(domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, zonesPerPage int, proxiedByDefault bool, dryRun bool) (*CloudFlareProvider, error) {
// initialize via chosen auth method and returns new API object // initialize via chosen auth method and returns new API object
var ( var (
config *cloudflare.API config *cloudflare.API

View File

@ -247,7 +247,7 @@ func TestNewCloudFlareChangeProxiable(t *testing.T) {
func TestCloudFlareZones(t *testing.T) { func TestCloudFlareZones(t *testing.T) {
provider := &CloudFlareProvider{ provider := &CloudFlareProvider{
Client: &mockCloudFlareClient{}, Client: &mockCloudFlareClient{},
domainFilter: NewDomainFilter([]string{"zalando.to."}), domainFilter: endpoint.NewDomainFilter([]string{"zalando.to."}),
zoneIDFilter: NewZoneIDFilter([]string{""}), zoneIDFilter: NewZoneIDFilter([]string{""}),
} }
@ -288,7 +288,7 @@ func TestRecords(t *testing.T) {
func TestNewCloudFlareProvider(t *testing.T) { func TestNewCloudFlareProvider(t *testing.T) {
_ = os.Setenv("CF_API_TOKEN", "abc123def") _ = os.Setenv("CF_API_TOKEN", "abc123def")
_, err := NewCloudFlareProvider( _, err := NewCloudFlareProvider(
NewDomainFilter([]string{"ext-dns-test.zalando.to."}), endpoint.NewDomainFilter([]string{"ext-dns-test.zalando.to."}),
NewZoneIDFilter([]string{""}), NewZoneIDFilter([]string{""}),
25, 25,
false, false,
@ -300,7 +300,7 @@ func TestNewCloudFlareProvider(t *testing.T) {
_ = os.Setenv("CF_API_KEY", "xxxxxxxxxxxxxxxxx") _ = os.Setenv("CF_API_KEY", "xxxxxxxxxxxxxxxxx")
_ = os.Setenv("CF_API_EMAIL", "test@test.com") _ = os.Setenv("CF_API_EMAIL", "test@test.com")
_, err = NewCloudFlareProvider( _, err = NewCloudFlareProvider(
NewDomainFilter([]string{"ext-dns-test.zalando.to."}), endpoint.NewDomainFilter([]string{"ext-dns-test.zalando.to."}),
NewZoneIDFilter([]string{""}), NewZoneIDFilter([]string{""}),
1, 1,
false, false,
@ -311,7 +311,7 @@ func TestNewCloudFlareProvider(t *testing.T) {
_ = os.Unsetenv("CF_API_KEY") _ = os.Unsetenv("CF_API_KEY")
_ = os.Unsetenv("CF_API_EMAIL") _ = os.Unsetenv("CF_API_EMAIL")
_, err = NewCloudFlareProvider( _, err = NewCloudFlareProvider(
NewDomainFilter([]string{"ext-dns-test.zalando.to."}), endpoint.NewDomainFilter([]string{"ext-dns-test.zalando.to."}),
NewZoneIDFilter([]string{""}), NewZoneIDFilter([]string{""}),
50, 50,
false, false,

View File

@ -58,7 +58,7 @@ type coreDNSClient interface {
type coreDNSProvider struct { type coreDNSProvider struct {
dryRun bool dryRun bool
coreDNSPrefix string coreDNSPrefix string
domainFilter DomainFilter domainFilter endpoint.DomainFilter
client coreDNSClient client coreDNSClient
} }
@ -244,7 +244,7 @@ func newETCDClient() (coreDNSClient, error) {
} }
// NewCoreDNSProvider is a CoreDNS provider constructor // NewCoreDNSProvider is a CoreDNS provider constructor
func NewCoreDNSProvider(domainFilter DomainFilter, prefix string, dryRun bool) (Provider, error) { func NewCoreDNSProvider(domainFilter endpoint.DomainFilter, prefix string, dryRun bool) (Provider, error) {
client, err := newETCDClient() client, err := newETCDClient()
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -229,12 +229,12 @@ type designateProvider struct {
client designateClientInterface client designateClientInterface
// only consider hosted zones managing domains ending in this suffix // only consider hosted zones managing domains ending in this suffix
domainFilter DomainFilter domainFilter endpoint.DomainFilter
dryRun bool dryRun bool
} }
// NewDesignateProvider is a factory function for OpenStack designate providers // NewDesignateProvider is a factory function for OpenStack designate providers
func NewDesignateProvider(domainFilter DomainFilter, dryRun bool) (Provider, error) { func NewDesignateProvider(domainFilter endpoint.DomainFilter, dryRun bool) (Provider, error) {
client, err := newDesignateClient() client, err := newDesignateClient()
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -191,7 +191,7 @@ func TestNewDesignateProvider(t *testing.T) {
os.Setenv("OS_USER_DOMAIN_NAME", "Default") os.Setenv("OS_USER_DOMAIN_NAME", "Default")
os.Setenv("OPENSTACK_CA_FILE", tmpfile.Name()) os.Setenv("OPENSTACK_CA_FILE", tmpfile.Name())
if _, err := NewDesignateProvider(DomainFilter{}, true); err != nil { if _, err := NewDesignateProvider(endpoint.DomainFilter{}, true); err != nil {
t.Fatalf("Failed to initialize Designate provider: %s", err) t.Fatalf("Failed to initialize Designate provider: %s", err)
} }
} }

View File

@ -46,7 +46,7 @@ const (
type DigitalOceanProvider struct { type DigitalOceanProvider struct {
Client godo.DomainsService Client godo.DomainsService
// only consider hosted zones managing domains ending in this suffix // only consider hosted zones managing domains ending in this suffix
domainFilter DomainFilter domainFilter endpoint.DomainFilter
DryRun bool DryRun bool
} }
@ -57,7 +57,7 @@ type DigitalOceanChange struct {
} }
// NewDigitalOceanProvider initializes a new DigitalOcean DNS based Provider. // NewDigitalOceanProvider initializes a new DigitalOcean DNS based Provider.
func NewDigitalOceanProvider(ctx context.Context, domainFilter DomainFilter, dryRun bool) (*DigitalOceanProvider, error) { func NewDigitalOceanProvider(ctx context.Context, domainFilter endpoint.DomainFilter, dryRun bool) (*DigitalOceanProvider, error) {
token, ok := os.LookupEnv("DO_TOKEN") token, ok := os.LookupEnv("DO_TOKEN")
if !ok { if !ok {
return nil, fmt.Errorf("No token found") return nil, fmt.Errorf("No token found")

View File

@ -152,7 +152,7 @@ func TestNewDigitalOceanChanges(t *testing.T) {
func TestDigitalOceanZones(t *testing.T) { func TestDigitalOceanZones(t *testing.T) {
provider := &DigitalOceanProvider{ provider := &DigitalOceanProvider{
Client: &mockDigitalOceanClient{}, Client: &mockDigitalOceanClient{},
domainFilter: NewDomainFilter([]string{"com"}), domainFilter: endpoint.NewDomainFilter([]string{"com"}),
} }
zones, err := provider.Zones(context.Background()) zones, err := provider.Zones(context.Background())
@ -187,12 +187,12 @@ func TestDigitalOceanApplyChanges(t *testing.T) {
func TestNewDigitalOceanProvider(t *testing.T) { func TestNewDigitalOceanProvider(t *testing.T) {
_ = os.Setenv("DO_TOKEN", "xxxxxxxxxxxxxxxxx") _ = os.Setenv("DO_TOKEN", "xxxxxxxxxxxxxxxxx")
_, err := NewDigitalOceanProvider(context.Background(), NewDomainFilter([]string{"ext-dns-test.zalando.to."}), true) _, err := NewDigitalOceanProvider(context.Background(), endpoint.NewDomainFilter([]string{"ext-dns-test.zalando.to."}), true)
if err != nil { if err != nil {
t.Errorf("should not fail, %s", err) t.Errorf("should not fail, %s", err)
} }
_ = os.Unsetenv("DO_TOKEN") _ = os.Unsetenv("DO_TOKEN")
_, err = NewDigitalOceanProvider(context.Background(), NewDomainFilter([]string{"ext-dns-test.zalando.to."}), true) _, err = NewDigitalOceanProvider(context.Background(), endpoint.NewDomainFilter([]string{"ext-dns-test.zalando.to."}), true)
if err == nil { if err == nil {
t.Errorf("expected to fail") t.Errorf("expected to fail")
} }

View File

@ -87,7 +87,7 @@ type dnsimpleProvider struct {
client dnsimpleZoneServiceInterface client dnsimpleZoneServiceInterface
identity identityService identity identityService
accountID string accountID string
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
dryRun bool dryRun bool
} }
@ -104,7 +104,7 @@ const (
) )
// NewDnsimpleProvider initializes a new Dnsimple based provider // NewDnsimpleProvider initializes a new Dnsimple based provider
func NewDnsimpleProvider(domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool) (Provider, error) { func NewDnsimpleProvider(domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool) (Provider, error) {
oauthToken := os.Getenv("DNSIMPLE_OAUTH") oauthToken := os.Getenv("DNSIMPLE_OAUTH")
if len(oauthToken) == 0 { if len(oauthToken) == 0 {
return nil, fmt.Errorf("No dnsimple oauth token provided") return nil, fmt.Errorf("No dnsimple oauth token provided")

View File

@ -203,7 +203,7 @@ func testDnsimpleSuitableZone(t *testing.T) {
func TestNewDnsimpleProvider(t *testing.T) { func TestNewDnsimpleProvider(t *testing.T) {
os.Setenv("DNSIMPLE_OAUTH", "xxxxxxxxxxxxxxxxxxxxxxxxxx") os.Setenv("DNSIMPLE_OAUTH", "xxxxxxxxxxxxxxxxxxxxxxxxxx")
_, err := NewDnsimpleProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true) _, err := NewDnsimpleProvider(endpoint.NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true)
if err == nil { if err == nil {
t.Errorf("Expected to fail new provider on bad token") t.Errorf("Expected to fail new provider on bad token")
} }

View File

@ -56,7 +56,7 @@ func unixNow() int64 {
// DynConfig hold connection parameters to dyn.com and internal state // DynConfig hold connection parameters to dyn.com and internal state
type DynConfig struct { type DynConfig struct {
DomainFilter DomainFilter DomainFilter endpoint.DomainFilter
ZoneIDFilter ZoneIDFilter ZoneIDFilter ZoneIDFilter
DryRun bool DryRun bool
CustomerName string CustomerName string
@ -153,7 +153,7 @@ func NewDynProvider(config DynConfig) (Provider, error) {
// filterAndFixLinks removes from `links` all the records we don't care about // filterAndFixLinks removes from `links` all the records we don't care about
// and strops the /REST/ prefix // and strops the /REST/ prefix
func filterAndFixLinks(links []string, filter DomainFilter) []string { func filterAndFixLinks(links []string, filter endpoint.DomainFilter) []string {
var result []string var result []string
for _, link := range links { for _, link := range links {

View File

@ -188,7 +188,7 @@ func TestDyn_buildLinkToRecord(t *testing.T) {
provider := &dynProviderState{ provider := &dynProviderState{
DynConfig: DynConfig{ DynConfig: DynConfig{
ZoneIDFilter: NewZoneIDFilter([]string{"example.com"}), ZoneIDFilter: NewZoneIDFilter([]string{"example.com"}),
DomainFilter: NewDomainFilter([]string{"the-target.example.com"}), DomainFilter: endpoint.NewDomainFilter([]string{"the-target.example.com"}),
}, },
} }
@ -227,7 +227,7 @@ func TestDyn_filterAndFixLinks(t *testing.T) {
"/REST/NSRecord/example.com/the-target.google.com/", "/REST/NSRecord/example.com/the-target.google.com/",
"/REST/NSRecord/example.com/the-target.example.com/", "/REST/NSRecord/example.com/the-target.example.com/",
} }
filter := NewDomainFilter([]string{"example.com"}) filter := endpoint.NewDomainFilter([]string{"example.com"})
result := filterAndFixLinks(links, filter) result := filterAndFixLinks(links, filter)
// should skip non-example.com records and NS records too // should skip non-example.com records and NS records too

View File

@ -38,7 +38,7 @@ type EgoscaleClientI interface {
// ExoscaleProvider initialized as dns provider with no records // ExoscaleProvider initialized as dns provider with no records
type ExoscaleProvider struct { type ExoscaleProvider struct {
domain DomainFilter domain endpoint.DomainFilter
client EgoscaleClientI client EgoscaleClientI
filter *zoneFilter filter *zoneFilter
OnApplyChanges func(changes *plan.Changes) OnApplyChanges func(changes *plan.Changes)
@ -55,11 +55,11 @@ func NewExoscaleProvider(endpoint, apiKey, apiSecret string, dryRun bool, opts .
} }
// NewExoscaleProviderWithClient returns ExoscaleProvider DNS provider interface implementation (Client provided) // NewExoscaleProviderWithClient returns ExoscaleProvider DNS provider interface implementation (Client provided)
func NewExoscaleProviderWithClient(endpoint, apiKey, apiSecret string, client EgoscaleClientI, dryRun bool, opts ...ExoscaleOption) *ExoscaleProvider { func NewExoscaleProviderWithClient(_, apiKey, apiSecret string, client EgoscaleClientI, dryRun bool, opts ...ExoscaleOption) *ExoscaleProvider {
ep := &ExoscaleProvider{ ep := &ExoscaleProvider{
filter: &zoneFilter{}, filter: &zoneFilter{},
OnApplyChanges: func(changes *plan.Changes) {}, OnApplyChanges: func(changes *plan.Changes) {},
domain: NewDomainFilter([]string{""}), domain: endpoint.NewDomainFilter([]string{""}),
client: client, client: client,
dryRun: dryRun, dryRun: dryRun,
} }
@ -202,7 +202,7 @@ func (ep *ExoscaleProvider) Records(ctx context.Context) ([]*endpoint.Endpoint,
} }
// ExoscaleWithDomain modifies the domain on which dns zones are filtered // ExoscaleWithDomain modifies the domain on which dns zones are filtered
func ExoscaleWithDomain(domainFilter DomainFilter) ExoscaleOption { func ExoscaleWithDomain(domainFilter endpoint.DomainFilter) ExoscaleOption {
return func(p *ExoscaleProvider) { return func(p *ExoscaleProvider) {
p.domain = domainFilter p.domain = domainFilter
} }

View File

@ -107,7 +107,7 @@ type GoogleProvider struct {
// Interval between batch updates. // Interval between batch updates.
batchChangeInterval time.Duration batchChangeInterval time.Duration
// only consider hosted zones managing domains ending in this suffix // only consider hosted zones managing domains ending in this suffix
domainFilter DomainFilter domainFilter endpoint.DomainFilter
// only consider hosted zones ending with this zone id // only consider hosted zones ending with this zone id
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
// A client for managing resource record sets // A client for managing resource record sets
@ -121,7 +121,7 @@ type GoogleProvider struct {
} }
// NewGoogleProvider initializes a new Google CloudDNS based Provider. // NewGoogleProvider initializes a new Google CloudDNS based Provider.
func NewGoogleProvider(ctx context.Context, project string, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, batchChangeSize int, batchChangeInterval time.Duration, dryRun bool) (*GoogleProvider, error) { func NewGoogleProvider(ctx context.Context, project string, domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, batchChangeSize int, batchChangeInterval time.Duration, dryRun bool) (*GoogleProvider, error) {
gcloud, err := google.DefaultClient(ctx, dns.NdevClouddnsReadwriteScope) gcloud, err := google.DefaultClient(ctx, dns.NdevClouddnsReadwriteScope)
if err != nil { if err != nil {
return nil, err return nil, err
@ -180,14 +180,14 @@ func (p *GoogleProvider) Zones(ctx context.Context) (map[string]*dns.ManagedZone
return nil return nil
} }
log.Debugf("Matching zones against domain filters: %v", p.domainFilter.filters) log.Debugf("Matching zones against domain filters: %v", p.domainFilter.Filters)
if err := p.managedZonesClient.List(p.project).Pages(ctx, f); err != nil { if err := p.managedZonesClient.List(p.project).Pages(ctx, f); err != nil {
return nil, err return nil, err
} }
if len(zones) == 0 { if len(zones) == 0 {
if p.domainFilter.IsConfigured() { if p.domainFilter.IsConfigured() {
log.Warnf("No zones in the project, %s, match domain filters: %v", p.project, p.domainFilter.filters) log.Warnf("No zones in the project, %s, match domain filters: %v", p.project, p.domainFilter.Filters)
} else { } else {
log.Warnf("No zones found in the project, %s", p.project) log.Warnf("No zones found in the project, %s", p.project)
} }

View File

@ -192,7 +192,7 @@ func hasTrailingDot(target string) bool {
} }
func TestGoogleZonesIDFilter(t *testing.T) { func TestGoogleZonesIDFilter(t *testing.T) {
provider := newGoogleProviderZoneOverlap(t, NewDomainFilter([]string{"cluster.local."}), NewZoneIDFilter([]string{"10002"}), false, []*endpoint.Endpoint{}) provider := newGoogleProviderZoneOverlap(t, endpoint.NewDomainFilter([]string{"cluster.local."}), NewZoneIDFilter([]string{"10002"}), false, []*endpoint.Endpoint{})
zones, err := provider.Zones(context.Background()) zones, err := provider.Zones(context.Background())
require.NoError(t, err) require.NoError(t, err)
@ -203,7 +203,7 @@ func TestGoogleZonesIDFilter(t *testing.T) {
} }
func TestGoogleZonesNameFilter(t *testing.T) { func TestGoogleZonesNameFilter(t *testing.T) {
provider := newGoogleProviderZoneOverlap(t, NewDomainFilter([]string{"cluster.local."}), NewZoneIDFilter([]string{"internal-2"}), false, []*endpoint.Endpoint{}) provider := newGoogleProviderZoneOverlap(t, endpoint.NewDomainFilter([]string{"cluster.local."}), NewZoneIDFilter([]string{"internal-2"}), false, []*endpoint.Endpoint{})
zones, err := provider.Zones(context.Background()) zones, err := provider.Zones(context.Background())
require.NoError(t, err) require.NoError(t, err)
@ -214,7 +214,7 @@ func TestGoogleZonesNameFilter(t *testing.T) {
} }
func TestGoogleZones(t *testing.T) { func TestGoogleZones(t *testing.T) {
provider := newGoogleProvider(t, NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, []*endpoint.Endpoint{}) provider := newGoogleProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, []*endpoint.Endpoint{})
zones, err := provider.Zones(context.Background()) zones, err := provider.Zones(context.Background())
require.NoError(t, err) require.NoError(t, err)
@ -233,7 +233,7 @@ func TestGoogleRecords(t *testing.T) {
endpoint.NewEndpointWithTTL("list-test-alias.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeCNAME, endpoint.TTL(3), "foo.elb.amazonaws.com"), endpoint.NewEndpointWithTTL("list-test-alias.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeCNAME, endpoint.TTL(3), "foo.elb.amazonaws.com"),
} }
provider := newGoogleProvider(t, NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, originalEndpoints) provider := newGoogleProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, originalEndpoints)
records, err := provider.Records(context.Background()) records, err := provider.Records(context.Background())
require.NoError(t, err) require.NoError(t, err)
@ -253,7 +253,7 @@ func TestGoogleRecordsFilter(t *testing.T) {
provider := newGoogleProvider( provider := newGoogleProvider(
t, t,
NewDomainFilter([]string{ endpoint.NewDomainFilter([]string{
// our two valid zones // our two valid zones
"zone-1.ext-dns-test-2.gcp.zalan.do.", "zone-1.ext-dns-test-2.gcp.zalan.do.",
"zone-2.ext-dns-test-2.gcp.zalan.do.", "zone-2.ext-dns-test-2.gcp.zalan.do.",
@ -286,7 +286,7 @@ func TestGoogleRecordsFilter(t *testing.T) {
} }
func TestGoogleCreateRecords(t *testing.T) { func TestGoogleCreateRecords(t *testing.T) {
provider := newGoogleProvider(t, NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, []*endpoint.Endpoint{}) provider := newGoogleProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, []*endpoint.Endpoint{})
records := []*endpoint.Endpoint{ records := []*endpoint.Endpoint{
endpoint.NewEndpoint("create-test.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, "1.2.3.4"), endpoint.NewEndpoint("create-test.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, "1.2.3.4"),
@ -312,7 +312,7 @@ func TestGoogleUpdateRecords(t *testing.T) {
endpoint.NewEndpointWithTTL("update-test-ttl.zone-2.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, endpoint.TTL(15), "8.8.4.4"), endpoint.NewEndpointWithTTL("update-test-ttl.zone-2.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, endpoint.TTL(15), "8.8.4.4"),
endpoint.NewEndpointWithTTL("update-test-cname.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeCNAME, googleRecordTTL, "foo.elb.amazonaws.com"), endpoint.NewEndpointWithTTL("update-test-cname.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeCNAME, googleRecordTTL, "foo.elb.amazonaws.com"),
} }
provider := newGoogleProvider(t, NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, currentRecords) provider := newGoogleProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, currentRecords)
updatedRecords := []*endpoint.Endpoint{ updatedRecords := []*endpoint.Endpoint{
endpoint.NewEndpoint("update-test.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, "1.2.3.4"), endpoint.NewEndpoint("update-test.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, "1.2.3.4"),
endpoint.NewEndpointWithTTL("update-test-ttl.zone-2.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, endpoint.TTL(25), "4.3.2.1"), endpoint.NewEndpointWithTTL("update-test-ttl.zone-2.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, endpoint.TTL(25), "4.3.2.1"),
@ -338,7 +338,7 @@ func TestGoogleDeleteRecords(t *testing.T) {
endpoint.NewEndpointWithTTL("delete-test-cname.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeCNAME, googleRecordTTL, "baz.elb.amazonaws.com"), endpoint.NewEndpointWithTTL("delete-test-cname.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeCNAME, googleRecordTTL, "baz.elb.amazonaws.com"),
} }
provider := newGoogleProvider(t, NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, originalEndpoints) provider := newGoogleProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, originalEndpoints)
require.NoError(t, provider.DeleteRecords(originalEndpoints)) require.NoError(t, provider.DeleteRecords(originalEndpoints))
@ -351,7 +351,7 @@ func TestGoogleDeleteRecords(t *testing.T) {
func TestGoogleApplyChanges(t *testing.T) { func TestGoogleApplyChanges(t *testing.T) {
provider := newGoogleProvider( provider := newGoogleProvider(
t, t,
NewDomainFilter([]string{ endpoint.NewDomainFilter([]string{
// our two valid zones // our two valid zones
"zone-1.ext-dns-test-2.gcp.zalan.do.", "zone-1.ext-dns-test-2.gcp.zalan.do.",
"zone-2.ext-dns-test-2.gcp.zalan.do.", "zone-2.ext-dns-test-2.gcp.zalan.do.",
@ -433,7 +433,7 @@ func TestGoogleApplyChangesDryRun(t *testing.T) {
endpoint.NewEndpointWithTTL("delete-test-cname.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeCNAME, googleRecordTTL, "qux.elb.amazonaws.com"), endpoint.NewEndpointWithTTL("delete-test-cname.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeCNAME, googleRecordTTL, "qux.elb.amazonaws.com"),
} }
provider := newGoogleProvider(t, NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), true, originalEndpoints) provider := newGoogleProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), true, originalEndpoints)
createRecords := []*endpoint.Endpoint{ createRecords := []*endpoint.Endpoint{
endpoint.NewEndpoint("create-test.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, "8.8.8.8"), endpoint.NewEndpoint("create-test.zone-1.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, "8.8.8.8"),
@ -475,12 +475,12 @@ func TestGoogleApplyChangesDryRun(t *testing.T) {
} }
func TestGoogleApplyChangesEmpty(t *testing.T) { func TestGoogleApplyChangesEmpty(t *testing.T) {
provider := newGoogleProvider(t, NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, []*endpoint.Endpoint{}) provider := newGoogleProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, []*endpoint.Endpoint{})
assert.NoError(t, provider.ApplyChanges(context.Background(), &plan.Changes{})) assert.NoError(t, provider.ApplyChanges(context.Background(), &plan.Changes{}))
} }
func TestNewFilteredRecords(t *testing.T) { func TestNewFilteredRecords(t *testing.T) {
provider := newGoogleProvider(t, NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, []*endpoint.Endpoint{}) provider := newGoogleProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, []*endpoint.Endpoint{})
records := provider.newFilteredRecords([]*endpoint.Endpoint{ records := provider.newFilteredRecords([]*endpoint.Endpoint{
endpoint.NewEndpointWithTTL("update-test.zone-2.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, 1, "8.8.4.4"), endpoint.NewEndpointWithTTL("update-test.zone-2.ext-dns-test-2.gcp.zalan.do", endpoint.RecordTypeA, 1, "8.8.4.4"),
@ -670,7 +670,7 @@ func validateChangeRecord(t *testing.T, record *dns.ResourceRecordSet, expected
assert.Equal(t, expected.Type, record.Type) assert.Equal(t, expected.Type, record.Type)
} }
func newGoogleProviderZoneOverlap(t *testing.T, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, records []*endpoint.Endpoint) *GoogleProvider { func newGoogleProviderZoneOverlap(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, records []*endpoint.Endpoint) *GoogleProvider {
provider := &GoogleProvider{ provider := &GoogleProvider{
project: "zalando-external-dns-test", project: "zalando-external-dns-test",
dryRun: false, dryRun: false,
@ -705,7 +705,7 @@ func newGoogleProviderZoneOverlap(t *testing.T, domainFilter DomainFilter, zoneI
} }
func newGoogleProvider(t *testing.T, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, records []*endpoint.Endpoint) *GoogleProvider { func newGoogleProvider(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, records []*endpoint.Endpoint) *GoogleProvider {
provider := &GoogleProvider{ provider := &GoogleProvider{
project: "zalando-external-dns-test", project: "zalando-external-dns-test",
dryRun: false, dryRun: false,

View File

@ -33,7 +33,7 @@ import (
// InfobloxConfig clarifies the method signature // InfobloxConfig clarifies the method signature
type InfobloxConfig struct { type InfobloxConfig struct {
DomainFilter DomainFilter DomainFilter endpoint.DomainFilter
ZoneIDFilter ZoneIDFilter ZoneIDFilter ZoneIDFilter
Host string Host string
Port int Port int
@ -49,7 +49,7 @@ type InfobloxConfig struct {
// InfobloxProvider implements the DNS provider for Infoblox. // InfobloxProvider implements the DNS provider for Infoblox.
type InfobloxProvider struct { type InfobloxProvider struct {
client ibclient.IBConnector client ibclient.IBConnector
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
view string view string
dryRun bool dryRun bool

View File

@ -329,7 +329,7 @@ func createMockInfobloxObject(name, recordType, value string) ibclient.IBObject
return nil return nil
} }
func newInfobloxProvider(domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, client ibclient.IBConnector) *InfobloxProvider { func newInfobloxProvider(domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, client ibclient.IBConnector) *InfobloxProvider {
return &InfobloxProvider{ return &InfobloxProvider{
client: client, client: client,
domainFilter: domainFilter, domainFilter: domainFilter,
@ -354,7 +354,7 @@ func TestInfobloxRecords(t *testing.T) {
}, },
} }
provider := newInfobloxProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, &client) provider := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, &client)
actual, err := provider.Records(context.Background()) actual, err := provider.Records(context.Background())
if err != nil { if err != nil {
@ -427,7 +427,7 @@ func testInfobloxApplyChangesInternal(t *testing.T, dryRun bool, client ibclient
} }
provider := newInfobloxProvider( provider := newInfobloxProvider(
NewDomainFilter([]string{""}), endpoint.NewDomainFilter([]string{""}),
NewZoneIDFilter([]string{""}), NewZoneIDFilter([]string{""}),
dryRun, dryRun,
client, client,
@ -486,7 +486,7 @@ func TestInfobloxZones(t *testing.T) {
mockInfobloxObjects: &[]ibclient.IBObject{}, mockInfobloxObjects: &[]ibclient.IBObject{},
} }
provider := newInfobloxProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, &client) provider := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{""}), true, &client)
zones, _ := provider.zones() zones, _ := provider.zones()
var emptyZoneAuth *ibclient.ZoneAuth var emptyZoneAuth *ibclient.ZoneAuth
assert.Equal(t, provider.findZone(zones, "example.com").Fqdn, "example.com") assert.Equal(t, provider.findZone(zones, "example.com").Fqdn, "example.com")

View File

@ -43,7 +43,7 @@ var (
// InMemoryProvider - dns provider only used for testing purposes // InMemoryProvider - dns provider only used for testing purposes
// initialized as dns provider with no records // initialized as dns provider with no records
type InMemoryProvider struct { type InMemoryProvider struct {
domain DomainFilter domain endpoint.DomainFilter
client *inMemoryClient client *inMemoryClient
filter *filter filter *filter
OnApplyChanges func(ctx context.Context, changes *plan.Changes) OnApplyChanges func(ctx context.Context, changes *plan.Changes)
@ -74,7 +74,7 @@ func InMemoryWithLogging() InMemoryOption {
} }
// InMemoryWithDomain modifies the domain on which dns zones are filtered // InMemoryWithDomain modifies the domain on which dns zones are filtered
func InMemoryWithDomain(domainFilter DomainFilter) InMemoryOption { func InMemoryWithDomain(domainFilter endpoint.DomainFilter) InMemoryOption {
return func(p *InMemoryProvider) { return func(p *InMemoryProvider) {
p.domain = domainFilter p.domain = domainFilter
} }
@ -97,7 +97,7 @@ func NewInMemoryProvider(opts ...InMemoryOption) *InMemoryProvider {
filter: &filter{}, filter: &filter{},
OnApplyChanges: func(ctx context.Context, changes *plan.Changes) {}, OnApplyChanges: func(ctx context.Context, changes *plan.Changes) {},
OnRecords: func() {}, OnRecords: func() {},
domain: NewDomainFilter([]string{""}), domain: endpoint.NewDomainFilter([]string{""}),
client: newInMemoryClient(), client: newInMemoryClient(),
} }

View File

@ -44,7 +44,7 @@ type LinodeDomainClient interface {
// LinodeProvider is an implementation of Provider for Digital Ocean's DNS. // LinodeProvider is an implementation of Provider for Digital Ocean's DNS.
type LinodeProvider struct { type LinodeProvider struct {
Client LinodeDomainClient Client LinodeDomainClient
domainFilter DomainFilter domainFilter endpoint.DomainFilter
DryRun bool DryRun bool
} }
@ -75,7 +75,7 @@ type LinodeChangeDelete struct {
} }
// NewLinodeProvider initializes a new Linode DNS based Provider. // NewLinodeProvider initializes a new Linode DNS based Provider.
func NewLinodeProvider(domainFilter DomainFilter, dryRun bool, appVersion string) (*LinodeProvider, error) { func NewLinodeProvider(domainFilter endpoint.DomainFilter, dryRun bool, appVersion string) (*LinodeProvider, error) {
token, ok := os.LookupEnv("LINODE_TOKEN") token, ok := os.LookupEnv("LINODE_TOKEN")
if !ok { if !ok {
return nil, fmt.Errorf("no token found") return nil, fmt.Errorf("no token found")

View File

@ -138,11 +138,11 @@ func TestLinodeConvertRecordType(t *testing.T) {
func TestNewLinodeProvider(t *testing.T) { func TestNewLinodeProvider(t *testing.T) {
_ = os.Setenv("LINODE_TOKEN", "xxxxxxxxxxxxxxxxx") _ = os.Setenv("LINODE_TOKEN", "xxxxxxxxxxxxxxxxx")
_, err := NewLinodeProvider(NewDomainFilter([]string{"ext-dns-test.zalando.to."}), true, "1.0") _, err := NewLinodeProvider(endpoint.NewDomainFilter([]string{"ext-dns-test.zalando.to."}), true, "1.0")
require.NoError(t, err) require.NoError(t, err)
_ = os.Unsetenv("LINODE_TOKEN") _ = os.Unsetenv("LINODE_TOKEN")
_, err = NewLinodeProvider(NewDomainFilter([]string{"ext-dns-test.zalando.to."}), true, "1.0") _, err = NewLinodeProvider(endpoint.NewDomainFilter([]string{"ext-dns-test.zalando.to."}), true, "1.0")
require.Error(t, err) require.Error(t, err)
} }
@ -165,7 +165,7 @@ func TestLinodeFetchZonesNoFilters(t *testing.T) {
provider := &LinodeProvider{ provider := &LinodeProvider{
Client: &mockDomainClient, Client: &mockDomainClient,
domainFilter: NewDomainFilter([]string{}), domainFilter: endpoint.NewDomainFilter([]string{}),
DryRun: false, DryRun: false,
} }
@ -188,7 +188,7 @@ func TestLinodeFetchZonesWithFilter(t *testing.T) {
provider := &LinodeProvider{ provider := &LinodeProvider{
Client: &mockDomainClient, Client: &mockDomainClient,
domainFilter: NewDomainFilter([]string{".com"}), domainFilter: endpoint.NewDomainFilter([]string{".com"}),
DryRun: false, DryRun: false,
} }
@ -228,7 +228,7 @@ func TestLinodeRecords(t *testing.T) {
provider := &LinodeProvider{ provider := &LinodeProvider{
Client: &mockDomainClient, Client: &mockDomainClient,
domainFilter: NewDomainFilter([]string{}), domainFilter: endpoint.NewDomainFilter([]string{}),
DryRun: false, DryRun: false,
} }
@ -278,7 +278,7 @@ func TestLinodeApplyChanges(t *testing.T) {
provider := &LinodeProvider{ provider := &LinodeProvider{
Client: &mockDomainClient, Client: &mockDomainClient,
domainFilter: NewDomainFilter([]string{}), domainFilter: endpoint.NewDomainFilter([]string{}),
DryRun: false, DryRun: false,
} }
@ -389,7 +389,7 @@ func TestLinodeApplyChangesTargetAdded(t *testing.T) {
provider := &LinodeProvider{ provider := &LinodeProvider{
Client: &mockDomainClient, Client: &mockDomainClient,
domainFilter: NewDomainFilter([]string{}), domainFilter: endpoint.NewDomainFilter([]string{}),
DryRun: false, DryRun: false,
} }
@ -448,7 +448,7 @@ func TestLinodeApplyChangesTargetRemoved(t *testing.T) {
provider := &LinodeProvider{ provider := &LinodeProvider{
Client: &mockDomainClient, Client: &mockDomainClient,
domainFilter: NewDomainFilter([]string{}), domainFilter: endpoint.NewDomainFilter([]string{}),
DryRun: false, DryRun: false,
} }
@ -504,7 +504,7 @@ func TestLinodeApplyChangesNoChanges(t *testing.T) {
provider := &LinodeProvider{ provider := &LinodeProvider{
Client: &mockDomainClient, Client: &mockDomainClient,
domainFilter: NewDomainFilter([]string{}), domainFilter: endpoint.NewDomainFilter([]string{}),
DryRun: false, DryRun: false,
} }

View File

@ -84,7 +84,7 @@ func (n NS1DomainService) ListZones() ([]*dns.Zone, *http.Response, error) {
// NS1Config passes cli args to the NS1Provider // NS1Config passes cli args to the NS1Provider
type NS1Config struct { type NS1Config struct {
DomainFilter DomainFilter DomainFilter endpoint.DomainFilter
ZoneIDFilter ZoneIDFilter ZoneIDFilter ZoneIDFilter
NS1Endpoint string NS1Endpoint string
NS1IgnoreSSL bool NS1IgnoreSSL bool
@ -94,7 +94,7 @@ type NS1Config struct {
// NS1Provider is the NS1 provider // NS1Provider is the NS1 provider
type NS1Provider struct { type NS1Provider struct {
client NS1DomainClient client NS1DomainClient
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
dryRun bool dryRun bool
} }

View File

@ -129,7 +129,7 @@ func (m *MockNS1ListZonesFail) ListZones() ([]*dns.Zone, *http.Response, error)
func TestNS1Records(t *testing.T) { func TestNS1Records(t *testing.T) {
provider := &NS1Provider{ provider := &NS1Provider{
client: &MockNS1DomainClient{}, client: &MockNS1DomainClient{},
domainFilter: NewDomainFilter([]string{"foo.com."}), domainFilter: endpoint.NewDomainFilter([]string{"foo.com."}),
zoneIDFilter: NewZoneIDFilter([]string{""}), zoneIDFilter: NewZoneIDFilter([]string{""}),
} }
ctx := context.Background() ctx := context.Background()
@ -150,7 +150,7 @@ func TestNS1Records(t *testing.T) {
func TestNewNS1Provider(t *testing.T) { func TestNewNS1Provider(t *testing.T) {
_ = os.Setenv("NS1_APIKEY", "xxxxxxxxxxxxxxxxx") _ = os.Setenv("NS1_APIKEY", "xxxxxxxxxxxxxxxxx")
testNS1Config := NS1Config{ testNS1Config := NS1Config{
DomainFilter: NewDomainFilter([]string{"foo.com."}), DomainFilter: endpoint.NewDomainFilter([]string{"foo.com."}),
ZoneIDFilter: NewZoneIDFilter([]string{""}), ZoneIDFilter: NewZoneIDFilter([]string{""}),
DryRun: false, DryRun: false,
} }
@ -165,7 +165,7 @@ func TestNewNS1Provider(t *testing.T) {
func TestNS1Zones(t *testing.T) { func TestNS1Zones(t *testing.T) {
provider := &NS1Provider{ provider := &NS1Provider{
client: &MockNS1DomainClient{}, client: &MockNS1DomainClient{},
domainFilter: NewDomainFilter([]string{"foo.com."}), domainFilter: endpoint.NewDomainFilter([]string{"foo.com."}),
zoneIDFilter: NewZoneIDFilter([]string{""}), zoneIDFilter: NewZoneIDFilter([]string{""}),
} }

View File

@ -55,7 +55,7 @@ type OCIProvider struct {
client ociDNSClient client ociDNSClient
cfg OCIConfig cfg OCIConfig
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
dryRun bool dryRun bool
} }
@ -83,7 +83,7 @@ func LoadOCIConfig(path string) (*OCIConfig, error) {
} }
// NewOCIProvider initialises a new OCI DNS based Provider. // NewOCIProvider initialises a new OCI DNS based Provider.
func NewOCIProvider(cfg OCIConfig, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool) (*OCIProvider, error) { func NewOCIProvider(cfg OCIConfig, domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool) (*OCIProvider, error) {
var client ociDNSClient var client ociDNSClient
client, err := dns.NewDnsClientWithConfigurationProvider(common.NewRawConfigurationProvider( client, err := dns.NewDnsClientWithConfigurationProvider(common.NewRawConfigurationProvider(
cfg.Auth.TenancyID, cfg.Auth.TenancyID,
@ -109,7 +109,7 @@ func NewOCIProvider(cfg OCIConfig, domainFilter DomainFilter, zoneIDFilter ZoneI
func (p *OCIProvider) zones(ctx context.Context) (map[string]dns.ZoneSummary, error) { func (p *OCIProvider) zones(ctx context.Context) (map[string]dns.ZoneSummary, error) {
zones := make(map[string]dns.ZoneSummary) zones := make(map[string]dns.ZoneSummary)
log.Debugf("Matching zones against domain filters: %v", p.domainFilter.filters) log.Debugf("Matching zones against domain filters: %v", p.domainFilter.Filters)
var page *string var page *string
for { for {
resp, err := p.client.ListZones(ctx, dns.ListZonesRequest{ resp, err := p.client.ListZones(ctx, dns.ListZonesRequest{
@ -137,7 +137,7 @@ func (p *OCIProvider) zones(ctx context.Context) (map[string]dns.ZoneSummary, er
if len(zones) == 0 { if len(zones) == 0 {
if p.domainFilter.IsConfigured() { if p.domainFilter.IsConfigured() {
log.Warnf("No zones in compartment %q match domain filters %v", p.cfg.CompartmentID, p.domainFilter.filters) log.Warnf("No zones in compartment %q match domain filters %v", p.cfg.CompartmentID, p.domainFilter.Filters)
} else { } else {
log.Warnf("No zones found in compartment %q", p.cfg.CompartmentID) log.Warnf("No zones found in compartment %q", p.cfg.CompartmentID)
} }

View File

@ -100,7 +100,7 @@ func (c *mockOCIDNSClient) PatchZoneRecords(ctx context.Context, request dns.Pat
} }
// newOCIProvider creates an OCI provider with API calls mocked out. // newOCIProvider creates an OCI provider with API calls mocked out.
func newOCIProvider(client ociDNSClient, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool) *OCIProvider { func newOCIProvider(client ociDNSClient, domainFilter endpoint.DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool) *OCIProvider {
return &OCIProvider{ return &OCIProvider{
client: client, client: client,
cfg: OCIConfig{ cfg: OCIConfig{
@ -183,7 +183,7 @@ hKRtDhmSdWBo3tJK12RrAe4t7CUe8gMgTvU7ExlcA3xQkseFPx9K
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {
_, err := NewOCIProvider( _, err := NewOCIProvider(
tc.config, tc.config,
NewDomainFilter([]string{"com"}), endpoint.NewDomainFilter([]string{"com"}),
NewZoneIDFilter([]string{""}), NewZoneIDFilter([]string{""}),
false, false,
) )
@ -199,13 +199,13 @@ hKRtDhmSdWBo3tJK12RrAe4t7CUe8gMgTvU7ExlcA3xQkseFPx9K
func TestOCIZones(t *testing.T) { func TestOCIZones(t *testing.T) {
testCases := []struct { testCases := []struct {
name string name string
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
expected map[string]dns.ZoneSummary expected map[string]dns.ZoneSummary
}{ }{
{ {
name: "DomainFilter_com", name: "DomainFilter_com",
domainFilter: NewDomainFilter([]string{"com"}), domainFilter: endpoint.NewDomainFilter([]string{"com"}),
zoneIDFilter: NewZoneIDFilter([]string{""}), zoneIDFilter: NewZoneIDFilter([]string{""}),
expected: map[string]dns.ZoneSummary{ expected: map[string]dns.ZoneSummary{
"foo.com": { "foo.com": {
@ -219,7 +219,7 @@ func TestOCIZones(t *testing.T) {
}, },
}, { }, {
name: "DomainFilter_foo.com", name: "DomainFilter_foo.com",
domainFilter: NewDomainFilter([]string{"foo.com"}), domainFilter: endpoint.NewDomainFilter([]string{"foo.com"}),
zoneIDFilter: NewZoneIDFilter([]string{""}), zoneIDFilter: NewZoneIDFilter([]string{""}),
expected: map[string]dns.ZoneSummary{ expected: map[string]dns.ZoneSummary{
"foo.com": { "foo.com": {
@ -229,7 +229,7 @@ func TestOCIZones(t *testing.T) {
}, },
}, { }, {
name: "ZoneIDFilter_ocid1.dns-zone.oc1..e1e042ef0bfbb5c251b9713fd7bf8959", name: "ZoneIDFilter_ocid1.dns-zone.oc1..e1e042ef0bfbb5c251b9713fd7bf8959",
domainFilter: NewDomainFilter([]string{""}), domainFilter: endpoint.NewDomainFilter([]string{""}),
zoneIDFilter: NewZoneIDFilter([]string{"ocid1.dns-zone.oc1..e1e042ef0bfbb5c251b9713fd7bf8959"}), zoneIDFilter: NewZoneIDFilter([]string{"ocid1.dns-zone.oc1..e1e042ef0bfbb5c251b9713fd7bf8959"}),
expected: map[string]dns.ZoneSummary{ expected: map[string]dns.ZoneSummary{
"foo.com": { "foo.com": {
@ -252,13 +252,13 @@ func TestOCIZones(t *testing.T) {
func TestOCIRecords(t *testing.T) { func TestOCIRecords(t *testing.T) {
testCases := []struct { testCases := []struct {
name string name string
domainFilter DomainFilter domainFilter endpoint.DomainFilter
zoneIDFilter ZoneIDFilter zoneIDFilter ZoneIDFilter
expected []*endpoint.Endpoint expected []*endpoint.Endpoint
}{ }{
{ {
name: "unfiltered", name: "unfiltered",
domainFilter: NewDomainFilter([]string{""}), domainFilter: endpoint.NewDomainFilter([]string{""}),
zoneIDFilter: NewZoneIDFilter([]string{""}), zoneIDFilter: NewZoneIDFilter([]string{""}),
expected: []*endpoint.Endpoint{ expected: []*endpoint.Endpoint{
endpoint.NewEndpointWithTTL("foo.foo.com", endpoint.RecordTypeA, endpoint.TTL(ociRecordTTL), "127.0.0.1"), endpoint.NewEndpointWithTTL("foo.foo.com", endpoint.RecordTypeA, endpoint.TTL(ociRecordTTL), "127.0.0.1"),
@ -268,7 +268,7 @@ func TestOCIRecords(t *testing.T) {
}, },
}, { }, {
name: "DomainFilter_foo.com", name: "DomainFilter_foo.com",
domainFilter: NewDomainFilter([]string{"foo.com"}), domainFilter: endpoint.NewDomainFilter([]string{"foo.com"}),
zoneIDFilter: NewZoneIDFilter([]string{""}), zoneIDFilter: NewZoneIDFilter([]string{""}),
expected: []*endpoint.Endpoint{ expected: []*endpoint.Endpoint{
endpoint.NewEndpointWithTTL("foo.foo.com", endpoint.RecordTypeA, endpoint.TTL(ociRecordTTL), "127.0.0.1"), endpoint.NewEndpointWithTTL("foo.foo.com", endpoint.RecordTypeA, endpoint.TTL(ociRecordTTL), "127.0.0.1"),
@ -277,7 +277,7 @@ func TestOCIRecords(t *testing.T) {
}, },
}, { }, {
name: "ZoneIDFilter_ocid1.dns-zone.oc1..502aeddba262b92fd13ed7874f6f1404", name: "ZoneIDFilter_ocid1.dns-zone.oc1..502aeddba262b92fd13ed7874f6f1404",
domainFilter: NewDomainFilter([]string{""}), domainFilter: endpoint.NewDomainFilter([]string{""}),
zoneIDFilter: NewZoneIDFilter([]string{"ocid1.dns-zone.oc1..502aeddba262b92fd13ed7874f6f1404"}), zoneIDFilter: NewZoneIDFilter([]string{"ocid1.dns-zone.oc1..502aeddba262b92fd13ed7874f6f1404"}),
expected: []*endpoint.Endpoint{ expected: []*endpoint.Endpoint{
endpoint.NewEndpointWithTTL("foo.bar.com", endpoint.RecordTypeA, endpoint.TTL(ociRecordTTL), "127.0.0.1"), endpoint.NewEndpointWithTTL("foo.bar.com", endpoint.RecordTypeA, endpoint.TTL(ociRecordTTL), "127.0.0.1"),
@ -825,7 +825,7 @@ func TestOCIApplyChanges(t *testing.T) {
client := newMutableMockOCIDNSClient(tc.zones, tc.records) client := newMutableMockOCIDNSClient(tc.zones, tc.records)
provider := newOCIProvider( provider := newOCIProvider(
client, client,
NewDomainFilter([]string{""}), endpoint.NewDomainFilter([]string{""}),
NewZoneIDFilter([]string{""}), NewZoneIDFilter([]string{""}),
tc.dryRun, tc.dryRun,
) )

View File

@ -62,7 +62,7 @@ const (
// PDNSConfig is comprised of the fields necessary to create a new PDNSProvider // PDNSConfig is comprised of the fields necessary to create a new PDNSProvider
type PDNSConfig struct { type PDNSConfig struct {
DomainFilter DomainFilter DomainFilter endpoint.DomainFilter
DryRun bool DryRun bool
Server string Server string
APIKey string APIKey string
@ -142,7 +142,7 @@ type PDNSAPIClient struct {
dryRun bool dryRun bool
authCtx context.Context authCtx context.Context
client *pgo.APIClient client *pgo.APIClient
domainFilter DomainFilter domainFilter endpoint.DomainFilter
} }
// ListZones : Method returns all enabled zones from PowerDNS // ListZones : Method returns all enabled zones from PowerDNS

View File

@ -476,21 +476,21 @@ var (
}, },
} }
DomainFilterListSingle = DomainFilter{ DomainFilterListSingle = endpoint.DomainFilter{
filters: []string{ Filters: []string{
"example.com", "example.com",
}, },
} }
DomainFilterListMultiple = DomainFilter{ DomainFilterListMultiple = endpoint.DomainFilter{
filters: []string{ Filters: []string{
"example.com", "example.com",
"mock.com", "mock.com",
}, },
} }
DomainFilterListEmpty = DomainFilter{ DomainFilterListEmpty = endpoint.DomainFilter{
filters: []string{}, Filters: []string{},
} }
DomainFilterEmptyClient = &PDNSAPIClient{ DomainFilterEmptyClient = &PDNSAPIClient{
@ -643,7 +643,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreate() {
context.Background(), context.Background(),
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
}) })
assert.Error(suite.T(), err, "--pdns-api-key should be specified") assert.Error(suite.T(), err, "--pdns-api-key should be specified")
@ -652,7 +652,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreate() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{"example.com", "example.org"}), DomainFilter: endpoint.NewDomainFilter([]string{"example.com", "example.org"}),
}) })
assert.Nil(suite.T(), err, "--domain-filter should raise no error") assert.Nil(suite.T(), err, "--domain-filter should raise no error")
@ -661,7 +661,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreate() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
DryRun: true, DryRun: true,
}) })
assert.Error(suite.T(), err, "--dry-run should raise an error") assert.Error(suite.T(), err, "--dry-run should raise an error")
@ -672,7 +672,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreate() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
}) })
assert.Nil(suite.T(), err, "Regular case should raise no error") assert.Nil(suite.T(), err, "Regular case should raise no error")
} }
@ -684,7 +684,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreateTLS() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
}) })
assert.Nil(suite.T(), err, "Omitted TLS Config case should raise no error") assert.Nil(suite.T(), err, "Omitted TLS Config case should raise no error")
@ -693,7 +693,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreateTLS() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
TLSConfig: TLSConfig{ TLSConfig: TLSConfig{
TLSEnabled: false, TLSEnabled: false,
}, },
@ -705,7 +705,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreateTLS() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
TLSConfig: TLSConfig{ TLSConfig: TLSConfig{
TLSEnabled: false, TLSEnabled: false,
CAFilePath: "/path/to/ca.crt", CAFilePath: "/path/to/ca.crt",
@ -720,7 +720,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreateTLS() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
TLSConfig: TLSConfig{ TLSConfig: TLSConfig{
TLSEnabled: true, TLSEnabled: true,
}, },
@ -732,7 +732,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreateTLS() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
TLSConfig: TLSConfig{ TLSConfig: TLSConfig{
TLSEnabled: true, TLSEnabled: true,
CAFilePath: "../internal/testresources/ca.pem", CAFilePath: "../internal/testresources/ca.pem",
@ -745,7 +745,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreateTLS() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
TLSConfig: TLSConfig{ TLSConfig: TLSConfig{
TLSEnabled: true, TLSEnabled: true,
CAFilePath: "../internal/testresources/ca.pem", CAFilePath: "../internal/testresources/ca.pem",
@ -759,7 +759,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreateTLS() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
TLSConfig: TLSConfig{ TLSConfig: TLSConfig{
TLSEnabled: true, TLSEnabled: true,
CAFilePath: "../internal/testresources/ca.pem", CAFilePath: "../internal/testresources/ca.pem",
@ -773,7 +773,7 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreateTLS() {
PDNSConfig{ PDNSConfig{
Server: "http://localhost:8081", Server: "http://localhost:8081",
APIKey: "foo", APIKey: "foo",
DomainFilter: NewDomainFilter([]string{""}), DomainFilter: endpoint.NewDomainFilter([]string{""}),
TLSConfig: TLSConfig{ TLSConfig: TLSConfig{
TLSEnabled: true, TLSEnabled: true,
CAFilePath: "../internal/testresources/ca.pem", CAFilePath: "../internal/testresources/ca.pem",

View File

@ -34,7 +34,7 @@ import (
type RcodeZeroProvider struct { type RcodeZeroProvider struct {
Client *rc0.Client Client *rc0.Client
DomainFilter DomainFilter DomainFilter endpoint.DomainFilter
DryRun bool DryRun bool
TXTEncrypt bool TXTEncrypt bool
Key []byte Key []byte
@ -43,7 +43,7 @@ type RcodeZeroProvider struct {
// NewRcodeZeroProvider creates a new RcodeZero Anycast DNS provider. // NewRcodeZeroProvider creates a new RcodeZero Anycast DNS provider.
// //
// Returns the provider or an error if a provider could not be created. // Returns the provider or an error if a provider could not be created.
func NewRcodeZeroProvider(domainFilter DomainFilter, dryRun bool, txtEnc bool) (*RcodeZeroProvider, error) { func NewRcodeZeroProvider(domainFilter endpoint.DomainFilter, dryRun bool, txtEnc bool) (*RcodeZeroProvider, error) {
client, err := rc0.NewClient(os.Getenv("RC0_API_KEY")) client, err := rc0.NewClient(os.Getenv("RC0_API_KEY"))

View File

@ -92,7 +92,7 @@ func TestRcodeZeroProvider_ApplyChanges(t *testing.T) {
Zones: mockZoneManagementService, Zones: mockZoneManagementService,
RRSet: mockRRSetService, RRSet: mockRRSetService,
}), }),
DomainFilter: NewDomainFilter([]string{testZoneOne}), DomainFilter: endpoint.NewDomainFilter([]string{testZoneOne}),
} }
changes := mockChanges() changes := mockChanges()
@ -154,7 +154,7 @@ func Test_submitChanges(t *testing.T) {
Zones: mockZoneManagementService, Zones: mockZoneManagementService,
RRSet: mockRRSetService, RRSet: mockRRSetService,
}), }),
DomainFilter: NewDomainFilter([]string{testZoneOne}), DomainFilter: endpoint.NewDomainFilter([]string{testZoneOne}),
} }
changes := mockRRSetChanges(rrsetChangesUnsupportedChangeType) changes := mockRRSetChanges(rrsetChangesUnsupportedChangeType)
@ -235,7 +235,7 @@ func TestRcodeZeroProvider_Zones(t *testing.T) {
func TestNewRcodeZeroProvider(t *testing.T) { func TestNewRcodeZeroProvider(t *testing.T) {
_ = os.Setenv("RC0_API_KEY", "123") _ = os.Setenv("RC0_API_KEY", "123")
p, err := NewRcodeZeroProvider(NewDomainFilter([]string{"ext-dns-test." + testZoneOne + "."}), true, true) p, err := NewRcodeZeroProvider(endpoint.NewDomainFilter([]string{"ext-dns-test." + testZoneOne + "."}), true, true)
if err != nil { if err != nil {
t.Errorf("should not fail, %s", err) t.Errorf("should not fail, %s", err)
@ -246,7 +246,7 @@ func TestNewRcodeZeroProvider(t *testing.T) {
require.Equal(t, true, p.DomainFilter.IsConfigured()) require.Equal(t, true, p.DomainFilter.IsConfigured())
require.Equal(t, false, p.DomainFilter.Match("ext-dns-test."+testZoneTwo+".")) // filter is set, so it should match only provided domains require.Equal(t, false, p.DomainFilter.Match("ext-dns-test."+testZoneTwo+".")) // filter is set, so it should match only provided domains
p, err = NewRcodeZeroProvider(DomainFilter{}, false, false) p, err = NewRcodeZeroProvider(endpoint.DomainFilter{}, false, false)
if err != nil { if err != nil {
t.Errorf("should not fail, %s", err) t.Errorf("should not fail, %s", err)
@ -257,7 +257,7 @@ func TestNewRcodeZeroProvider(t *testing.T) {
require.Equal(t, true, p.DomainFilter.Match("ext-dns-test."+testZoneOne+".")) // filter is not set, so it should match any require.Equal(t, true, p.DomainFilter.Match("ext-dns-test."+testZoneOne+".")) // filter is not set, so it should match any
_ = os.Unsetenv("RC0_API_KEY") _ = os.Unsetenv("RC0_API_KEY")
_, err = NewRcodeZeroProvider(DomainFilter{}, false, false) _, err = NewRcodeZeroProvider(endpoint.DomainFilter{}, false, false)
if err == nil { if err == nil {
t.Errorf("expected to fail") t.Errorf("expected to fail")

View File

@ -59,7 +59,7 @@ type RDNSClient interface {
// RDNSConfig contains configuration to create a new Rancher DNS(RDNS) provider. // RDNSConfig contains configuration to create a new Rancher DNS(RDNS) provider.
type RDNSConfig struct { type RDNSConfig struct {
DryRun bool DryRun bool
DomainFilter DomainFilter DomainFilter endpoint.DomainFilter
RootDomain string RootDomain string
} }
@ -67,7 +67,7 @@ type RDNSConfig struct {
type RDNSProvider struct { type RDNSProvider struct {
client RDNSClient client RDNSClient
dryRun bool dryRun bool
domainFilter DomainFilter domainFilter endpoint.DomainFilter
rootDomain string rootDomain string
} }

View File

@ -44,7 +44,7 @@ type rfc2136Provider struct {
minTTL time.Duration minTTL time.Duration
// only consider hosted zones managing domains ending in this suffix // only consider hosted zones managing domains ending in this suffix
domainFilter DomainFilter domainFilter endpoint.DomainFilter
dryRun bool dryRun bool
actions rfc2136Actions actions rfc2136Actions
} }
@ -65,7 +65,7 @@ type rfc2136Actions interface {
} }
// NewRfc2136Provider is a factory function for OpenStack rfc2136 providers // NewRfc2136Provider is a factory function for OpenStack rfc2136 providers
func NewRfc2136Provider(host string, port int, zoneName string, insecure bool, keyName string, secret string, secretAlg string, axfr bool, domainFilter DomainFilter, dryRun bool, minTTL time.Duration, actions rfc2136Actions) (Provider, error) { func NewRfc2136Provider(host string, port int, zoneName string, insecure bool, keyName string, secret string, secretAlg string, axfr bool, domainFilter endpoint.DomainFilter, dryRun bool, minTTL time.Duration, actions rfc2136Actions) (Provider, error) {
secretAlgChecked, ok := tsigAlgs[secretAlg] secretAlgChecked, ok := tsigAlgs[secretAlg]
if !ok && !insecure { if !ok && !insecure {
return nil, errors.Errorf("%s is not supported TSIG algorithm", secretAlg) return nil, errors.Errorf("%s is not supported TSIG algorithm", secretAlg)

View File

@ -94,7 +94,7 @@ func (r *rfc2136Stub) IncomeTransfer(m *dns.Msg, a string) (env chan *dns.Envelo
} }
func createRfc2136StubProvider(stub *rfc2136Stub) (Provider, error) { func createRfc2136StubProvider(stub *rfc2136Stub) (Provider, error) {
return NewRfc2136Provider("", 0, "", false, "key", "secret", "hmac-sha512", true, DomainFilter{}, false, 300*time.Second, stub) return NewRfc2136Provider("", 0, "", false, "key", "secret", "hmac-sha512", true, endpoint.DomainFilter{}, false, 300*time.Second, stub)
} }
func extractAuthoritySectionFromMessage(msg fmt.Stringer) []string { func extractAuthoritySectionFromMessage(msg fmt.Stringer) []string {

View File

@ -23,12 +23,12 @@ const (
// TransIPProvider is an implementation of Provider for TransIP. // TransIPProvider is an implementation of Provider for TransIP.
type TransIPProvider struct { type TransIPProvider struct {
client gotransip.SOAPClient client gotransip.SOAPClient
domainFilter DomainFilter domainFilter endpoint.DomainFilter
dryRun bool dryRun bool
} }
// NewTransIPProvider initializes a new TransIP Provider. // NewTransIPProvider initializes a new TransIP Provider.
func NewTransIPProvider(accountName, privateKeyFile string, domainFilter DomainFilter, dryRun bool) (*TransIPProvider, error) { func NewTransIPProvider(accountName, privateKeyFile string, domainFilter endpoint.DomainFilter, dryRun bool) (*TransIPProvider, error) {
// check given arguments // check given arguments
if accountName == "" { if accountName == "" {
return nil, errors.New("required --transip-account not set") return nil, errors.New("required --transip-account not set")

View File

@ -49,7 +49,7 @@ type vinyldnsZoneInterface interface {
type vinyldnsProvider struct { type vinyldnsProvider struct {
client vinyldnsZoneInterface client vinyldnsZoneInterface
zoneFilter ZoneIDFilter zoneFilter ZoneIDFilter
domainFilter DomainFilter domainFilter endpoint.DomainFilter
dryRun bool dryRun bool
} }
@ -59,7 +59,7 @@ type vinyldnsChange struct {
} }
// NewVinylDNSProvider provides support for VinylDNS records // NewVinylDNSProvider provides support for VinylDNS records
func NewVinylDNSProvider(domainFilter DomainFilter, zoneFilter ZoneIDFilter, dryRun bool) (Provider, error) { func NewVinylDNSProvider(domainFilter endpoint.DomainFilter, zoneFilter ZoneIDFilter, dryRun bool) (Provider, error) {
_, ok := os.LookupEnv("VINYLDNS_ACCESS_KEY") _, ok := os.LookupEnv("VINYLDNS_ACCESS_KEY")
if !ok { if !ok {
return nil, fmt.Errorf("no vinyldns access key found") return nil, fmt.Errorf("no vinyldns access key found")

View File

@ -92,7 +92,7 @@ func TestVinylDNSServices(t *testing.T) {
func testVinylDNSProviderRecords(t *testing.T) { func testVinylDNSProviderRecords(t *testing.T) {
ctx := context.Background() ctx := context.Background()
mockVinylDNSProvider.domainFilter = NewDomainFilter([]string{"example.com"}) mockVinylDNSProvider.domainFilter = endpoint.NewDomainFilter([]string{"example.com"})
result, err := mockVinylDNSProvider.Records(ctx) result, err := mockVinylDNSProvider.Records(ctx)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(vinylDNSRecords), len(result)) assert.Equal(t, len(vinylDNSRecords), len(result))
@ -134,11 +134,11 @@ func testVinylDNSSuitableZone(t *testing.T) {
func TestNewVinylDNSProvider(t *testing.T) { func TestNewVinylDNSProvider(t *testing.T) {
os.Setenv("VINYLDNS_ACCESS_KEY", "xxxxxxxxxxxxxxxxxxxxxxxxxx") os.Setenv("VINYLDNS_ACCESS_KEY", "xxxxxxxxxxxxxxxxxxxxxxxxxx")
_, err := NewVinylDNSProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{"0"}), true) _, err := NewVinylDNSProvider(endpoint.NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{"0"}), true)
assert.Nil(t, err) assert.Nil(t, err)
os.Unsetenv("VINYLDNS_ACCESS_KEY") os.Unsetenv("VINYLDNS_ACCESS_KEY")
_, err = NewVinylDNSProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{"0"}), true) _, err = NewVinylDNSProvider(endpoint.NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{"0"}), true)
assert.NotNil(t, err) assert.NotNil(t, err)
if err == nil { if err == nil {
t.Errorf("Expected to fail new provider on empty token") t.Errorf("Expected to fail new provider on empty token")