Unverified Commit ec7c6ba4 authored by Kubernetes Prow Robot's avatar Kubernetes Prow Robot Committed by GitHub
Browse files

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

Change DomainFilter to apply to records as well
parents 1e7c6002 14d64e09
master Raffo-patch-1 changelog-for-v0.7.3 correctly-update-aws-records-when-type-changes dansimone/support-prefer-ingress-annotations dependabot/go_modules/github.com/Azure/azure-sdk-for-go-61.4.0incompatible dependabot/go_modules/github.com/aliyun/alibaba-cloud-sdk-go-1.61.1473 dependabot/go_modules/github.com/exoscale/egoscale-1.19.0 dependabot/go_modules/github.com/projectcontour/contour-1.20.0 dependabot/go_modules/k8s.io/apimachinery-0.23.3 fix-1820 gh-pages infoblox-multiple-A-records-fix njuettner/go_modules/github.com/akamai/AkamaiOPEN-edgegrid-golang-0.9.11 njuettner/go_modules/github.com/alecthomas/kingpin-2.2.6incompatible njuettner/go_modules/github.com/digitalocean/godo-1.34.0 njuettner/go_modules/github.com/pkg/errors-0.9.1 njuettner/go_modules/github.com/prometheus/client_golang-1.5.1 normalize raffo-fix-2348 raffo/add-dependabot raffo/add-kustomize-base raffo/add-trivy-scanning raffo/arm raffo/arm32v7 raffo/bump-ci-timeout raffo/bump-cloudbuild-timeout raffo/bump-deps-sec raffo/bump-kustomize raffo/bump-kustomize-1 raffo/bump-kustomize-version-0.7.5 raffo/bump-modules raffo/codeQL raffo/drop-the-changelog raffo/e2e-aws raffo/edit-infoblox-maintainers raffo/fix-1820 raffo/fix-1936 raffo/fix-build raffo/fix-dependabot raffo/fix-ns-deletion raffo/fix-scaleway-security raffo/fix-that-typo raffo/fix-trivy raffo/fix-trivy-again raffo/fix-vulnerabilities raffo/goarm raffo/gpr-docker-image raffo/knolog raffo/kustomize-endpoints raffo/multiarch raffo/multiarch-docs raffo/new-ingress-resource raffo/new-maintainers raffo/provider-structure-refactor raffo/release-conventions raffo/release-note-patch raffo/release-script raffo/release-script-update raffo/release-v0.7.2 raffo/remove-azure-test raffo/remove-broken-link raffo/remove-masters raffo/revert-tzdata raffo/split-sources raffo/update-kustomize-080 raffo/update-v0.10-role raffo/use-actions raffo/v0.7.6 sagor999/infoblox-multiple-A-records test-things validate-txt-prefix v1.0.0-mf v0.10.2 v0.10.1 v0.10.0 v0.9.0 v0.8.0 v0.7.6 v0.7.5 v0.7.4 v0.7.3 v0.7.2 v0.7.1 v0.7.0 external-dns-helm-chart-1.7.1 external-dns-helm-chart-1.7.0 external-dns-helm-chart-1.6.0 external-dns-helm-chart-1.5.0 external-dns-helm-chart-1.4.1 external-dns-helm-chart-1.4.0 external-dns-helm-chart-1.3.2 external-dns-helm-chart-1.3.1 external-dns-helm-chart-1.3.0 external-dns-helm-chart-1.2.0
No related merge requests found
Showing with 168 additions and 82 deletions
+168 -82
...@@ -23,6 +23,7 @@ import ( ...@@ -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 { ...@@ -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.
...@@ -123,9 +126,10 @@ func (c *Controller) RunOnce(ctx context.Context) error { ...@@ -123,9 +126,10 @@ func (c *Controller) RunOnce(ctx context.Context) error {
sourceEndpointsTotal.Set(float64(len(endpoints))) sourceEndpointsTotal.Set(float64(len(endpoints)))
plan := &plan.Plan{ plan := &plan.Plan{
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()
......
...@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and ...@@ -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 ( ...@@ -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 { ...@@ -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 { ...@@ -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
} }
...@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and ...@@ -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"
......
...@@ -30,6 +30,7 @@ import ( ...@@ -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() { ...@@ -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)
...@@ -285,10 +286,11 @@ func main() { ...@@ -285,10 +286,11 @@ func main() {
} }
ctrl := controller.Controller{ ctrl := controller.Controller{
Source: endpointsSource, Source: endpointsSource,
Registry: r, Registry: r,
Policy: policy, Policy: policy,
Interval: cfg.Interval, Interval: cfg.Interval,
DomainFilter: domainFilter,
} }
if cfg.UpdateEvents { if cfg.UpdateEvents {
......
...@@ -35,6 +35,8 @@ type Plan struct { ...@@ -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) { ...@@ -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 { ...@@ -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 {
......
...@@ -42,6 +42,10 @@ type PlanTestSuite struct { ...@@ -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() { ...@@ -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() { ...@@ -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))
} }
......
...@@ -49,7 +49,7 @@ func (*akamaiOpenClient) Do(config edgegrid.Config, req *http.Request) (*http.Re ...@@ -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 { ...@@ -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
......
...@@ -108,7 +108,7 @@ func TestFetchZonesZoneIDFilter(t *testing.T) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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{}
......
...@@ -66,7 +66,7 @@ type AlibabaCloudPrivateZoneAPI interface { ...@@ -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 { ...@@ -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) { ...@@ -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) { ...@@ -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 ...@@ -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
......
...@@ -22,6 +22,7 @@ import ( ...@@ -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 { ...@@ -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,
......
...@@ -117,7 +117,7 @@ type AWSProvider struct { ...@@ -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 { ...@@ -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
......
...@@ -76,13 +76,13 @@ type AWSSDProvider struct { ...@@ -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(
......
...@@ -180,7 +180,7 @@ func (s *AWSSDClientStub) UpdateService(input *sd.UpdateServiceInput) (*sd.Updat ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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"))
......
...@@ -299,7 +299,7 @@ func TestAWSZones(t *testing.T) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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 ...@@ -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) { ...@@ -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) { ...@@ -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{
......
...@@ -66,7 +66,7 @@ type RecordSetsClient interface { ...@@ -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 { ...@@ -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)
......
...@@ -45,7 +45,7 @@ type PrivateRecordSetsClient interface { ...@@ -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 { ...@@ -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
......
...@@ -203,7 +203,7 @@ func (client *mockPrivateRecordSetsClient) CreateOrUpdate(ctx context.Context, r ...@@ -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 ...@@ -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 ...@@ -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) { ...@@ -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 ...@@ -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",
......
...@@ -206,7 +206,7 @@ func (client *mockRecordSetsClient) CreateOrUpdate(ctx context.Context, resource ...@@ -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 ...@@ -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 ...@@ -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) { ...@@ -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 ...@@ -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",
......
...@@ -102,7 +102,7 @@ func (z zoneService) ListZonesContext(ctx context.Context, opts ...cloudflare.Re ...@@ -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 { ...@@ -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
......
...@@ -247,7 +247,7 @@ func TestNewCloudFlareChangeProxiable(t *testing.T) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -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,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment