From 2e26019629b5974b9a311a9f07b7eac8c1396875 Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Wed, 7 Sep 2016 09:35:54 +0200 Subject: [PATCH] Do not allow creation of GCE PDs in unmanaged zones. Such volumes then cannot be deleted. --- pkg/cloudprovider/providers/gce/gce.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/pkg/cloudprovider/providers/gce/gce.go b/pkg/cloudprovider/providers/gce/gce.go index f6dcb0f4f24..fca55cd7bec 100644 --- a/pkg/cloudprovider/providers/gce/gce.go +++ b/pkg/cloudprovider/providers/gce/gce.go @@ -28,6 +28,8 @@ import ( "strings" "time" + "gopkg.in/gcfg.v1" + "k8s.io/kubernetes/pkg/api" apiservice "k8s.io/kubernetes/pkg/api/service" "k8s.io/kubernetes/pkg/api/unversioned" @@ -46,7 +48,6 @@ import ( container "google.golang.org/api/container/v1" "google.golang.org/api/googleapi" "google.golang.org/cloud/compute/metadata" - "gopkg.in/gcfg.v1" ) const ( @@ -2379,6 +2380,19 @@ func (gce *GCECloud) encodeDiskTags(tags map[string]string) (string, error) { // the specified zone. It stores specified tags encoded in JSON in Description // field. func (gce *GCECloud) CreateDisk(name string, diskType string, zone string, sizeGb int64, tags map[string]string) error { + // Do not allow creation of PDs in zones that are not managed. Such PDs + // then cannot be deleted by DeleteDisk. + isManaged := false + for _, managedZone := range gce.managedZones { + if zone == managedZone { + isManaged = true + break + } + } + if !isManaged { + return fmt.Errorf("kubernetes does not manage zone %q", zone) + } + tagsStr, err := gce.encodeDiskTags(tags) if err != nil { return err @@ -2600,7 +2614,7 @@ func (gce *GCECloud) getDiskByNameUnknownZone(diskName string) (*gceDisk, error) if found != nil { return found, nil } - return nil, fmt.Errorf("GCE persistent disk not found: %q", diskName) + return nil, fmt.Errorf("GCE persistent disk %q not found in managed zones (%s)", diskName, strings.Join(gce.managedZones, ",")) } // GetGCERegion returns region of the gce zone. Zone names