From 1a3ff0788ba3f81d44a706a9a7cf545c8a2730a8 Mon Sep 17 00:00:00 2001 From: Mike Danese Date: Fri, 2 Sep 2016 18:15:41 -0700 Subject: [PATCH] retry oauth token fetch in gce cloudprovider The ouath client fetches a token on it's first request. Let's warm the cache to avoid pesky flakes. --- pkg/cloudprovider/providers/gce/gce.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/cloudprovider/providers/gce/gce.go b/pkg/cloudprovider/providers/gce/gce.go index be4b5bf04e7..0d2ee3e893c 100644 --- a/pkg/cloudprovider/providers/gce/gce.go +++ b/pkg/cloudprovider/providers/gce/gce.go @@ -28,8 +28,6 @@ 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" @@ -48,6 +46,7 @@ import ( container "google.golang.org/api/container/v1" "google.golang.org/api/googleapi" "google.golang.org/cloud/compute/metadata" + "gopkg.in/gcfg.v1" ) const ( @@ -326,6 +325,16 @@ func CreateGCECloud(projectID, region, zone string, managedZones []string, netwo glog.Infof("Using existing Token Source %#v", tokenSource) } + if err := wait.PollImmediate(5*time.Second, 30*time.Second, func() (bool, error) { + if _, err := tokenSource.Token(); err != nil { + glog.Errorf("error fetching initial token: %v", err) + return false, nil + } + return true, nil + }); err != nil { + return nil, err + } + client := oauth2.NewClient(oauth2.NoContext, tokenSource) svc, err := compute.New(client) if err != nil {