Adding retries to fetching secret in controller manager
This commit is contained in:
		@@ -18,21 +18,26 @@ package util
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"net"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/golang/glog"
 | 
						"github.com/golang/glog"
 | 
				
			||||||
	federation_v1alpha1 "k8s.io/kubernetes/federation/apis/federation/v1alpha1"
 | 
						federation_v1alpha1 "k8s.io/kubernetes/federation/apis/federation/v1alpha1"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/client/restclient"
 | 
						"k8s.io/kubernetes/pkg/client/restclient"
 | 
				
			||||||
	client "k8s.io/kubernetes/pkg/client/unversioned"
 | 
						client "k8s.io/kubernetes/pkg/client/unversioned"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
 | 
						"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
 | 
				
			||||||
	clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
 | 
						clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
 | 
				
			||||||
	utilnet "k8s.io/kubernetes/pkg/util/net"
 | 
						utilnet "k8s.io/kubernetes/pkg/util/net"
 | 
				
			||||||
	"net"
 | 
						"k8s.io/kubernetes/pkg/util/wait"
 | 
				
			||||||
	"os"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
	KubeAPIQPS              = 20.0
 | 
						KubeAPIQPS              = 20.0
 | 
				
			||||||
	KubeAPIBurst            = 30
 | 
						KubeAPIBurst            = 30
 | 
				
			||||||
	KubeconfigSecretDataKey = "kubeconfig"
 | 
						KubeconfigSecretDataKey = "kubeconfig"
 | 
				
			||||||
 | 
						getSecretTimeout        = 1 * time.Minute
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func BuildClusterConfig(c *federation_v1alpha1.Cluster) (*restclient.Config, error) {
 | 
					func BuildClusterConfig(c *federation_v1alpha1.Cluster) (*restclient.Config, error) {
 | 
				
			||||||
@@ -101,9 +106,20 @@ var KubeconfigGetterForSecret = func(secretName string) clientcmd.KubeconfigGett
 | 
				
			|||||||
				return nil, fmt.Errorf("error in creating in-cluster client: %s", err)
 | 
									return nil, fmt.Errorf("error in creating in-cluster client: %s", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			data = []byte{}
 | 
								data = []byte{}
 | 
				
			||||||
			secret, err := client.Secrets(namespace).Get(secretName)
 | 
								var secret *api.Secret
 | 
				
			||||||
 | 
								err = wait.PollImmediate(1*time.Second, getSecretTimeout, func() (bool, error) {
 | 
				
			||||||
 | 
									secret, err = client.Secrets(namespace).Get(secretName)
 | 
				
			||||||
 | 
									if err == nil {
 | 
				
			||||||
 | 
										return true, nil
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									glog.Warningf("error in fetching secret: %s", err)
 | 
				
			||||||
 | 
									return false, nil
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return nil, fmt.Errorf("error in fetching secret: %s", err)
 | 
									return nil, fmt.Errorf("timed out waiting for secret: %s", err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if secret == nil {
 | 
				
			||||||
 | 
									return nil, fmt.Errorf("unexpected: received null secret %s", secretName)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			ok := false
 | 
								ok := false
 | 
				
			||||||
			data, ok = secret.Data[KubeconfigSecretDataKey]
 | 
								data, ok = secret.Data[KubeconfigSecretDataKey]
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user