From e7a858f224ef69b385cc0d25ecdf59d39eb0b0a3 Mon Sep 17 00:00:00 2001 From: Shiyang Wang Date: Tue, 29 Aug 2017 15:07:59 +0800 Subject: [PATCH] fix Federation: Google Cloud DNS provider does not handle missing domains correctly --- federation/pkg/dnsprovider/dns.go | 2 +- federation/pkg/dnsprovider/providers/aws/route53/zones.go | 7 +++++++ .../pkg/dnsprovider/providers/google/clouddns/zones.go | 7 ++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/federation/pkg/dnsprovider/dns.go b/federation/pkg/dnsprovider/dns.go index b707280e1d5..aa11974b1dc 100644 --- a/federation/pkg/dnsprovider/dns.go +++ b/federation/pkg/dnsprovider/dns.go @@ -29,7 +29,7 @@ type Interface interface { } type Zones interface { - // List returns the managed Zones, or an error if the list operation failed. + // List returns the (possibly empty) list of managed Zones, or an error if the list operation failed. List() ([]Zone, error) // Add creates and returns a new managed zone, or an error if the operation failed Add(Zone) (Zone, error) diff --git a/federation/pkg/dnsprovider/providers/aws/route53/zones.go b/federation/pkg/dnsprovider/providers/aws/route53/zones.go index 4cb9e9c5585..f5af6be0c74 100644 --- a/federation/pkg/dnsprovider/providers/aws/route53/zones.go +++ b/federation/pkg/dnsprovider/providers/aws/route53/zones.go @@ -17,6 +17,7 @@ limitations under the License. package route53 import ( + "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/service/route53" "k8s.io/apimachinery/pkg/util/uuid" @@ -41,6 +42,12 @@ func (zones Zones) List() ([]dnsprovider.Zone, error) { return true }) if err != nil { + if apiErr, ok := err.(awserr.Error); ok && + apiErr.Code() == "DelegationSetNotReusable" || + apiErr.Code() == "NoSuchDelegationSet" || + apiErr.Code() == "InvalidInput" { + return []dnsprovider.Zone{}, nil + } return []dnsprovider.Zone{}, err } return zoneList, nil diff --git a/federation/pkg/dnsprovider/providers/google/clouddns/zones.go b/federation/pkg/dnsprovider/providers/google/clouddns/zones.go index 62d56aef486..96780833486 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/zones.go +++ b/federation/pkg/dnsprovider/providers/google/clouddns/zones.go @@ -17,6 +17,7 @@ limitations under the License. package clouddns import ( + "google.golang.org/api/googleapi" "k8s.io/kubernetes/federation/pkg/dnsprovider" "k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" ) @@ -30,12 +31,16 @@ type Zones struct { } func (zones Zones) List() ([]dnsprovider.Zone, error) { + var zoneList []dnsprovider.Zone response, err := zones.impl.List(zones.project()).Do() if err != nil { + if apiErr, ok := err.(*googleapi.Error); ok && apiErr.Code == 404 { + return zoneList, nil + } return nil, err } managedZones := response.ManagedZones() - zoneList := make([]dnsprovider.Zone, len(managedZones)) + zoneList = make([]dnsprovider.Zone, len(managedZones)) for i, zone := range managedZones { zoneList[i] = &Zone{zone, &zones} }