From 40cefcaf8f714b5b1b0162017307745514fc0914 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 14 Oct 2016 11:16:46 -0500 Subject: [PATCH] cloudprovider/gce: canonicalize instance name when returning instance array 'names' is an array of FQDNs. 'instances' is a map indexed by canonicalized name. Clearly these two won't always match, so when building the final instance array to return, make sure to look up map entries by their canonicalized name. In the below example, "ocp-master-5pob" is clearly found as a GCE instance but when building the final instance array it cannot be matched as the code is looking for "ocp-master-5pob.c.ose-refarch.internal" instead. The node is then deleted from the cluster as it cannot be found by the cloud provider. gce.go:2519] ### getInstancesByNames([ocp-master-5pob.c.ose-refarch.internal]): initial node prefix ocp- gce.go:2530] ### getInstancesByNames([ocp-master-5pob.c.ose-refarch.internal]): looking for instances map[ocp-master-5pob:] gce.go:2533] ### getInstancesByNames([ocp-master-5pob.c.ose-refarch.internal]): getting zone 'europe-west1-c' (remaining 1) gce.go:2563] ### getInstancesByNames([ocp-master-5pob.c.ose-refarch.internal]): instance name not requested gce.go:2563] ### getInstancesByNames([ocp-master-5pob.c.ose-refarch.internal]): instance name not requested gce.go:2533] ### getInstancesByNames([ocp-master-5pob.c.ose-refarch.internal]): getting zone 'europe-west1-b' (remaining 1) gce.go:2563] ### getInstancesByNames([ocp-master-5pob.c.ose-refarch.internal]): instance name not requested gce.go:2576] ### getInstancesByNames([ocp-master-5pob.c.ose-refarch.internal]): found instance 'ocp-master-5pob' remaining 0 gce.go:2563] ### getInstancesByNames([ocp-master-5pob.c.ose-refarch.internal]): instance name not requested gce.go:2533] ### getInstancesByNames([ocp-master-5pob.c.ose-refarch.internal]): getting zone 'europe-west1-d' (remaining 0) gce.go:2588] Failed to retrieve instance: "ocp-master-5pob.c.ose-refarch.internal" gce.go:2624] ### getInstanceByName(ocp-master-5pob.c.ose-refarch.internal): got []: instance not found gce.go:2626] getInstanceByName/multiple-zones: failed to get instance ocp-master-5pob.c.ose-refarch.internal; err: instance not found nodecontroller.go:587] Deleting node (no longer present in cloud provider): ocp-master-5pob.c.ose-refarch.internal nodecontroller.go:664] Recording Deleting Node ocp-master-5pob.c.ose-refarch.internal because it's not present according to cloud provider event message for node ocp-master-5pob.c.ose-refarch.internal --- pkg/cloudprovider/providers/gce/gce.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/cloudprovider/providers/gce/gce.go b/pkg/cloudprovider/providers/gce/gce.go index 30eb35a2794..3f998a25ac3 100644 --- a/pkg/cloudprovider/providers/gce/gce.go +++ b/pkg/cloudprovider/providers/gce/gce.go @@ -2832,6 +2832,7 @@ func (gce *GCECloud) getInstancesByNames(names []string) ([]*gceInstance, error) instanceArray := make([]*gceInstance, len(names)) for i, name := range names { + name = canonicalizeInstanceName(name) instance := instances[name] if instance == nil { glog.Errorf("Failed to retrieve instance: %q", name)