diff --git a/provider/google.go b/provider/google.go index 67033fc72..3ba73354f 100644 --- a/provider/google.go +++ b/provider/google.go @@ -161,7 +161,7 @@ func (p *GoogleProvider) Zones() (map[string]*dns.ManagedZone, error) { f := func(resp *dns.ManagedZonesListResponse) error { for _, zone := range resp.ManagedZones { - if p.domainFilter.Match(zone.DnsName) && p.zoneIDFilter.Match(fmt.Sprintf("%v", zone.Id)) { + if p.domainFilter.Match(zone.DnsName) && (p.zoneIDFilter.Match(fmt.Sprintf("%v", zone.Id)) || p.zoneIDFilter.Match(fmt.Sprintf("%v", zone.Name))) { zones[zone.Name] = zone log.Debugf("Matched %s (zone: %s)", zone.DnsName, zone.Name) } else { diff --git a/provider/google_test.go b/provider/google_test.go index f4f15b5ab..a45d81cab 100644 --- a/provider/google_test.go +++ b/provider/google_test.go @@ -192,6 +192,28 @@ func hasTrailingDot(target string) bool { return strings.HasSuffix(target, ".") } +func TestGoogleZonesIDFilter(t *testing.T) { + provider := newGoogleProviderZoneOverlap(t, NewDomainFilter([]string{"cluster.local."}), NewZoneIDFilter([]string{"10002"}), false, []*endpoint.Endpoint{}) + + zones, err := provider.Zones() + require.NoError(t, err) + + validateZones(t, zones, map[string]*dns.ManagedZone{ + "internal-2": {Name: "internal-2", DnsName: "cluster.local.", Id: 10002}, + }) +} + +func TestGoogleZonesNameFilter(t *testing.T) { + provider := newGoogleProviderZoneOverlap(t, NewDomainFilter([]string{"cluster.local."}), NewZoneIDFilter([]string{"internal-2"}), false, []*endpoint.Endpoint{}) + + zones, err := provider.Zones() + require.NoError(t, err) + + validateZones(t, zones, map[string]*dns.ManagedZone{ + "internal-2": {Name: "internal-2", DnsName: "cluster.local.", Id: 10002}, + }) +} + func TestGoogleZones(t *testing.T) { provider := newGoogleProvider(t, NewDomainFilter([]string{"ext-dns-test-2.gcp.zalan.do."}), NewZoneIDFilter([]string{""}), false, []*endpoint.Endpoint{}) @@ -562,6 +584,41 @@ func validateChangeRecord(t *testing.T, record *dns.ResourceRecordSet, expected assert.Equal(t, expected.Type, record.Type) } +func newGoogleProviderZoneOverlap(t *testing.T, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, records []*endpoint.Endpoint) *GoogleProvider { + provider := &GoogleProvider{ + project: "zalando-external-dns-test", + dryRun: false, + domainFilter: domainFilter, + zoneIDFilter: zoneIDFilter, + resourceRecordSetsClient: &mockResourceRecordSetsClient{}, + managedZonesClient: &mockManagedZonesClient{}, + changesClient: &mockChangesClient{}, + } + + createZone(t, provider, &dns.ManagedZone{ + Name: "internal-1", + DnsName: "cluster.local.", + Id: 10001, + }) + + createZone(t, provider, &dns.ManagedZone{ + Name: "internal-2", + DnsName: "cluster.local.", + Id: 10002, + }) + + createZone(t, provider, &dns.ManagedZone{ + Name: "internal-3", + DnsName: "cluster.local.", + Id: 10003, + }) + + provider.dryRun = dryRun + + return provider + +} + func newGoogleProvider(t *testing.T, domainFilter DomainFilter, zoneIDFilter ZoneIDFilter, dryRun bool, records []*endpoint.Endpoint) *GoogleProvider { provider := &GoogleProvider{ project: "zalando-external-dns-test",