mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-06 09:36:58 +02:00
Google zones should be filter by their ID and Name
Before we only filter by the zone ID, which is an integer value, that is not exposed in the GCP Console and by the related terraform resource. This allows to filter by either ID or Name whatever matches.
This commit is contained in:
parent
84e7108956
commit
ef77161ab0
@ -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 {
|
||||
|
@ -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",
|
||||
|
Loading…
Reference in New Issue
Block a user