Commit 5dad125d authored by juanvallejo's avatar juanvallejo

bump(k8s.io/client-go): add Timeout field to 1.5 restclient

parent fd087caa
...@@ -25,6 +25,7 @@ import ( ...@@ -25,6 +25,7 @@ import (
"path" "path"
gruntime "runtime" gruntime "runtime"
"strings" "strings"
"time"
"github.com/golang/glog" "github.com/golang/glog"
...@@ -109,6 +110,9 @@ type Config struct { ...@@ -109,6 +110,9 @@ type Config struct {
// Rate limiter for limiting connections to the master from this client. If present overwrites QPS/Burst // Rate limiter for limiting connections to the master from this client. If present overwrites QPS/Burst
RateLimiter flowcontrol.RateLimiter RateLimiter flowcontrol.RateLimiter
// The maximum length of time to wait before giving up on a server request. A value of zero means no timeout.
Timeout time.Duration
// Version forces a specific version to be used (if registered) // Version forces a specific version to be used (if registered)
// Do we need this? // Do we need this?
// Version string // Version string
......
...@@ -27,6 +27,9 @@ import ( ...@@ -27,6 +27,9 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
"github.com/imdario/mergo" "github.com/imdario/mergo"
"strconv"
"time"
"k8s.io/client-go/1.5/pkg/api" "k8s.io/client-go/1.5/pkg/api"
"k8s.io/client-go/1.5/rest" "k8s.io/client-go/1.5/rest"
clientauth "k8s.io/client-go/1.5/tools/auth" clientauth "k8s.io/client-go/1.5/tools/auth"
...@@ -108,6 +111,17 @@ func (config *DirectClientConfig) ClientConfig() (*rest.Config, error) { ...@@ -108,6 +111,17 @@ func (config *DirectClientConfig) ClientConfig() (*rest.Config, error) {
clientConfig := &rest.Config{} clientConfig := &rest.Config{}
clientConfig.Host = configClusterInfo.Server clientConfig.Host = configClusterInfo.Server
if len(config.overrides.Timeout) > 0 {
if i, err := strconv.ParseInt(config.overrides.Timeout, 10, 64); err == nil && i >= 0 {
clientConfig.Timeout = time.Duration(i) * time.Second
} else if requestTimeout, err := time.ParseDuration(config.overrides.Timeout); err == nil {
clientConfig.Timeout = requestTimeout
} else {
return nil, fmt.Errorf("Invalid value for option '--request-timeout'. Value must be a single integer, or an integer followed by a corresponding time unit (e.g. 1s | 2m | 3h)")
}
}
if u, err := url.ParseRequestURI(clientConfig.Host); err == nil && u.Opaque == "" && len(u.Path) > 1 { if u, err := url.ParseRequestURI(clientConfig.Host); err == nil && u.Opaque == "" && len(u.Path) > 1 {
u.RawQuery = "" u.RawQuery = ""
u.Fragment = "" u.Fragment = ""
......
...@@ -33,6 +33,7 @@ type ConfigOverrides struct { ...@@ -33,6 +33,7 @@ type ConfigOverrides struct {
ClusterInfo clientcmdapi.Cluster ClusterInfo clientcmdapi.Cluster
Context clientcmdapi.Context Context clientcmdapi.Context
CurrentContext string CurrentContext string
Timeout string
} }
// ConfigOverrideFlags holds the flag names to be used for binding command line flags. Notice that this structure tightly // ConfigOverrideFlags holds the flag names to be used for binding command line flags. Notice that this structure tightly
...@@ -42,6 +43,7 @@ type ConfigOverrideFlags struct { ...@@ -42,6 +43,7 @@ type ConfigOverrideFlags struct {
ClusterOverrideFlags ClusterOverrideFlags ClusterOverrideFlags ClusterOverrideFlags
ContextOverrideFlags ContextOverrideFlags ContextOverrideFlags ContextOverrideFlags
CurrentContext FlagInfo CurrentContext FlagInfo
Timeout FlagInfo
} }
// AuthOverrideFlags holds the flag names to be used for binding command line flags for AuthInfo objects // AuthOverrideFlags holds the flag names to be used for binding command line flags for AuthInfo objects
...@@ -121,6 +123,7 @@ const ( ...@@ -121,6 +123,7 @@ const (
FlagImpersonate = "as" FlagImpersonate = "as"
FlagUsername = "username" FlagUsername = "username"
FlagPassword = "password" FlagPassword = "password"
FlagTimeout = "request-timeout"
) )
// RecommendedAuthOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing // RecommendedAuthOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing
...@@ -151,7 +154,9 @@ func RecommendedConfigOverrideFlags(prefix string) ConfigOverrideFlags { ...@@ -151,7 +154,9 @@ func RecommendedConfigOverrideFlags(prefix string) ConfigOverrideFlags {
AuthOverrideFlags: RecommendedAuthOverrideFlags(prefix), AuthOverrideFlags: RecommendedAuthOverrideFlags(prefix),
ClusterOverrideFlags: RecommendedClusterOverrideFlags(prefix), ClusterOverrideFlags: RecommendedClusterOverrideFlags(prefix),
ContextOverrideFlags: RecommendedContextOverrideFlags(prefix), ContextOverrideFlags: RecommendedContextOverrideFlags(prefix),
CurrentContext: FlagInfo{prefix + FlagContext, "", "", "The name of the kubeconfig context to use"},
CurrentContext: FlagInfo{prefix + FlagContext, "", "", "The name of the kubeconfig context to use"},
Timeout: FlagInfo{prefix + FlagTimeout, "", "0", "The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests."},
} }
} }
...@@ -190,6 +195,7 @@ func BindOverrideFlags(overrides *ConfigOverrides, flags *pflag.FlagSet, flagNam ...@@ -190,6 +195,7 @@ func BindOverrideFlags(overrides *ConfigOverrides, flags *pflag.FlagSet, flagNam
BindClusterFlags(&overrides.ClusterInfo, flags, flagNames.ClusterOverrideFlags) BindClusterFlags(&overrides.ClusterInfo, flags, flagNames.ClusterOverrideFlags)
BindContextFlags(&overrides.Context, flags, flagNames.ContextOverrideFlags) BindContextFlags(&overrides.Context, flags, flagNames.ContextOverrideFlags)
flagNames.CurrentContext.BindStringFlag(flags, &overrides.CurrentContext) flagNames.CurrentContext.BindStringFlag(flags, &overrides.CurrentContext)
flagNames.Timeout.BindStringFlag(flags, &overrides.Timeout)
} }
// BindFlags is a convenience method to bind the specified flags to their associated variables // BindFlags is a convenience method to bind the specified flags to their associated variables
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment