From d59d5c4bf3392f89466f9d4546a68ff39dcf9cd7 Mon Sep 17 00:00:00 2001 From: Nick Sardo Date: Wed, 26 Jul 2017 18:02:30 -0700 Subject: [PATCH] Fix retry of cloudprovider client generation --- controllers/gce/controller/cluster_manager.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/controllers/gce/controller/cluster_manager.go b/controllers/gce/controller/cluster_manager.go index c4b7d4d660..33dc616d42 100644 --- a/controllers/gce/controller/cluster_manager.go +++ b/controllers/gce/controller/cluster_manager.go @@ -17,7 +17,9 @@ limitations under the License. package controller import ( + "bytes" "io" + "io/ioutil" "net/http" "os" "time" @@ -210,12 +212,17 @@ func (c *ClusterManager) GC(lbNames []string, nodePorts []backends.ServicePort) } func getGCEClient(config io.Reader) *gce.GCECloud { + allConfig, err := ioutil.ReadAll(config) + if err != nil { + glog.Fatalf("Error while reading entire config: %v", err) + } + // Creating the cloud interface involves resolving the metadata server to get // an oauth token. If this fails, the token provider assumes it's not on GCE. // No errors are thrown. So we need to keep retrying till it works because // we know we're on GCE. for { - cloudInterface, err := cloudprovider.GetCloudProvider("gce", config) + cloudInterface, err := cloudprovider.GetCloudProvider("gce", bytes.NewReader(allConfig)) if err == nil { cloud := cloudInterface.(*gce.GCECloud)