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/BUILD b/federation/pkg/dnsprovider/providers/aws/route53/BUILD index 444ff4067d1..38a6e11a339 100644 --- a/federation/pkg/dnsprovider/providers/aws/route53/BUILD +++ b/federation/pkg/dnsprovider/providers/aws/route53/BUILD @@ -23,6 +23,7 @@ go_library( "//federation/pkg/dnsprovider/providers/aws/route53/stubs:go_default_library", "//federation/pkg/dnsprovider/rrstype:go_default_library", "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", + "//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library", "//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library", "//vendor/github.com/aws/aws-sdk-go/aws/session:go_default_library", "//vendor/github.com/aws/aws-sdk-go/service/route53:go_default_library", 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/BUILD b/federation/pkg/dnsprovider/providers/google/clouddns/BUILD index 954ee8f416d..506561c9de6 100644 --- a/federation/pkg/dnsprovider/providers/google/clouddns/BUILD +++ b/federation/pkg/dnsprovider/providers/google/clouddns/BUILD @@ -31,6 +31,7 @@ go_library( "//vendor/golang.org/x/oauth2/google:go_default_library", "//vendor/google.golang.org/api/compute/v1:go_default_library", "//vendor/google.golang.org/api/dns/v1:go_default_library", + "//vendor/google.golang.org/api/googleapi:go_default_library", "//vendor/gopkg.in/gcfg.v1:go_default_library", ], ) 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} }