fix Federation: Google Cloud DNS provider does not handle missing domains correctly

This commit is contained in:
Shiyang Wang 2017-08-29 15:07:59 +08:00
parent b188868fd9
commit e7a858f224
3 changed files with 14 additions and 2 deletions

View File

@ -29,7 +29,7 @@ type Interface interface {
} }
type Zones 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) List() ([]Zone, error)
// Add creates and returns a new managed zone, or an error if the operation failed // Add creates and returns a new managed zone, or an error if the operation failed
Add(Zone) (Zone, error) Add(Zone) (Zone, error)

View File

@ -17,6 +17,7 @@ limitations under the License.
package route53 package route53
import ( import (
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/route53" "github.com/aws/aws-sdk-go/service/route53"
"k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/uuid"
@ -41,6 +42,12 @@ func (zones Zones) List() ([]dnsprovider.Zone, error) {
return true return true
}) })
if err != nil { 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 []dnsprovider.Zone{}, err
} }
return zoneList, nil return zoneList, nil

View File

@ -17,6 +17,7 @@ limitations under the License.
package clouddns package clouddns
import ( import (
"google.golang.org/api/googleapi"
"k8s.io/kubernetes/federation/pkg/dnsprovider" "k8s.io/kubernetes/federation/pkg/dnsprovider"
"k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces" "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) { func (zones Zones) List() ([]dnsprovider.Zone, error) {
var zoneList []dnsprovider.Zone
response, err := zones.impl.List(zones.project()).Do() response, err := zones.impl.List(zones.project()).Do()
if err != nil { if err != nil {
if apiErr, ok := err.(*googleapi.Error); ok && apiErr.Code == 404 {
return zoneList, nil
}
return nil, err return nil, err
} }
managedZones := response.ManagedZones() managedZones := response.ManagedZones()
zoneList := make([]dnsprovider.Zone, len(managedZones)) zoneList = make([]dnsprovider.Zone, len(managedZones))
for i, zone := range managedZones { for i, zone := range managedZones {
zoneList[i] = &Zone{zone, &zones} zoneList[i] = &Zone{zone, &zones}
} }