diff --git a/main.go b/main.go index 35ace4a89..5c6737f7e 100644 --- a/main.go +++ b/main.go @@ -133,7 +133,7 @@ func main() { case "azure": p, err = provider.NewAzureProvider(cfg.AzureConfigFile, domainFilter, zoneIDFilter, cfg.AzureResourceGroup, cfg.DryRun) case "vinyldns": - p, err = provider.NewVinylDNSProvider(zoneIDFilter, cfg.DryRun) + p, err = provider.NewVinylDNSProvider(domainFilter, zoneIDFilter, cfg.DryRun) case "cloudflare": p, err = provider.NewCloudFlareProvider(domainFilter, zoneIDFilter, cfg.CloudflareZonesPerPage, cfg.CloudflareProxied, cfg.DryRun) case "rcodezero": diff --git a/provider/vinyldns.go b/provider/vinyldns.go index f67cce9c7..a9b75de73 100644 --- a/provider/vinyldns.go +++ b/provider/vinyldns.go @@ -46,9 +46,10 @@ type vinyldnsZoneInterface interface { } type vinyldnsProvider struct { - client vinyldnsZoneInterface - zoneFilter ZoneIDFilter - dryRun bool + client vinyldnsZoneInterface + zoneFilter ZoneIDFilter + domainFilter DomainFilter + dryRun bool } type vinyldnsChange struct { @@ -57,7 +58,7 @@ type vinyldnsChange struct { } // NewVinylDNSProvider provides support for VinylDNS records -func NewVinylDNSProvider(zoneFilter ZoneIDFilter, dryRun bool) (Provider, error) { +func NewVinylDNSProvider(domainFilter DomainFilter, zoneFilter ZoneIDFilter, dryRun bool) (Provider, error) { _, ok := os.LookupEnv("VINYLDNS_ACCESS_KEY") if !ok { return nil, fmt.Errorf("no vinyldns access key found") @@ -66,9 +67,10 @@ func NewVinylDNSProvider(zoneFilter ZoneIDFilter, dryRun bool) (Provider, error) client := vinyldns.NewClientFromEnv() return &vinyldnsProvider{ - client: client, - dryRun: dryRun, - zoneFilter: zoneFilter, + client: client, + dryRun: dryRun, + zoneFilter: zoneFilter, + domainFilter: domainFilter, }, nil } @@ -83,7 +85,11 @@ func (p *vinyldnsProvider) Records() (endpoints []*endpoint.Endpoint, _ error) { continue } - log.Infof(fmt.Sprintf("Zone: [%s]", zone.Name)) + if !p.domainFilter.Match(zone.Name) { + continue + } + + log.Infof(fmt.Sprintf("Zone: [%s:%s]", zone.ID, zone.Name)) records, err := p.client.RecordSets(zone.ID) if err != nil { return nil, err diff --git a/provider/vinyldns_test.go b/provider/vinyldns_test.go index c38b3fe9a..7bb9381e7 100644 --- a/provider/vinyldns_test.go +++ b/provider/vinyldns_test.go @@ -89,11 +89,16 @@ func TestVinylDNSServices(t *testing.T) { } func testVinylDNSProviderRecords(t *testing.T) { - mockVinylDNSProvider.zoneFilter = NewZoneIDFilter([]string{"0"}) + mockVinylDNSProvider.domainFilter = NewDomainFilter([]string{"example.com"}) result, err := mockVinylDNSProvider.Records() assert.Nil(t, err) assert.Equal(t, len(vinylDNSRecords), len(result)) + mockVinylDNSProvider.zoneFilter = NewZoneIDFilter([]string{"0"}) + result, err = mockVinylDNSProvider.Records() + assert.Nil(t, err) + assert.Equal(t, len(vinylDNSRecords), len(result)) + mockVinylDNSProvider.zoneFilter = NewZoneIDFilter([]string{"1"}) result, err = mockVinylDNSProvider.Records() assert.Nil(t, err) @@ -126,11 +131,11 @@ func testVinylDNSSuitableZone(t *testing.T) { func TestNewVinylDNSProvider(t *testing.T) { os.Setenv("VINYLDNS_ACCESS_KEY", "xxxxxxxxxxxxxxxxxxxxxxxxxx") - _, err := NewVinylDNSProvider(NewZoneIDFilter([]string{"example.com"}), true) + _, err := NewVinylDNSProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{"0"}), true) assert.Nil(t, err) os.Unsetenv("VINYLDNS_ACCESS_KEY") - _, err = NewVinylDNSProvider(NewZoneIDFilter([]string{"example.com"}), true) + _, err = NewVinylDNSProvider(NewDomainFilter([]string{"example.com"}), NewZoneIDFilter([]string{"0"}), true) assert.NotNil(t, err) if err == nil { t.Errorf("Expected to fail new provider on empty token")