aboutsummaryrefslogtreecommitdiffstats
path: root/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd
diff options
context:
space:
mode:
authorHuabingZhao <zhao.huabing@zte.com.cn>2017-09-04 15:00:54 +0800
committerHuabingZhao <zhao.huabing@zte.com.cn>2017-09-04 15:06:21 +0800
commit43dac0bc4302fed79eaeb661723ca584a9c0496a (patch)
treea78f60300d73f0a69ed12e946d3fe4580455d8ba /kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd
parenta7837a0ac51704003c6aacba2dacb8e64f681622 (diff)
restructure the source directory
Issue-ID: OOM-61 Change-Id: Ib6f633d517ad197bfdbca59b374cdad2f1ed897e Signed-off-by: HuabingZhao <zhao.huabing@zte.com.cn>
Diffstat (limited to 'kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd')
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/helpers.go183
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/latest/latest.go54
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/register.go43
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/types.go152
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/conversion.go231
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/register.go40
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/types.go145
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/auth_loaders.go91
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/client_config.go411
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/config.go472
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/doc.go37
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/loader.go585
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/merged_client_builder.go122
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/overrides.go198
-rw-r--r--kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/validation.go270
15 files changed, 0 insertions, 3034 deletions
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/helpers.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/helpers.go
deleted file mode 100644
index 43e2648..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/helpers.go
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-Copyright 2015 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package api
-
-import (
- "encoding/base64"
- "errors"
- "fmt"
- "io/ioutil"
- "os"
- "path"
- "path/filepath"
-)
-
-func init() {
- sDec, _ := base64.StdEncoding.DecodeString("REDACTED+")
- redactedBytes = []byte(string(sDec))
-}
-
-// IsConfigEmpty returns true if the config is empty.
-func IsConfigEmpty(config *Config) bool {
- return len(config.AuthInfos) == 0 && len(config.Clusters) == 0 && len(config.Contexts) == 0 &&
- len(config.CurrentContext) == 0 &&
- len(config.Preferences.Extensions) == 0 && !config.Preferences.Colors &&
- len(config.Extensions) == 0
-}
-
-// MinifyConfig read the current context and uses that to keep only the relevant pieces of config
-// This is useful for making secrets based on kubeconfig files
-func MinifyConfig(config *Config) error {
- if len(config.CurrentContext) == 0 {
- return errors.New("current-context must exist in order to minify")
- }
-
- currContext, exists := config.Contexts[config.CurrentContext]
- if !exists {
- return fmt.Errorf("cannot locate context %v", config.CurrentContext)
- }
-
- newContexts := map[string]*Context{}
- newContexts[config.CurrentContext] = currContext
-
- newClusters := map[string]*Cluster{}
- if len(currContext.Cluster) > 0 {
- if _, exists := config.Clusters[currContext.Cluster]; !exists {
- return fmt.Errorf("cannot locate cluster %v", currContext.Cluster)
- }
-
- newClusters[currContext.Cluster] = config.Clusters[currContext.Cluster]
- }
-
- newAuthInfos := map[string]*AuthInfo{}
- if len(currContext.AuthInfo) > 0 {
- if _, exists := config.AuthInfos[currContext.AuthInfo]; !exists {
- return fmt.Errorf("cannot locate user %v", currContext.AuthInfo)
- }
-
- newAuthInfos[currContext.AuthInfo] = config.AuthInfos[currContext.AuthInfo]
- }
-
- config.AuthInfos = newAuthInfos
- config.Clusters = newClusters
- config.Contexts = newContexts
-
- return nil
-}
-
-var redactedBytes []byte
-
-// Flatten redacts raw data entries from the config object for a human-readable view.
-func ShortenConfig(config *Config) {
- // trick json encoder into printing a human readable string in the raw data
- // by base64 decoding what we want to print. Relies on implementation of
- // http://golang.org/pkg/encoding/json/#Marshal using base64 to encode []byte
- for key, authInfo := range config.AuthInfos {
- if len(authInfo.ClientKeyData) > 0 {
- authInfo.ClientKeyData = redactedBytes
- }
- if len(authInfo.ClientCertificateData) > 0 {
- authInfo.ClientCertificateData = redactedBytes
- }
- config.AuthInfos[key] = authInfo
- }
- for key, cluster := range config.Clusters {
- if len(cluster.CertificateAuthorityData) > 0 {
- cluster.CertificateAuthorityData = redactedBytes
- }
- config.Clusters[key] = cluster
- }
-}
-
-// Flatten changes the config object into a self contained config (useful for making secrets)
-func FlattenConfig(config *Config) error {
- for key, authInfo := range config.AuthInfos {
- baseDir, err := MakeAbs(path.Dir(authInfo.LocationOfOrigin), "")
- if err != nil {
- return err
- }
-
- if err := FlattenContent(&authInfo.ClientCertificate, &authInfo.ClientCertificateData, baseDir); err != nil {
- return err
- }
- if err := FlattenContent(&authInfo.ClientKey, &authInfo.ClientKeyData, baseDir); err != nil {
- return err
- }
-
- config.AuthInfos[key] = authInfo
- }
- for key, cluster := range config.Clusters {
- baseDir, err := MakeAbs(path.Dir(cluster.LocationOfOrigin), "")
- if err != nil {
- return err
- }
-
- if err := FlattenContent(&cluster.CertificateAuthority, &cluster.CertificateAuthorityData, baseDir); err != nil {
- return err
- }
-
- config.Clusters[key] = cluster
- }
-
- return nil
-}
-
-func FlattenContent(path *string, contents *[]byte, baseDir string) error {
- if len(*path) != 0 {
- if len(*contents) > 0 {
- return errors.New("cannot have values for both path and contents")
- }
-
- var err error
- absPath := ResolvePath(*path, baseDir)
- *contents, err = ioutil.ReadFile(absPath)
- if err != nil {
- return err
- }
-
- *path = ""
- }
-
- return nil
-}
-
-// ResolvePath returns the path as an absolute paths, relative to the given base directory
-func ResolvePath(path string, base string) string {
- // Don't resolve empty paths
- if len(path) > 0 {
- // Don't resolve absolute paths
- if !filepath.IsAbs(path) {
- return filepath.Join(base, path)
- }
- }
-
- return path
-}
-
-func MakeAbs(path, base string) (string, error) {
- if filepath.IsAbs(path) {
- return path, nil
- }
- if len(base) == 0 {
- cwd, err := os.Getwd()
- if err != nil {
- return "", err
- }
- base = cwd
- }
- return filepath.Join(base, path), nil
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/latest/latest.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/latest/latest.go
deleted file mode 100644
index 0b9a427..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/latest/latest.go
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package latest
-
-import (
- "k8s.io/kubernetes/pkg/api/unversioned"
- "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
- _ "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1"
- "k8s.io/kubernetes/pkg/runtime"
- "k8s.io/kubernetes/pkg/runtime/serializer/json"
- "k8s.io/kubernetes/pkg/runtime/serializer/versioning"
-)
-
-// Version is the string that represents the current external default version.
-const Version = "v1"
-
-var ExternalVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
-
-// OldestVersion is the string that represents the oldest server version supported,
-// for client code that wants to hardcode the lowest common denominator.
-const OldestVersion = "v1"
-
-// Versions is the list of versions that are recognized in code. The order provided
-// may be assumed to be least feature rich to most feature rich, and clients may
-// choose to prefer the latter items in the list over the former items when presented
-// with a set of versions to choose.
-var Versions = []string{"v1"}
-
-var Codec runtime.Codec
-
-func init() {
- yamlSerializer := json.NewYAMLSerializer(json.DefaultMetaFactory, api.Scheme, api.Scheme)
- Codec = versioning.NewCodecForScheme(
- api.Scheme,
- yamlSerializer,
- yamlSerializer,
- []unversioned.GroupVersion{{Version: Version}},
- []unversioned.GroupVersion{{Version: runtime.APIVersionInternal}},
- )
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/register.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/register.go
deleted file mode 100644
index 5426e7f..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/register.go
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package api
-
-import (
- "k8s.io/kubernetes/pkg/api/unversioned"
- "k8s.io/kubernetes/pkg/runtime"
-)
-
-// Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered.
-var Scheme = runtime.NewScheme()
-
-// SchemeGroupVersion is group version used to register these objects
-// TODO this should be in the "kubeconfig" group
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: runtime.APIVersionInternal}
-
-func init() {
- Scheme.AddKnownTypes(SchemeGroupVersion,
- &Config{},
- )
-}
-
-func (obj *Config) GetObjectKind() unversioned.ObjectKind { return obj }
-func (obj *Config) SetGroupVersionKind(gvk unversioned.GroupVersionKind) {
- obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind()
-}
-func (obj *Config) GroupVersionKind() unversioned.GroupVersionKind {
- return unversioned.FromAPIVersionAndKind(obj.APIVersion, obj.Kind)
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/types.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/types.go
deleted file mode 100644
index 95b5289..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/types.go
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package api
-
-import (
- "k8s.io/kubernetes/pkg/runtime"
-)
-
-// Where possible, json tags match the cli argument names.
-// Top level config objects and all values required for proper functioning are not "omitempty". Any truly optional piece of config is allowed to be omitted.
-
-// Config holds the information needed to build connect to remote kubernetes clusters as a given user
-// IMPORTANT if you add fields to this struct, please update IsConfigEmpty()
-type Config struct {
- // Legacy field from pkg/api/types.go TypeMeta.
- // TODO(jlowdermilk): remove this after eliminating downstream dependencies.
- Kind string `json:"kind,omitempty"`
- // DEPRECATED: APIVersion is the preferred api version for communicating with the kubernetes cluster (v1, v2, etc).
- // Because a cluster can run multiple API groups and potentially multiple versions of each, it no longer makes sense to specify
- // a single value for the cluster version.
- // This field isn't really needed anyway, so we are deprecating it without replacement.
- // It will be ignored if it is present.
- APIVersion string `json:"apiVersion,omitempty"`
- // Preferences holds general information to be use for cli interactions
- Preferences Preferences `json:"preferences"`
- // Clusters is a map of referencable names to cluster configs
- Clusters map[string]*Cluster `json:"clusters"`
- // AuthInfos is a map of referencable names to user configs
- AuthInfos map[string]*AuthInfo `json:"users"`
- // Contexts is a map of referencable names to context configs
- Contexts map[string]*Context `json:"contexts"`
- // CurrentContext is the name of the context that you would like to use by default
- CurrentContext string `json:"current-context"`
- // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
- Extensions map[string]runtime.Object `json:"extensions,omitempty"`
-}
-
-// IMPORTANT if you add fields to this struct, please update IsConfigEmpty()
-type Preferences struct {
- Colors bool `json:"colors,omitempty"`
- // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
- Extensions map[string]runtime.Object `json:"extensions,omitempty"`
-}
-
-// Cluster contains information about how to communicate with a kubernetes cluster
-type Cluster struct {
- // LocationOfOrigin indicates where this object came from. It is used for round tripping config post-merge, but never serialized.
- LocationOfOrigin string
- // Server is the address of the kubernetes cluster (https://hostname:port).
- Server string `json:"server"`
- // APIVersion is the preferred api version for communicating with the kubernetes cluster (v1, v2, etc).
- APIVersion string `json:"api-version,omitempty"`
- // InsecureSkipTLSVerify skips the validity check for the server's certificate. This will make your HTTPS connections insecure.
- InsecureSkipTLSVerify bool `json:"insecure-skip-tls-verify,omitempty"`
- // CertificateAuthority is the path to a cert file for the certificate authority.
- CertificateAuthority string `json:"certificate-authority,omitempty"`
- // CertificateAuthorityData contains PEM-encoded certificate authority certificates. Overrides CertificateAuthority
- CertificateAuthorityData []byte `json:"certificate-authority-data,omitempty"`
- // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
- Extensions map[string]runtime.Object `json:"extensions,omitempty"`
-}
-
-// AuthInfo contains information that describes identity information. This is use to tell the kubernetes cluster who you are.
-type AuthInfo struct {
- // LocationOfOrigin indicates where this object came from. It is used for round tripping config post-merge, but never serialized.
- LocationOfOrigin string
- // ClientCertificate is the path to a client cert file for TLS.
- ClientCertificate string `json:"client-certificate,omitempty"`
- // ClientCertificateData contains PEM-encoded data from a client cert file for TLS. Overrides ClientCertificate
- ClientCertificateData []byte `json:"client-certificate-data,omitempty"`
- // ClientKey is the path to a client key file for TLS.
- ClientKey string `json:"client-key,omitempty"`
- // ClientKeyData contains PEM-encoded data from a client key file for TLS. Overrides ClientKey
- ClientKeyData []byte `json:"client-key-data,omitempty"`
- // Token is the bearer token for authentication to the kubernetes cluster.
- Token string `json:"token,omitempty"`
- // Impersonate is the username to act-as.
- Impersonate string `json:"act-as,omitempty"`
- // Username is the username for basic authentication to the kubernetes cluster.
- Username string `json:"username,omitempty"`
- // Password is the password for basic authentication to the kubernetes cluster.
- Password string `json:"password,omitempty"`
- // AuthProvider specifies a custom authentication plugin for the kubernetes cluster.
- AuthProvider *AuthProviderConfig `json:"auth-provider,omitempty"`
- // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
- Extensions map[string]runtime.Object `json:"extensions,omitempty"`
-}
-
-// Context is a tuple of references to a cluster (how do I communicate with a kubernetes cluster), a user (how do I identify myself), and a namespace (what subset of resources do I want to work with)
-type Context struct {
- // LocationOfOrigin indicates where this object came from. It is used for round tripping config post-merge, but never serialized.
- LocationOfOrigin string
- // Cluster is the name of the cluster for this context
- Cluster string `json:"cluster"`
- // AuthInfo is the name of the authInfo for this context
- AuthInfo string `json:"user"`
- // Namespace is the default namespace to use on unspecified requests
- Namespace string `json:"namespace,omitempty"`
- // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
- Extensions map[string]runtime.Object `json:"extensions,omitempty"`
-}
-
-// AuthProviderConfig holds the configuration for a specified auth provider.
-type AuthProviderConfig struct {
- Name string `json:"name"`
- Config map[string]string `json:"config,omitempty"`
-}
-
-// NewConfig is a convenience function that returns a new Config object with non-nil maps
-func NewConfig() *Config {
- return &Config{
- Preferences: *NewPreferences(),
- Clusters: make(map[string]*Cluster),
- AuthInfos: make(map[string]*AuthInfo),
- Contexts: make(map[string]*Context),
- Extensions: make(map[string]runtime.Object),
- }
-}
-
-// NewConfig is a convenience function that returns a new Config object with non-nil maps
-func NewContext() *Context {
- return &Context{Extensions: make(map[string]runtime.Object)}
-}
-
-// NewConfig is a convenience function that returns a new Config object with non-nil maps
-func NewCluster() *Cluster {
- return &Cluster{Extensions: make(map[string]runtime.Object)}
-}
-
-// NewConfig is a convenience function that returns a new Config object with non-nil maps
-func NewAuthInfo() *AuthInfo {
- return &AuthInfo{Extensions: make(map[string]runtime.Object)}
-}
-
-// NewConfig is a convenience function that returns a new Config object with non-nil maps
-func NewPreferences() *Preferences {
- return &Preferences{Extensions: make(map[string]runtime.Object)}
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/conversion.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/conversion.go
deleted file mode 100644
index e22e5f8..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/conversion.go
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package v1
-
-import (
- "sort"
-
- "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
- "k8s.io/kubernetes/pkg/conversion"
- "k8s.io/kubernetes/pkg/runtime"
-)
-
-func init() {
- err := api.Scheme.AddConversionFuncs(
- func(in *Cluster, out *api.Cluster, s conversion.Scope) error {
- return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
- },
- func(in *api.Cluster, out *Cluster, s conversion.Scope) error {
- return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
- },
- func(in *Preferences, out *api.Preferences, s conversion.Scope) error {
- return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
- },
- func(in *api.Preferences, out *Preferences, s conversion.Scope) error {
- return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
- },
- func(in *AuthInfo, out *api.AuthInfo, s conversion.Scope) error {
- return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
- },
- func(in *api.AuthInfo, out *AuthInfo, s conversion.Scope) error {
- return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
- },
- func(in *Context, out *api.Context, s conversion.Scope) error {
- return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
- },
- func(in *api.Context, out *Context, s conversion.Scope) error {
- return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
- },
-
- func(in *Config, out *api.Config, s conversion.Scope) error {
- out.CurrentContext = in.CurrentContext
- if err := s.Convert(&in.Preferences, &out.Preferences, 0); err != nil {
- return err
- }
-
- out.Clusters = make(map[string]*api.Cluster)
- if err := s.Convert(&in.Clusters, &out.Clusters, 0); err != nil {
- return err
- }
- out.AuthInfos = make(map[string]*api.AuthInfo)
- if err := s.Convert(&in.AuthInfos, &out.AuthInfos, 0); err != nil {
- return err
- }
- out.Contexts = make(map[string]*api.Context)
- if err := s.Convert(&in.Contexts, &out.Contexts, 0); err != nil {
- return err
- }
- out.Extensions = make(map[string]runtime.Object)
- if err := s.Convert(&in.Extensions, &out.Extensions, 0); err != nil {
- return err
- }
- return nil
- },
- func(in *api.Config, out *Config, s conversion.Scope) error {
- out.CurrentContext = in.CurrentContext
- if err := s.Convert(&in.Preferences, &out.Preferences, 0); err != nil {
- return err
- }
-
- out.Clusters = make([]NamedCluster, 0, 0)
- if err := s.Convert(&in.Clusters, &out.Clusters, 0); err != nil {
- return err
- }
- out.AuthInfos = make([]NamedAuthInfo, 0, 0)
- if err := s.Convert(&in.AuthInfos, &out.AuthInfos, 0); err != nil {
- return err
- }
- out.Contexts = make([]NamedContext, 0, 0)
- if err := s.Convert(&in.Contexts, &out.Contexts, 0); err != nil {
- return err
- }
- out.Extensions = make([]NamedExtension, 0, 0)
- if err := s.Convert(&in.Extensions, &out.Extensions, 0); err != nil {
- return err
- }
- return nil
- },
- func(in *[]NamedCluster, out *map[string]*api.Cluster, s conversion.Scope) error {
- for _, curr := range *in {
- newCluster := api.NewCluster()
- if err := s.Convert(&curr.Cluster, newCluster, 0); err != nil {
- return err
- }
- (*out)[curr.Name] = newCluster
- }
-
- return nil
- },
- func(in *map[string]*api.Cluster, out *[]NamedCluster, s conversion.Scope) error {
- allKeys := make([]string, 0, len(*in))
- for key := range *in {
- allKeys = append(allKeys, key)
- }
- sort.Strings(allKeys)
-
- for _, key := range allKeys {
- newCluster := (*in)[key]
- oldCluster := &Cluster{}
- if err := s.Convert(newCluster, oldCluster, 0); err != nil {
- return err
- }
-
- namedCluster := NamedCluster{key, *oldCluster}
- *out = append(*out, namedCluster)
- }
-
- return nil
- },
- func(in *[]NamedAuthInfo, out *map[string]*api.AuthInfo, s conversion.Scope) error {
- for _, curr := range *in {
- newAuthInfo := api.NewAuthInfo()
- if err := s.Convert(&curr.AuthInfo, newAuthInfo, 0); err != nil {
- return err
- }
- (*out)[curr.Name] = newAuthInfo
- }
-
- return nil
- },
- func(in *map[string]*api.AuthInfo, out *[]NamedAuthInfo, s conversion.Scope) error {
- allKeys := make([]string, 0, len(*in))
- for key := range *in {
- allKeys = append(allKeys, key)
- }
- sort.Strings(allKeys)
-
- for _, key := range allKeys {
- newAuthInfo := (*in)[key]
- oldAuthInfo := &AuthInfo{}
- if err := s.Convert(newAuthInfo, oldAuthInfo, 0); err != nil {
- return err
- }
-
- namedAuthInfo := NamedAuthInfo{key, *oldAuthInfo}
- *out = append(*out, namedAuthInfo)
- }
-
- return nil
- },
- func(in *[]NamedContext, out *map[string]*api.Context, s conversion.Scope) error {
- for _, curr := range *in {
- newContext := api.NewContext()
- if err := s.Convert(&curr.Context, newContext, 0); err != nil {
- return err
- }
- (*out)[curr.Name] = newContext
- }
-
- return nil
- },
- func(in *map[string]*api.Context, out *[]NamedContext, s conversion.Scope) error {
- allKeys := make([]string, 0, len(*in))
- for key := range *in {
- allKeys = append(allKeys, key)
- }
- sort.Strings(allKeys)
-
- for _, key := range allKeys {
- newContext := (*in)[key]
- oldContext := &Context{}
- if err := s.Convert(newContext, oldContext, 0); err != nil {
- return err
- }
-
- namedContext := NamedContext{key, *oldContext}
- *out = append(*out, namedContext)
- }
-
- return nil
- },
- func(in *[]NamedExtension, out *map[string]runtime.Object, s conversion.Scope) error {
- for _, curr := range *in {
- var newExtension runtime.Object
- if err := s.Convert(&curr.Extension, &newExtension, 0); err != nil {
- return err
- }
- (*out)[curr.Name] = newExtension
- }
-
- return nil
- },
- func(in *map[string]runtime.Object, out *[]NamedExtension, s conversion.Scope) error {
- allKeys := make([]string, 0, len(*in))
- for key := range *in {
- allKeys = append(allKeys, key)
- }
- sort.Strings(allKeys)
-
- for _, key := range allKeys {
- newExtension := (*in)[key]
- oldExtension := &runtime.RawExtension{}
- if err := s.Convert(newExtension, oldExtension, 0); err != nil {
- return err
- }
-
- namedExtension := NamedExtension{key, *oldExtension}
- *out = append(*out, namedExtension)
- }
-
- return nil
- },
- )
- if err != nil {
- // If one of the conversion functions is malformed, detect it immediately.
- panic(err)
- }
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/register.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/register.go
deleted file mode 100644
index dcdb533..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/register.go
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package v1
-
-import (
- "k8s.io/kubernetes/pkg/api/unversioned"
- "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
-)
-
-// SchemeGroupVersion is group version used to register these objects
-// TODO this should be in the "kubeconfig" group
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
-
-func init() {
- api.Scheme.AddKnownTypes(SchemeGroupVersion,
- &Config{},
- )
-}
-
-func (obj *Config) GetObjectKind() unversioned.ObjectKind { return obj }
-func (obj *Config) SetGroupVersionKind(gvk unversioned.GroupVersionKind) {
- obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind()
-}
-func (obj *Config) GroupVersionKind() unversioned.GroupVersionKind {
- return unversioned.FromAPIVersionAndKind(obj.APIVersion, obj.Kind)
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/types.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/types.go
deleted file mode 100644
index 77bce80..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/types.go
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package v1
-
-import (
- "k8s.io/kubernetes/pkg/runtime"
-)
-
-// Where possible, json tags match the cli argument names.
-// Top level config objects and all values required for proper functioning are not "omitempty". Any truly optional piece of config is allowed to be omitted.
-
-// Config holds the information needed to build connect to remote kubernetes clusters as a given user
-type Config struct {
- // Legacy field from pkg/api/types.go TypeMeta.
- // TODO(jlowdermilk): remove this after eliminating downstream dependencies.
- Kind string `json:"kind,omitempty"`
- // DEPRECATED: APIVersion is the preferred api version for communicating with the kubernetes cluster (v1, v2, etc).
- // Because a cluster can run multiple API groups and potentially multiple versions of each, it no longer makes sense to specify
- // a single value for the cluster version.
- // This field isn't really needed anyway, so we are deprecating it without replacement.
- // It will be ignored if it is present.
- APIVersion string `json:"apiVersion,omitempty"`
- // Preferences holds general information to be use for cli interactions
- Preferences Preferences `json:"preferences"`
- // Clusters is a map of referencable names to cluster configs
- Clusters []NamedCluster `json:"clusters"`
- // AuthInfos is a map of referencable names to user configs
- AuthInfos []NamedAuthInfo `json:"users"`
- // Contexts is a map of referencable names to context configs
- Contexts []NamedContext `json:"contexts"`
- // CurrentContext is the name of the context that you would like to use by default
- CurrentContext string `json:"current-context"`
- // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
- Extensions []NamedExtension `json:"extensions,omitempty"`
-}
-
-type Preferences struct {
- Colors bool `json:"colors,omitempty"`
- // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
- Extensions []NamedExtension `json:"extensions,omitempty"`
-}
-
-// Cluster contains information about how to communicate with a kubernetes cluster
-type Cluster struct {
- // Server is the address of the kubernetes cluster (https://hostname:port).
- Server string `json:"server"`
- // APIVersion is the preferred api version for communicating with the kubernetes cluster (v1, v2, etc).
- APIVersion string `json:"api-version,omitempty"`
- // InsecureSkipTLSVerify skips the validity check for the server's certificate. This will make your HTTPS connections insecure.
- InsecureSkipTLSVerify bool `json:"insecure-skip-tls-verify,omitempty"`
- // CertificateAuthority is the path to a cert file for the certificate authority.
- CertificateAuthority string `json:"certificate-authority,omitempty"`
- // CertificateAuthorityData contains PEM-encoded certificate authority certificates. Overrides CertificateAuthority
- CertificateAuthorityData []byte `json:"certificate-authority-data,omitempty"`
- // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
- Extensions []NamedExtension `json:"extensions,omitempty"`
-}
-
-// AuthInfo contains information that describes identity information. This is use to tell the kubernetes cluster who you are.
-type AuthInfo struct {
- // ClientCertificate is the path to a client cert file for TLS.
- ClientCertificate string `json:"client-certificate,omitempty"`
- // ClientCertificateData contains PEM-encoded data from a client cert file for TLS. Overrides ClientCertificate
- ClientCertificateData []byte `json:"client-certificate-data,omitempty"`
- // ClientKey is the path to a client key file for TLS.
- ClientKey string `json:"client-key,omitempty"`
- // ClientKeyData contains PEM-encoded data from a client key file for TLS. Overrides ClientKey
- ClientKeyData []byte `json:"client-key-data,omitempty"`
- // Token is the bearer token for authentication to the kubernetes cluster.
- Token string `json:"token,omitempty"`
- // Impersonate is the username to imperonate. The name matches the flag.
- Impersonate string `json:"as,omitempty"`
- // Username is the username for basic authentication to the kubernetes cluster.
- Username string `json:"username,omitempty"`
- // Password is the password for basic authentication to the kubernetes cluster.
- Password string `json:"password,omitempty"`
- // AuthProvider specifies a custom authentication plugin for the kubernetes cluster.
- AuthProvider *AuthProviderConfig `json:"auth-provider,omitempty"`
- // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
- Extensions []NamedExtension `json:"extensions,omitempty"`
-}
-
-// Context is a tuple of references to a cluster (how do I communicate with a kubernetes cluster), a user (how do I identify myself), and a namespace (what subset of resources do I want to work with)
-type Context struct {
- // Cluster is the name of the cluster for this context
- Cluster string `json:"cluster"`
- // AuthInfo is the name of the authInfo for this context
- AuthInfo string `json:"user"`
- // Namespace is the default namespace to use on unspecified requests
- Namespace string `json:"namespace,omitempty"`
- // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
- Extensions []NamedExtension `json:"extensions,omitempty"`
-}
-
-// NamedCluster relates nicknames to cluster information
-type NamedCluster struct {
- // Name is the nickname for this Cluster
- Name string `json:"name"`
- // Cluster holds the cluster information
- Cluster Cluster `json:"cluster"`
-}
-
-// NamedContext relates nicknames to context information
-type NamedContext struct {
- // Name is the nickname for this Context
- Name string `json:"name"`
- // Context holds the context information
- Context Context `json:"context"`
-}
-
-// NamedAuthInfo relates nicknames to auth information
-type NamedAuthInfo struct {
- // Name is the nickname for this AuthInfo
- Name string `json:"name"`
- // AuthInfo holds the auth information
- AuthInfo AuthInfo `json:"user"`
-}
-
-// NamedExtension relates nicknames to extension information
-type NamedExtension struct {
- // Name is the nickname for this Extension
- Name string `json:"name"`
- // Extension holds the extension information
- Extension runtime.RawExtension `json:"extension"`
-}
-
-// AuthProviderConfig holds the configuration for a specified auth provider.
-type AuthProviderConfig struct {
- Name string `json:"name"`
- Config map[string]string `json:"config"`
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/auth_loaders.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/auth_loaders.go
deleted file mode 100644
index 0abc425..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/auth_loaders.go
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package clientcmd
-
-import (
- "encoding/json"
- "fmt"
- "io"
- "io/ioutil"
- "os"
-
- clientauth "k8s.io/kubernetes/pkg/client/unversioned/auth"
-)
-
-// AuthLoaders are used to build clientauth.Info objects.
-type AuthLoader interface {
- // LoadAuth takes a path to a config file and can then do anything it needs in order to return a valid clientauth.Info
- LoadAuth(path string) (*clientauth.Info, error)
-}
-
-// default implementation of an AuthLoader
-type defaultAuthLoader struct{}
-
-// LoadAuth for defaultAuthLoader simply delegates to clientauth.LoadFromFile
-func (*defaultAuthLoader) LoadAuth(path string) (*clientauth.Info, error) {
- return clientauth.LoadFromFile(path)
-}
-
-type PromptingAuthLoader struct {
- reader io.Reader
-}
-
-// LoadAuth parses an AuthInfo object from a file path. It prompts user and creates file if it doesn't exist.
-func (a *PromptingAuthLoader) LoadAuth(path string) (*clientauth.Info, error) {
- var auth clientauth.Info
- // Prompt for user/pass and write a file if none exists.
- if _, err := os.Stat(path); os.IsNotExist(err) {
- auth = *a.Prompt()
- data, err := json.Marshal(auth)
- if err != nil {
- return &auth, err
- }
- err = ioutil.WriteFile(path, data, 0600)
- return &auth, err
- }
- authPtr, err := clientauth.LoadFromFile(path)
- if err != nil {
- return nil, err
- }
- return authPtr, nil
-}
-
-// Prompt pulls the user and password from a reader
-func (a *PromptingAuthLoader) Prompt() *clientauth.Info {
- auth := &clientauth.Info{}
- auth.User = promptForString("Username", a.reader)
- auth.Password = promptForString("Password", a.reader)
-
- return auth
-}
-
-func promptForString(field string, r io.Reader) string {
- fmt.Printf("Please enter %s: ", field)
- var result string
- fmt.Fscan(r, &result)
- return result
-}
-
-// NewPromptingAuthLoader is an AuthLoader that parses an AuthInfo object from a file path. It prompts user and creates file if it doesn't exist.
-func NewPromptingAuthLoader(reader io.Reader) *PromptingAuthLoader {
- return &PromptingAuthLoader{reader}
-}
-
-// NewDefaultAuthLoader returns a default implementation of an AuthLoader that only reads from a config file
-func NewDefaultAuthLoader() AuthLoader {
- return &defaultAuthLoader{}
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/client_config.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/client_config.go
deleted file mode 100644
index 47b14e2..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/client_config.go
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package clientcmd
-
-import (
- "fmt"
- "io"
- "io/ioutil"
- "net/url"
- "os"
- "strings"
-
- "github.com/golang/glog"
- "github.com/imdario/mergo"
-
- "k8s.io/kubernetes/pkg/api"
- "k8s.io/kubernetes/pkg/client/restclient"
- clientauth "k8s.io/kubernetes/pkg/client/unversioned/auth"
- clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
-)
-
-var (
- // DefaultCluster is the cluster config used when no other config is specified
- // TODO: eventually apiserver should start on 443 and be secure by default
- DefaultCluster = clientcmdapi.Cluster{Server: "http://localhost:8080"}
-
- // EnvVarCluster allows overriding the DefaultCluster using an envvar for the server name
- EnvVarCluster = clientcmdapi.Cluster{Server: os.Getenv("KUBERNETES_MASTER")}
-
- DefaultClientConfig = DirectClientConfig{*clientcmdapi.NewConfig(), "", &ConfigOverrides{}, nil, NewDefaultClientConfigLoadingRules()}
-)
-
-// ClientConfig is used to make it easy to get an api server client
-type ClientConfig interface {
- // RawConfig returns the merged result of all overrides
- RawConfig() (clientcmdapi.Config, error)
- // ClientConfig returns a complete client config
- ClientConfig() (*restclient.Config, error)
- // Namespace returns the namespace resulting from the merged
- // result of all overrides and a boolean indicating if it was
- // overridden
- Namespace() (string, bool, error)
- // ConfigAccess returns the rules for loading/persisting the config.
- ConfigAccess() ConfigAccess
-}
-
-type PersistAuthProviderConfigForUser func(user string) restclient.AuthProviderConfigPersister
-
-// DirectClientConfig is a ClientConfig interface that is backed by a clientcmdapi.Config, options overrides, and an optional fallbackReader for auth information
-type DirectClientConfig struct {
- config clientcmdapi.Config
- contextName string
- overrides *ConfigOverrides
- fallbackReader io.Reader
- configAccess ConfigAccess
-}
-
-// NewDefaultClientConfig creates a DirectClientConfig using the config.CurrentContext as the context name
-func NewDefaultClientConfig(config clientcmdapi.Config, overrides *ConfigOverrides) ClientConfig {
- return &DirectClientConfig{config, config.CurrentContext, overrides, nil, NewDefaultClientConfigLoadingRules()}
-}
-
-// NewNonInteractiveClientConfig creates a DirectClientConfig using the passed context name and does not have a fallback reader for auth information
-func NewNonInteractiveClientConfig(config clientcmdapi.Config, contextName string, overrides *ConfigOverrides, configAccess ConfigAccess) ClientConfig {
- return &DirectClientConfig{config, contextName, overrides, nil, configAccess}
-}
-
-// NewInteractiveClientConfig creates a DirectClientConfig using the passed context name and a reader in case auth information is not provided via files or flags
-func NewInteractiveClientConfig(config clientcmdapi.Config, contextName string, overrides *ConfigOverrides, fallbackReader io.Reader, configAccess ConfigAccess) ClientConfig {
- return &DirectClientConfig{config, contextName, overrides, fallbackReader, configAccess}
-}
-
-func (config *DirectClientConfig) RawConfig() (clientcmdapi.Config, error) {
- return config.config, nil
-}
-
-// ClientConfig implements ClientConfig
-func (config *DirectClientConfig) ClientConfig() (*restclient.Config, error) {
- if err := config.ConfirmUsable(); err != nil {
- return nil, err
- }
-
- configAuthInfo := config.getAuthInfo()
- configClusterInfo := config.getCluster()
-
- clientConfig := &restclient.Config{}
- clientConfig.Host = configClusterInfo.Server
- if u, err := url.ParseRequestURI(clientConfig.Host); err == nil && u.Opaque == "" && len(u.Path) > 1 {
- u.RawQuery = ""
- u.Fragment = ""
- clientConfig.Host = u.String()
- }
- if len(configAuthInfo.Impersonate) > 0 {
- clientConfig.Impersonate = configAuthInfo.Impersonate
- }
-
- // only try to read the auth information if we are secure
- if restclient.IsConfigTransportTLS(*clientConfig) {
- var err error
-
- // mergo is a first write wins for map value and a last writing wins for interface values
- // NOTE: This behavior changed with https://github.com/imdario/mergo/commit/d304790b2ed594794496464fadd89d2bb266600a.
- // Our mergo.Merge version is older than this change.
- var persister restclient.AuthProviderConfigPersister
- if config.configAccess != nil {
- persister = PersisterForUser(config.configAccess, config.getAuthInfoName())
- }
- userAuthPartialConfig, err := getUserIdentificationPartialConfig(configAuthInfo, config.fallbackReader, persister)
- if err != nil {
- return nil, err
- }
- mergo.Merge(clientConfig, userAuthPartialConfig)
-
- serverAuthPartialConfig, err := getServerIdentificationPartialConfig(configAuthInfo, configClusterInfo)
- if err != nil {
- return nil, err
- }
- mergo.Merge(clientConfig, serverAuthPartialConfig)
- }
-
- return clientConfig, nil
-}
-
-// clientauth.Info object contain both user identification and server identification. We want different precedence orders for
-// both, so we have to split the objects and merge them separately
-// we want this order of precedence for the server identification
-// 1. configClusterInfo (the final result of command line flags and merged .kubeconfig files)
-// 2. configAuthInfo.auth-path (this file can contain information that conflicts with #1, and we want #1 to win the priority)
-// 3. load the ~/.kubernetes_auth file as a default
-func getServerIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, configClusterInfo clientcmdapi.Cluster) (*restclient.Config, error) {
- mergedConfig := &restclient.Config{}
-
- // configClusterInfo holds the information identify the server provided by .kubeconfig
- configClientConfig := &restclient.Config{}
- configClientConfig.CAFile = configClusterInfo.CertificateAuthority
- configClientConfig.CAData = configClusterInfo.CertificateAuthorityData
- configClientConfig.Insecure = configClusterInfo.InsecureSkipTLSVerify
- mergo.Merge(mergedConfig, configClientConfig)
-
- return mergedConfig, nil
-}
-
-// clientauth.Info object contain both user identification and server identification. We want different precedence orders for
-// both, so we have to split the objects and merge them separately
-// we want this order of precedence for user identifcation
-// 1. configAuthInfo minus auth-path (the final result of command line flags and merged .kubeconfig files)
-// 2. configAuthInfo.auth-path (this file can contain information that conflicts with #1, and we want #1 to win the priority)
-// 3. if there is not enough information to idenfity the user, load try the ~/.kubernetes_auth file
-// 4. if there is not enough information to identify the user, prompt if possible
-func getUserIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, fallbackReader io.Reader, persistAuthConfig restclient.AuthProviderConfigPersister) (*restclient.Config, error) {
- mergedConfig := &restclient.Config{}
-
- // blindly overwrite existing values based on precedence
- if len(configAuthInfo.Token) > 0 {
- mergedConfig.BearerToken = configAuthInfo.Token
- }
- if len(configAuthInfo.Impersonate) > 0 {
- mergedConfig.Impersonate = configAuthInfo.Impersonate
- }
- if len(configAuthInfo.ClientCertificate) > 0 || len(configAuthInfo.ClientCertificateData) > 0 {
- mergedConfig.CertFile = configAuthInfo.ClientCertificate
- mergedConfig.CertData = configAuthInfo.ClientCertificateData
- mergedConfig.KeyFile = configAuthInfo.ClientKey
- mergedConfig.KeyData = configAuthInfo.ClientKeyData
- }
- if len(configAuthInfo.Username) > 0 || len(configAuthInfo.Password) > 0 {
- mergedConfig.Username = configAuthInfo.Username
- mergedConfig.Password = configAuthInfo.Password
- }
- if configAuthInfo.AuthProvider != nil {
- mergedConfig.AuthProvider = configAuthInfo.AuthProvider
- mergedConfig.AuthConfigPersister = persistAuthConfig
- }
-
- // if there still isn't enough information to authenticate the user, try prompting
- if !canIdentifyUser(*mergedConfig) && (fallbackReader != nil) {
- prompter := NewPromptingAuthLoader(fallbackReader)
- promptedAuthInfo := prompter.Prompt()
-
- promptedConfig := makeUserIdentificationConfig(*promptedAuthInfo)
- previouslyMergedConfig := mergedConfig
- mergedConfig = &restclient.Config{}
- mergo.Merge(mergedConfig, promptedConfig)
- mergo.Merge(mergedConfig, previouslyMergedConfig)
- }
-
- return mergedConfig, nil
-}
-
-// makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only user identification information
-func makeUserIdentificationConfig(info clientauth.Info) *restclient.Config {
- config := &restclient.Config{}
- config.Username = info.User
- config.Password = info.Password
- config.CertFile = info.CertFile
- config.KeyFile = info.KeyFile
- config.BearerToken = info.BearerToken
- return config
-}
-
-// makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only server identification information
-func makeServerIdentificationConfig(info clientauth.Info) restclient.Config {
- config := restclient.Config{}
- config.CAFile = info.CAFile
- if info.Insecure != nil {
- config.Insecure = *info.Insecure
- }
- return config
-}
-
-func canIdentifyUser(config restclient.Config) bool {
- return len(config.Username) > 0 ||
- (len(config.CertFile) > 0 || len(config.CertData) > 0) ||
- len(config.BearerToken) > 0 ||
- config.AuthProvider != nil
-}
-
-// Namespace implements ClientConfig
-func (config *DirectClientConfig) Namespace() (string, bool, error) {
- if err := config.ConfirmUsable(); err != nil {
- return "", false, err
- }
-
- configContext := config.getContext()
-
- if len(configContext.Namespace) == 0 {
- return api.NamespaceDefault, false, nil
- }
-
- overridden := false
- if config.overrides != nil && config.overrides.Context.Namespace != "" {
- overridden = true
- }
- return configContext.Namespace, overridden, nil
-}
-
-// ConfigAccess implements ClientConfig
-func (config *DirectClientConfig) ConfigAccess() ConfigAccess {
- return config.configAccess
-}
-
-// ConfirmUsable looks a particular context and determines if that particular part of the config is useable. There might still be errors in the config,
-// but no errors in the sections requested or referenced. It does not return early so that it can find as many errors as possible.
-func (config *DirectClientConfig) ConfirmUsable() error {
- validationErrors := make([]error, 0)
- validationErrors = append(validationErrors, validateAuthInfo(config.getAuthInfoName(), config.getAuthInfo())...)
- validationErrors = append(validationErrors, validateClusterInfo(config.getClusterName(), config.getCluster())...)
- // when direct client config is specified, and our only error is that no server is defined, we should
- // return a standard "no config" error
- if len(validationErrors) == 1 && validationErrors[0] == ErrEmptyCluster {
- return newErrConfigurationInvalid([]error{ErrEmptyConfig})
- }
- return newErrConfigurationInvalid(validationErrors)
-}
-
-func (config *DirectClientConfig) getContextName() string {
- if len(config.overrides.CurrentContext) != 0 {
- return config.overrides.CurrentContext
- }
- if len(config.contextName) != 0 {
- return config.contextName
- }
-
- return config.config.CurrentContext
-}
-
-func (config *DirectClientConfig) getAuthInfoName() string {
- if len(config.overrides.Context.AuthInfo) != 0 {
- return config.overrides.Context.AuthInfo
- }
- return config.getContext().AuthInfo
-}
-
-func (config *DirectClientConfig) getClusterName() string {
- if len(config.overrides.Context.Cluster) != 0 {
- return config.overrides.Context.Cluster
- }
- return config.getContext().Cluster
-}
-
-func (config *DirectClientConfig) getContext() clientcmdapi.Context {
- contexts := config.config.Contexts
- contextName := config.getContextName()
-
- var mergedContext clientcmdapi.Context
- if configContext, exists := contexts[contextName]; exists {
- mergo.Merge(&mergedContext, configContext)
- }
- mergo.Merge(&mergedContext, config.overrides.Context)
-
- return mergedContext
-}
-
-func (config *DirectClientConfig) getAuthInfo() clientcmdapi.AuthInfo {
- authInfos := config.config.AuthInfos
- authInfoName := config.getAuthInfoName()
-
- var mergedAuthInfo clientcmdapi.AuthInfo
- if configAuthInfo, exists := authInfos[authInfoName]; exists {
- mergo.Merge(&mergedAuthInfo, configAuthInfo)
- }
- mergo.Merge(&mergedAuthInfo, config.overrides.AuthInfo)
-
- return mergedAuthInfo
-}
-
-func (config *DirectClientConfig) getCluster() clientcmdapi.Cluster {
- clusterInfos := config.config.Clusters
- clusterInfoName := config.getClusterName()
-
- var mergedClusterInfo clientcmdapi.Cluster
- mergo.Merge(&mergedClusterInfo, DefaultCluster)
- mergo.Merge(&mergedClusterInfo, EnvVarCluster)
- if configClusterInfo, exists := clusterInfos[clusterInfoName]; exists {
- mergo.Merge(&mergedClusterInfo, configClusterInfo)
- }
- mergo.Merge(&mergedClusterInfo, config.overrides.ClusterInfo)
- // An override of --insecure-skip-tls-verify=true and no accompanying CA/CA data should clear already-set CA/CA data
- // otherwise, a kubeconfig containing a CA reference would return an error that "CA and insecure-skip-tls-verify couldn't both be set"
- caLen := len(config.overrides.ClusterInfo.CertificateAuthority)
- caDataLen := len(config.overrides.ClusterInfo.CertificateAuthorityData)
- if config.overrides.ClusterInfo.InsecureSkipTLSVerify && caLen == 0 && caDataLen == 0 {
- mergedClusterInfo.CertificateAuthority = ""
- mergedClusterInfo.CertificateAuthorityData = nil
- }
-
- return mergedClusterInfo
-}
-
-// inClusterClientConfig makes a config that will work from within a kubernetes cluster container environment.
-type inClusterClientConfig struct{}
-
-func (inClusterClientConfig) RawConfig() (clientcmdapi.Config, error) {
- return clientcmdapi.Config{}, fmt.Errorf("inCluster environment config doesn't support multiple clusters")
-}
-
-func (inClusterClientConfig) ClientConfig() (*restclient.Config, error) {
- return restclient.InClusterConfig()
-}
-
-func (inClusterClientConfig) Namespace() (string, error) {
- // This way assumes you've set the POD_NAMESPACE environment variable using the downward API.
- // This check has to be done first for backwards compatibility with the way InClusterConfig was originally set up
- if ns := os.Getenv("POD_NAMESPACE"); ns != "" {
- return ns, nil
- }
-
- // Fall back to the namespace associated with the service account token, if available
- if data, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace"); err == nil {
- if ns := strings.TrimSpace(string(data)); len(ns) > 0 {
- return ns, nil
- }
- }
-
- return "default", nil
-}
-
-func (inClusterClientConfig) ConfigAccess() ConfigAccess {
- return NewDefaultClientConfigLoadingRules()
-}
-
-// Possible returns true if loading an inside-kubernetes-cluster is possible.
-func (inClusterClientConfig) Possible() bool {
- fi, err := os.Stat("/var/run/secrets/kubernetes.io/serviceaccount/token")
- return os.Getenv("KUBERNETES_SERVICE_HOST") != "" &&
- os.Getenv("KUBERNETES_SERVICE_PORT") != "" &&
- err == nil && !fi.IsDir()
-}
-
-// BuildConfigFromFlags is a helper function that builds configs from a master
-// url or a kubeconfig filepath. These are passed in as command line flags for cluster
-// components. Warnings should reflect this usage. If neither masterUrl or kubeconfigPath
-// are passed in we fallback to inClusterConfig. If inClusterConfig fails, we fallback
-// to the default config.
-func BuildConfigFromFlags(masterUrl, kubeconfigPath string) (*restclient.Config, error) {
- if kubeconfigPath == "" && masterUrl == "" {
- glog.Warningf("Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.")
- kubeconfig, err := restclient.InClusterConfig()
- if err == nil {
- return kubeconfig, nil
- }
- glog.Warning("error creating inClusterConfig, falling back to default config: ", err)
- }
- return NewNonInteractiveDeferredLoadingClientConfig(
- &ClientConfigLoadingRules{ExplicitPath: kubeconfigPath},
- &ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: masterUrl}}).ClientConfig()
-}
-
-// BuildConfigFromKubeconfigGetter is a helper function that builds configs from a master
-// url and a kubeconfigGetter.
-func BuildConfigFromKubeconfigGetter(masterUrl string, kubeconfigGetter KubeconfigGetter) (*restclient.Config, error) {
- // TODO: We do not need a DeferredLoader here. Refactor code and see if we can use DirectClientConfig here.
- cc := NewNonInteractiveDeferredLoadingClientConfig(
- &ClientConfigGetter{kubeconfigGetter: kubeconfigGetter},
- &ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: masterUrl}})
- return cc.ClientConfig()
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/config.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/config.go
deleted file mode 100644
index 9df69a7..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/config.go
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package clientcmd
-
-import (
- "errors"
- "os"
- "path"
- "path/filepath"
- "reflect"
- "sort"
-
- "github.com/golang/glog"
-
- "k8s.io/kubernetes/pkg/client/restclient"
- clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
-)
-
-// ConfigAccess is used by subcommands and methods in this package to load and modify the appropriate config files
-type ConfigAccess interface {
- // GetLoadingPrecedence returns the slice of files that should be used for loading and inspecting the config
- GetLoadingPrecedence() []string
- // GetStartingConfig returns the config that subcommands should being operating against. It may or may not be merged depending on loading rules
- GetStartingConfig() (*clientcmdapi.Config, error)
- // GetDefaultFilename returns the name of the file you should write into (create if necessary), if you're trying to create a new stanza as opposed to updating an existing one.
- GetDefaultFilename() string
- // IsExplicitFile indicates whether or not this command is interested in exactly one file. This implementation only ever does that via a flag, but implementations that handle local, global, and flags may have more
- IsExplicitFile() bool
- // GetExplicitFile returns the particular file this command is operating against. This implementation only ever has one, but implementations that handle local, global, and flags may have more
- GetExplicitFile() string
-}
-
-type PathOptions struct {
- // GlobalFile is the full path to the file to load as the global (final) option
- GlobalFile string
- // EnvVar is the env var name that points to the list of kubeconfig files to load
- EnvVar string
- // ExplicitFileFlag is the name of the flag to use for prompting for the kubeconfig file
- ExplicitFileFlag string
-
- // GlobalFileSubpath is an optional value used for displaying help
- GlobalFileSubpath string
-
- LoadingRules *ClientConfigLoadingRules
-}
-
-func (o *PathOptions) GetEnvVarFiles() []string {
- if len(o.EnvVar) == 0 {
- return []string{}
- }
-
- envVarValue := os.Getenv(o.EnvVar)
- if len(envVarValue) == 0 {
- return []string{}
- }
-
- return filepath.SplitList(envVarValue)
-}
-
-func (o *PathOptions) GetLoadingPrecedence() []string {
- if envVarFiles := o.GetEnvVarFiles(); len(envVarFiles) > 0 {
- return envVarFiles
- }
-
- return []string{o.GlobalFile}
-}
-
-func (o *PathOptions) GetStartingConfig() (*clientcmdapi.Config, error) {
- // don't mutate the original
- loadingRules := *o.LoadingRules
- loadingRules.Precedence = o.GetLoadingPrecedence()
-
- clientConfig := NewNonInteractiveDeferredLoadingClientConfig(&loadingRules, &ConfigOverrides{})
- rawConfig, err := clientConfig.RawConfig()
- if os.IsNotExist(err) {
- return clientcmdapi.NewConfig(), nil
- }
- if err != nil {
- return nil, err
- }
-
- return &rawConfig, nil
-}
-
-func (o *PathOptions) GetDefaultFilename() string {
- if o.IsExplicitFile() {
- return o.GetExplicitFile()
- }
-
- if envVarFiles := o.GetEnvVarFiles(); len(envVarFiles) > 0 {
- if len(envVarFiles) == 1 {
- return envVarFiles[0]
- }
-
- // if any of the envvar files already exists, return it
- for _, envVarFile := range envVarFiles {
- if _, err := os.Stat(envVarFile); err == nil {
- return envVarFile
- }
- }
-
- // otherwise, return the last one in the list
- return envVarFiles[len(envVarFiles)-1]
- }
-
- return o.GlobalFile
-}
-
-func (o *PathOptions) IsExplicitFile() bool {
- if len(o.LoadingRules.ExplicitPath) > 0 {
- return true
- }
-
- return false
-}
-
-func (o *PathOptions) GetExplicitFile() string {
- return o.LoadingRules.ExplicitPath
-}
-
-func NewDefaultPathOptions() *PathOptions {
- ret := &PathOptions{
- GlobalFile: RecommendedHomeFile,
- EnvVar: RecommendedConfigPathEnvVar,
- ExplicitFileFlag: RecommendedConfigPathFlag,
-
- GlobalFileSubpath: path.Join(RecommendedHomeDir, RecommendedFileName),
-
- LoadingRules: NewDefaultClientConfigLoadingRules(),
- }
- ret.LoadingRules.DoNotResolvePaths = true
-
- return ret
-}
-
-// ModifyConfig takes a Config object, iterates through Clusters, AuthInfos, and Contexts, uses the LocationOfOrigin if specified or
-// uses the default destination file to write the results into. This results in multiple file reads, but it's very easy to follow.
-// Preferences and CurrentContext should always be set in the default destination file. Since we can't distinguish between empty and missing values
-// (no nil strings), we're forced have separate handling for them. In the kubeconfig cases, newConfig should have at most one difference,
-// that means that this code will only write into a single file. If you want to relativizePaths, you must provide a fully qualified path in any
-// modified element.
-func ModifyConfig(configAccess ConfigAccess, newConfig clientcmdapi.Config, relativizePaths bool) error {
- possibleSources := configAccess.GetLoadingPrecedence()
- // sort the possible kubeconfig files so we always "lock" in the same order
- // to avoid deadlock (note: this can fail w/ symlinks, but... come on).
- sort.Strings(possibleSources)
- for _, filename := range possibleSources {
- if err := lockFile(filename); err != nil {
- return err
- }
- defer unlockFile(filename)
- }
-
- startingConfig, err := configAccess.GetStartingConfig()
- if err != nil {
- return err
- }
-
- // We need to find all differences, locate their original files, read a partial config to modify only that stanza and write out the file.
- // Special case the test for current context and preferences since those always write to the default file.
- if reflect.DeepEqual(*startingConfig, newConfig) {
- // nothing to do
- return nil
- }
-
- if startingConfig.CurrentContext != newConfig.CurrentContext {
- if err := writeCurrentContext(configAccess, newConfig.CurrentContext); err != nil {
- return err
- }
- }
-
- if !reflect.DeepEqual(startingConfig.Preferences, newConfig.Preferences) {
- if err := writePreferences(configAccess, newConfig.Preferences); err != nil {
- return err
- }
- }
-
- // Search every cluster, authInfo, and context. First from new to old for differences, then from old to new for deletions
- for key, cluster := range newConfig.Clusters {
- startingCluster, exists := startingConfig.Clusters[key]
- if !reflect.DeepEqual(cluster, startingCluster) || !exists {
- destinationFile := cluster.LocationOfOrigin
- if len(destinationFile) == 0 {
- destinationFile = configAccess.GetDefaultFilename()
- }
-
- configToWrite, err := getConfigFromFile(destinationFile)
- if err != nil {
- return err
- }
- t := *cluster
-
- configToWrite.Clusters[key] = &t
- configToWrite.Clusters[key].LocationOfOrigin = destinationFile
- if relativizePaths {
- if err := RelativizeClusterLocalPaths(configToWrite.Clusters[key]); err != nil {
- return err
- }
- }
-
- if err := WriteToFile(*configToWrite, destinationFile); err != nil {
- return err
- }
- }
- }
-
- for key, context := range newConfig.Contexts {
- startingContext, exists := startingConfig.Contexts[key]
- if !reflect.DeepEqual(context, startingContext) || !exists {
- destinationFile := context.LocationOfOrigin
- if len(destinationFile) == 0 {
- destinationFile = configAccess.GetDefaultFilename()
- }
-
- configToWrite, err := getConfigFromFile(destinationFile)
- if err != nil {
- return err
- }
- configToWrite.Contexts[key] = context
-
- if err := WriteToFile(*configToWrite, destinationFile); err != nil {
- return err
- }
- }
- }
-
- for key, authInfo := range newConfig.AuthInfos {
- startingAuthInfo, exists := startingConfig.AuthInfos[key]
- if !reflect.DeepEqual(authInfo, startingAuthInfo) || !exists {
- destinationFile := authInfo.LocationOfOrigin
- if len(destinationFile) == 0 {
- destinationFile = configAccess.GetDefaultFilename()
- }
-
- configToWrite, err := getConfigFromFile(destinationFile)
- if err != nil {
- return err
- }
- t := *authInfo
- configToWrite.AuthInfos[key] = &t
- configToWrite.AuthInfos[key].LocationOfOrigin = destinationFile
- if relativizePaths {
- if err := RelativizeAuthInfoLocalPaths(configToWrite.AuthInfos[key]); err != nil {
- return err
- }
- }
-
- if err := WriteToFile(*configToWrite, destinationFile); err != nil {
- return err
- }
- }
- }
-
- for key, cluster := range startingConfig.Clusters {
- if _, exists := newConfig.Clusters[key]; !exists {
- destinationFile := cluster.LocationOfOrigin
- if len(destinationFile) == 0 {
- destinationFile = configAccess.GetDefaultFilename()
- }
-
- configToWrite, err := getConfigFromFile(destinationFile)
- if err != nil {
- return err
- }
- delete(configToWrite.Clusters, key)
-
- if err := WriteToFile(*configToWrite, destinationFile); err != nil {
- return err
- }
- }
- }
-
- for key, context := range startingConfig.Contexts {
- if _, exists := newConfig.Contexts[key]; !exists {
- destinationFile := context.LocationOfOrigin
- if len(destinationFile) == 0 {
- destinationFile = configAccess.GetDefaultFilename()
- }
-
- configToWrite, err := getConfigFromFile(destinationFile)
- if err != nil {
- return err
- }
- delete(configToWrite.Contexts, key)
-
- if err := WriteToFile(*configToWrite, destinationFile); err != nil {
- return err
- }
- }
- }
-
- for key, authInfo := range startingConfig.AuthInfos {
- if _, exists := newConfig.AuthInfos[key]; !exists {
- destinationFile := authInfo.LocationOfOrigin
- if len(destinationFile) == 0 {
- destinationFile = configAccess.GetDefaultFilename()
- }
-
- configToWrite, err := getConfigFromFile(destinationFile)
- if err != nil {
- return err
- }
- delete(configToWrite.AuthInfos, key)
-
- if err := WriteToFile(*configToWrite, destinationFile); err != nil {
- return err
- }
- }
- }
-
- return nil
-}
-
-func PersisterForUser(configAccess ConfigAccess, user string) restclient.AuthProviderConfigPersister {
- return &persister{configAccess, user}
-}
-
-type persister struct {
- configAccess ConfigAccess
- user string
-}
-
-func (p *persister) Persist(config map[string]string) error {
- newConfig, err := p.configAccess.GetStartingConfig()
- if err != nil {
- return err
- }
- authInfo, ok := newConfig.AuthInfos[p.user]
- if ok && authInfo.AuthProvider != nil {
- authInfo.AuthProvider.Config = config
- ModifyConfig(p.configAccess, *newConfig, false)
- }
- return nil
-}
-
-// writeCurrentContext takes three possible paths.
-// If newCurrentContext is the same as the startingConfig's current context, then we exit.
-// If newCurrentContext has a value, then that value is written into the default destination file.
-// If newCurrentContext is empty, then we find the config file that is setting the CurrentContext and clear the value from that file
-func writeCurrentContext(configAccess ConfigAccess, newCurrentContext string) error {
- if startingConfig, err := configAccess.GetStartingConfig(); err != nil {
- return err
- } else if startingConfig.CurrentContext == newCurrentContext {
- return nil
- }
-
- if configAccess.IsExplicitFile() {
- file := configAccess.GetExplicitFile()
- currConfig, err := getConfigFromFile(file)
- if err != nil {
- return err
- }
- currConfig.CurrentContext = newCurrentContext
- if err := WriteToFile(*currConfig, file); err != nil {
- return err
- }
-
- return nil
- }
-
- if len(newCurrentContext) > 0 {
- destinationFile := configAccess.GetDefaultFilename()
- config, err := getConfigFromFile(destinationFile)
- if err != nil {
- return err
- }
- config.CurrentContext = newCurrentContext
-
- if err := WriteToFile(*config, destinationFile); err != nil {
- return err
- }
-
- return nil
- }
-
- // we're supposed to be clearing the current context. We need to find the first spot in the chain that is setting it and clear it
- for _, file := range configAccess.GetLoadingPrecedence() {
- if _, err := os.Stat(file); err == nil {
- currConfig, err := getConfigFromFile(file)
- if err != nil {
- return err
- }
-
- if len(currConfig.CurrentContext) > 0 {
- currConfig.CurrentContext = newCurrentContext
- if err := WriteToFile(*currConfig, file); err != nil {
- return err
- }
-
- return nil
- }
- }
- }
-
- return errors.New("no config found to write context")
-}
-
-func writePreferences(configAccess ConfigAccess, newPrefs clientcmdapi.Preferences) error {
- if startingConfig, err := configAccess.GetStartingConfig(); err != nil {
- return err
- } else if reflect.DeepEqual(startingConfig.Preferences, newPrefs) {
- return nil
- }
-
- if configAccess.IsExplicitFile() {
- file := configAccess.GetExplicitFile()
- currConfig, err := getConfigFromFile(file)
- if err != nil {
- return err
- }
- currConfig.Preferences = newPrefs
- if err := WriteToFile(*currConfig, file); err != nil {
- return err
- }
-
- return nil
- }
-
- for _, file := range configAccess.GetLoadingPrecedence() {
- currConfig, err := getConfigFromFile(file)
- if err != nil {
- return err
- }
-
- if !reflect.DeepEqual(currConfig.Preferences, newPrefs) {
- currConfig.Preferences = newPrefs
- if err := WriteToFile(*currConfig, file); err != nil {
- return err
- }
-
- return nil
- }
- }
-
- return errors.New("no config found to write preferences")
-}
-
-// getConfigFromFile tries to read a kubeconfig file and if it can't, returns an error. One exception, missing files result in empty configs, not an error.
-func getConfigFromFile(filename string) (*clientcmdapi.Config, error) {
- config, err := LoadFromFile(filename)
- if err != nil && !os.IsNotExist(err) {
- return nil, err
- }
- if config == nil {
- config = clientcmdapi.NewConfig()
- }
- return config, nil
-}
-
-// GetConfigFromFileOrDie tries to read a kubeconfig file and if it can't, it calls exit. One exception, missing files result in empty configs, not an exit
-func GetConfigFromFileOrDie(filename string) *clientcmdapi.Config {
- config, err := getConfigFromFile(filename)
- if err != nil {
- glog.FatalDepth(1, err)
- }
-
- return config
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/doc.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/doc.go
deleted file mode 100644
index 30ef6f3..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/doc.go
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-/*
-Package clientcmd provides one stop shopping for building a working client from a fixed config,
-from a .kubeconfig file, from command line flags, or from any merged combination.
-
-Sample usage from merged .kubeconfig files (local directory, home directory)
-
- loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
- // if you want to change the loading rules (which files in which order), you can do so here
-
- configOverrides := &clientcmd.ConfigOverrides{}
- // if you want to change override values or bind them to flags, there are methods to help you
-
- kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides)
- config, err := kubeConfig.ClientConfig()
- if err != nil {
- // Do something
- }
- client, err := unversioned.New(config)
- // ...
-*/
-package clientcmd
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/loader.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/loader.go
deleted file mode 100644
index 1009406..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/loader.go
+++ /dev/null
@@ -1,585 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package clientcmd
-
-import (
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "path"
- "path/filepath"
- goruntime "runtime"
- "strings"
-
- "github.com/golang/glog"
- "github.com/imdario/mergo"
-
- "k8s.io/kubernetes/pkg/api/unversioned"
- clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
- clientcmdlatest "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/latest"
- "k8s.io/kubernetes/pkg/runtime"
- utilerrors "k8s.io/kubernetes/pkg/util/errors"
- "k8s.io/kubernetes/pkg/util/homedir"
-)
-
-const (
- RecommendedConfigPathFlag = "kubeconfig"
- RecommendedConfigPathEnvVar = "KUBECONFIG"
- RecommendedHomeDir = ".kube"
- RecommendedFileName = "config"
- RecommendedSchemaName = "schema"
-)
-
-var RecommendedHomeFile = path.Join(homedir.HomeDir(), RecommendedHomeDir, RecommendedFileName)
-var RecommendedSchemaFile = path.Join(homedir.HomeDir(), RecommendedHomeDir, RecommendedSchemaName)
-
-// currentMigrationRules returns a map that holds the history of recommended home directories used in previous versions.
-// Any future changes to RecommendedHomeFile and related are expected to add a migration rule here, in order to make
-// sure existing config files are migrated to their new locations properly.
-func currentMigrationRules() map[string]string {
- oldRecommendedHomeFile := path.Join(os.Getenv("HOME"), "/.kube/.kubeconfig")
- oldRecommendedWindowsHomeFile := path.Join(os.Getenv("HOME"), RecommendedHomeDir, RecommendedFileName)
-
- migrationRules := map[string]string{}
- migrationRules[RecommendedHomeFile] = oldRecommendedHomeFile
- if goruntime.GOOS == "windows" {
- migrationRules[RecommendedHomeFile] = oldRecommendedWindowsHomeFile
- }
- return migrationRules
-}
-
-type ClientConfigLoader interface {
- ConfigAccess
- Load() (*clientcmdapi.Config, error)
-}
-
-type KubeconfigGetter func() (*clientcmdapi.Config, error)
-
-type ClientConfigGetter struct {
- kubeconfigGetter KubeconfigGetter
-}
-
-// ClientConfigGetter implements the ClientConfigLoader interface.
-var _ ClientConfigLoader = &ClientConfigGetter{}
-
-func (g *ClientConfigGetter) Load() (*clientcmdapi.Config, error) {
- return g.kubeconfigGetter()
-}
-
-func (g *ClientConfigGetter) GetLoadingPrecedence() []string {
- return nil
-}
-func (g *ClientConfigGetter) GetStartingConfig() (*clientcmdapi.Config, error) {
- return nil, nil
-}
-func (g *ClientConfigGetter) GetDefaultFilename() string {
- return ""
-}
-func (g *ClientConfigGetter) IsExplicitFile() bool {
- return false
-}
-func (g *ClientConfigGetter) GetExplicitFile() string {
- return ""
-}
-
-// ClientConfigLoadingRules is an ExplicitPath and string slice of specific locations that are used for merging together a Config
-// Callers can put the chain together however they want, but we'd recommend:
-// EnvVarPathFiles if set (a list of files if set) OR the HomeDirectoryPath
-// ExplicitPath is special, because if a user specifically requests a certain file be used and error is reported if thie file is not present
-type ClientConfigLoadingRules struct {
- ExplicitPath string
- Precedence []string
-
- // MigrationRules is a map of destination files to source files. If a destination file is not present, then the source file is checked.
- // If the source file is present, then it is copied to the destination file BEFORE any further loading happens.
- MigrationRules map[string]string
-
- // DoNotResolvePaths indicates whether or not to resolve paths with respect to the originating files. This is phrased as a negative so
- // that a default object that doesn't set this will usually get the behavior it wants.
- DoNotResolvePaths bool
-}
-
-// ClientConfigLoadingRules implements the ClientConfigLoader interface.
-var _ ClientConfigLoader = &ClientConfigLoadingRules{}
-
-// NewDefaultClientConfigLoadingRules returns a ClientConfigLoadingRules object with default fields filled in. You are not required to
-// use this constructor
-func NewDefaultClientConfigLoadingRules() *ClientConfigLoadingRules {
- chain := []string{}
-
- envVarFiles := os.Getenv(RecommendedConfigPathEnvVar)
- if len(envVarFiles) != 0 {
- chain = append(chain, filepath.SplitList(envVarFiles)...)
-
- } else {
- chain = append(chain, RecommendedHomeFile)
- }
-
- return &ClientConfigLoadingRules{
- Precedence: chain,
- MigrationRules: currentMigrationRules(),
- }
-}
-
-// Load starts by running the MigrationRules and then
-// takes the loading rules and returns a Config object based on following rules.
-// if the ExplicitPath, return the unmerged explicit file
-// Otherwise, return a merged config based on the Precedence slice
-// A missing ExplicitPath file produces an error. Empty filenames or other missing files are ignored.
-// Read errors or files with non-deserializable content produce errors.
-// The first file to set a particular map key wins and map key's value is never changed.
-// BUT, if you set a struct value that is NOT contained inside of map, the value WILL be changed.
-// This results in some odd looking logic to merge in one direction, merge in the other, and then merge the two.
-// It also means that if two files specify a "red-user", only values from the first file's red-user are used. Even
-// non-conflicting entries from the second file's "red-user" are discarded.
-// Relative paths inside of the .kubeconfig files are resolved against the .kubeconfig file's parent folder
-// and only absolute file paths are returned.
-func (rules *ClientConfigLoadingRules) Load() (*clientcmdapi.Config, error) {
- if err := rules.Migrate(); err != nil {
- return nil, err
- }
-
- errlist := []error{}
-
- kubeConfigFiles := []string{}
-
- // Make sure a file we were explicitly told to use exists
- if len(rules.ExplicitPath) > 0 {
- if _, err := os.Stat(rules.ExplicitPath); os.IsNotExist(err) {
- return nil, err
- }
- kubeConfigFiles = append(kubeConfigFiles, rules.ExplicitPath)
-
- } else {
- kubeConfigFiles = append(kubeConfigFiles, rules.Precedence...)
- }
-
- kubeconfigs := []*clientcmdapi.Config{}
- // read and cache the config files so that we only look at them once
- for _, filename := range kubeConfigFiles {
- if len(filename) == 0 {
- // no work to do
- continue
- }
-
- config, err := LoadFromFile(filename)
- if os.IsNotExist(err) {
- // skip missing files
- continue
- }
- if err != nil {
- errlist = append(errlist, fmt.Errorf("Error loading config file \"%s\": %v", filename, err))
- continue
- }
-
- kubeconfigs = append(kubeconfigs, config)
- }
-
- // first merge all of our maps
- mapConfig := clientcmdapi.NewConfig()
- for _, kubeconfig := range kubeconfigs {
- mergo.Merge(mapConfig, kubeconfig)
- }
-
- // merge all of the struct values in the reverse order so that priority is given correctly
- // errors are not added to the list the second time
- nonMapConfig := clientcmdapi.NewConfig()
- for i := len(kubeconfigs) - 1; i >= 0; i-- {
- kubeconfig := kubeconfigs[i]
- mergo.Merge(nonMapConfig, kubeconfig)
- }
-
- // since values are overwritten, but maps values are not, we can merge the non-map config on top of the map config and
- // get the values we expect.
- config := clientcmdapi.NewConfig()
- mergo.Merge(config, mapConfig)
- mergo.Merge(config, nonMapConfig)
-
- if rules.ResolvePaths() {
- if err := ResolveLocalPaths(config); err != nil {
- errlist = append(errlist, err)
- }
- }
-
- return config, utilerrors.NewAggregate(errlist)
-}
-
-// Migrate uses the MigrationRules map. If a destination file is not present, then the source file is checked.
-// If the source file is present, then it is copied to the destination file BEFORE any further loading happens.
-func (rules *ClientConfigLoadingRules) Migrate() error {
- if rules.MigrationRules == nil {
- return nil
- }
-
- for destination, source := range rules.MigrationRules {
- if _, err := os.Stat(destination); err == nil {
- // if the destination already exists, do nothing
- continue
- } else if os.IsPermission(err) {
- // if we can't access the file, skip it
- continue
- } else if !os.IsNotExist(err) {
- // if we had an error other than non-existence, fail
- return err
- }
-
- if sourceInfo, err := os.Stat(source); err != nil {
- if os.IsNotExist(err) || os.IsPermission(err) {
- // if the source file doesn't exist or we can't access it, there's no work to do.
- continue
- }
-
- // if we had an error other than non-existence, fail
- return err
- } else if sourceInfo.IsDir() {
- return fmt.Errorf("cannot migrate %v to %v because it is a directory", source, destination)
- }
-
- in, err := os.Open(source)
- if err != nil {
- return err
- }
- defer in.Close()
- out, err := os.Create(destination)
- if err != nil {
- return err
- }
- defer out.Close()
-
- if _, err = io.Copy(out, in); err != nil {
- return err
- }
- }
-
- return nil
-}
-
-// GetLoadingPrecedence implements ConfigAccess
-func (rules *ClientConfigLoadingRules) GetLoadingPrecedence() []string {
- return rules.Precedence
-}
-
-// GetStartingConfig implements ConfigAccess
-func (rules *ClientConfigLoadingRules) GetStartingConfig() (*clientcmdapi.Config, error) {
- clientConfig := NewNonInteractiveDeferredLoadingClientConfig(rules, &ConfigOverrides{})
- rawConfig, err := clientConfig.RawConfig()
- if os.IsNotExist(err) {
- return clientcmdapi.NewConfig(), nil
- }
- if err != nil {
- return nil, err
- }
-
- return &rawConfig, nil
-}
-
-// GetDefaultFilename implements ConfigAccess
-func (rules *ClientConfigLoadingRules) GetDefaultFilename() string {
- // Explicit file if we have one.
- if rules.IsExplicitFile() {
- return rules.GetExplicitFile()
- }
- // Otherwise, first existing file from precedence.
- for _, filename := range rules.GetLoadingPrecedence() {
- if _, err := os.Stat(filename); err == nil {
- return filename
- }
- }
- // If none exists, use the first from precedence.
- if len(rules.Precedence) > 0 {
- return rules.Precedence[0]
- }
- return ""
-}
-
-// IsExplicitFile implements ConfigAccess
-func (rules *ClientConfigLoadingRules) IsExplicitFile() bool {
- return len(rules.ExplicitPath) > 0
-}
-
-// GetExplicitFile implements ConfigAccess
-func (rules *ClientConfigLoadingRules) GetExplicitFile() string {
- return rules.ExplicitPath
-}
-
-// LoadFromFile takes a filename and deserializes the contents into Config object
-func LoadFromFile(filename string) (*clientcmdapi.Config, error) {
- kubeconfigBytes, err := ioutil.ReadFile(filename)
- if err != nil {
- return nil, err
- }
- config, err := Load(kubeconfigBytes)
- if err != nil {
- return nil, err
- }
- glog.V(6).Infoln("Config loaded from file", filename)
-
- // set LocationOfOrigin on every Cluster, User, and Context
- for key, obj := range config.AuthInfos {
- obj.LocationOfOrigin = filename
- config.AuthInfos[key] = obj
- }
- for key, obj := range config.Clusters {
- obj.LocationOfOrigin = filename
- config.Clusters[key] = obj
- }
- for key, obj := range config.Contexts {
- obj.LocationOfOrigin = filename
- config.Contexts[key] = obj
- }
-
- if config.AuthInfos == nil {
- config.AuthInfos = map[string]*clientcmdapi.AuthInfo{}
- }
- if config.Clusters == nil {
- config.Clusters = map[string]*clientcmdapi.Cluster{}
- }
- if config.Contexts == nil {
- config.Contexts = map[string]*clientcmdapi.Context{}
- }
-
- return config, nil
-}
-
-// Load takes a byte slice and deserializes the contents into Config object.
-// Encapsulates deserialization without assuming the source is a file.
-func Load(data []byte) (*clientcmdapi.Config, error) {
- config := clientcmdapi.NewConfig()
- // if there's no data in a file, return the default object instead of failing (DecodeInto reject empty input)
- if len(data) == 0 {
- return config, nil
- }
- decoded, _, err := clientcmdlatest.Codec.Decode(data, &unversioned.GroupVersionKind{Version: clientcmdlatest.Version, Kind: "Config"}, config)
- if err != nil {
- return nil, err
- }
- return decoded.(*clientcmdapi.Config), nil
-}
-
-// WriteToFile serializes the config to yaml and writes it out to a file. If not present, it creates the file with the mode 0600. If it is present
-// it stomps the contents
-func WriteToFile(config clientcmdapi.Config, filename string) error {
- content, err := Write(config)
- if err != nil {
- return err
- }
- dir := filepath.Dir(filename)
- if _, err := os.Stat(dir); os.IsNotExist(err) {
- if err = os.MkdirAll(dir, 0755); err != nil {
- return err
- }
- }
-
- if err := ioutil.WriteFile(filename, content, 0600); err != nil {
- return err
- }
- return nil
-}
-
-func lockFile(filename string) error {
- // TODO: find a way to do this with actual file locks. Will
- // probably need seperate solution for windows and linux.
-
- // Make sure the dir exists before we try to create a lock file.
- dir := filepath.Dir(filename)
- if _, err := os.Stat(dir); os.IsNotExist(err) {
- if err = os.MkdirAll(dir, 0755); err != nil {
- return err
- }
- }
- f, err := os.OpenFile(lockName(filename), os.O_CREATE|os.O_EXCL, 0)
- if err != nil {
- return err
- }
- f.Close()
- return nil
-}
-
-func unlockFile(filename string) error {
- return os.Remove(lockName(filename))
-}
-
-func lockName(filename string) string {
- return filename + ".lock"
-}
-
-// Write serializes the config to yaml.
-// Encapsulates serialization without assuming the destination is a file.
-func Write(config clientcmdapi.Config) ([]byte, error) {
- return runtime.Encode(clientcmdlatest.Codec, &config)
-}
-
-func (rules ClientConfigLoadingRules) ResolvePaths() bool {
- return !rules.DoNotResolvePaths
-}
-
-// ResolveLocalPaths resolves all relative paths in the config object with respect to the stanza's LocationOfOrigin
-// this cannot be done directly inside of LoadFromFile because doing so there would make it impossible to load a file without
-// modification of its contents.
-func ResolveLocalPaths(config *clientcmdapi.Config) error {
- for _, cluster := range config.Clusters {
- if len(cluster.LocationOfOrigin) == 0 {
- continue
- }
- base, err := filepath.Abs(filepath.Dir(cluster.LocationOfOrigin))
- if err != nil {
- return fmt.Errorf("Could not determine the absolute path of config file %s: %v", cluster.LocationOfOrigin, err)
- }
-
- if err := ResolvePaths(GetClusterFileReferences(cluster), base); err != nil {
- return err
- }
- }
- for _, authInfo := range config.AuthInfos {
- if len(authInfo.LocationOfOrigin) == 0 {
- continue
- }
- base, err := filepath.Abs(filepath.Dir(authInfo.LocationOfOrigin))
- if err != nil {
- return fmt.Errorf("Could not determine the absolute path of config file %s: %v", authInfo.LocationOfOrigin, err)
- }
-
- if err := ResolvePaths(GetAuthInfoFileReferences(authInfo), base); err != nil {
- return err
- }
- }
-
- return nil
-}
-
-// RelativizeClusterLocalPaths first absolutizes the paths by calling ResolveLocalPaths. This assumes that any NEW path is already
-// absolute, but any existing path will be resolved relative to LocationOfOrigin
-func RelativizeClusterLocalPaths(cluster *clientcmdapi.Cluster) error {
- if len(cluster.LocationOfOrigin) == 0 {
- return fmt.Errorf("no location of origin for %s", cluster.Server)
- }
- base, err := filepath.Abs(filepath.Dir(cluster.LocationOfOrigin))
- if err != nil {
- return fmt.Errorf("could not determine the absolute path of config file %s: %v", cluster.LocationOfOrigin, err)
- }
-
- if err := ResolvePaths(GetClusterFileReferences(cluster), base); err != nil {
- return err
- }
- if err := RelativizePathWithNoBacksteps(GetClusterFileReferences(cluster), base); err != nil {
- return err
- }
-
- return nil
-}
-
-// RelativizeAuthInfoLocalPaths first absolutizes the paths by calling ResolveLocalPaths. This assumes that any NEW path is already
-// absolute, but any existing path will be resolved relative to LocationOfOrigin
-func RelativizeAuthInfoLocalPaths(authInfo *clientcmdapi.AuthInfo) error {
- if len(authInfo.LocationOfOrigin) == 0 {
- return fmt.Errorf("no location of origin for %v", authInfo)
- }
- base, err := filepath.Abs(filepath.Dir(authInfo.LocationOfOrigin))
- if err != nil {
- return fmt.Errorf("could not determine the absolute path of config file %s: %v", authInfo.LocationOfOrigin, err)
- }
-
- if err := ResolvePaths(GetAuthInfoFileReferences(authInfo), base); err != nil {
- return err
- }
- if err := RelativizePathWithNoBacksteps(GetAuthInfoFileReferences(authInfo), base); err != nil {
- return err
- }
-
- return nil
-}
-
-func RelativizeConfigPaths(config *clientcmdapi.Config, base string) error {
- return RelativizePathWithNoBacksteps(GetConfigFileReferences(config), base)
-}
-
-func ResolveConfigPaths(config *clientcmdapi.Config, base string) error {
- return ResolvePaths(GetConfigFileReferences(config), base)
-}
-
-func GetConfigFileReferences(config *clientcmdapi.Config) []*string {
- refs := []*string{}
-
- for _, cluster := range config.Clusters {
- refs = append(refs, GetClusterFileReferences(cluster)...)
- }
- for _, authInfo := range config.AuthInfos {
- refs = append(refs, GetAuthInfoFileReferences(authInfo)...)
- }
-
- return refs
-}
-
-func GetClusterFileReferences(cluster *clientcmdapi.Cluster) []*string {
- return []*string{&cluster.CertificateAuthority}
-}
-
-func GetAuthInfoFileReferences(authInfo *clientcmdapi.AuthInfo) []*string {
- return []*string{&authInfo.ClientCertificate, &authInfo.ClientKey}
-}
-
-// ResolvePaths updates the given refs to be absolute paths, relative to the given base directory
-func ResolvePaths(refs []*string, base string) error {
- for _, ref := range refs {
- // Don't resolve empty paths
- if len(*ref) > 0 {
- // Don't resolve absolute paths
- if !filepath.IsAbs(*ref) {
- *ref = filepath.Join(base, *ref)
- }
- }
- }
- return nil
-}
-
-// RelativizePathWithNoBacksteps updates the given refs to be relative paths, relative to the given base directory as long as they do not require backsteps.
-// Any path requiring a backstep is left as-is as long it is absolute. Any non-absolute path that can't be relativized produces an error
-func RelativizePathWithNoBacksteps(refs []*string, base string) error {
- for _, ref := range refs {
- // Don't relativize empty paths
- if len(*ref) > 0 {
- rel, err := MakeRelative(*ref, base)
- if err != nil {
- return err
- }
-
- // if we have a backstep, don't mess with the path
- if strings.HasPrefix(rel, "../") {
- if filepath.IsAbs(*ref) {
- continue
- }
-
- return fmt.Errorf("%v requires backsteps and is not absolute", *ref)
- }
-
- *ref = rel
- }
- }
- return nil
-}
-
-func MakeRelative(path, base string) (string, error) {
- if len(path) > 0 {
- rel, err := filepath.Rel(base, path)
- if err != nil {
- return path, err
- }
- return rel, nil
- }
- return path, nil
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/merged_client_builder.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/merged_client_builder.go
deleted file mode 100644
index 0180469..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/merged_client_builder.go
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package clientcmd
-
-import (
- "io"
- "reflect"
- "sync"
-
- "github.com/golang/glog"
-
- "k8s.io/kubernetes/pkg/client/restclient"
- clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
-)
-
-// DeferredLoadingClientConfig is a ClientConfig interface that is backed by a client config loader.
-// It is used in cases where the loading rules may change after you've instantiated them and you want to be sure that
-// the most recent rules are used. This is useful in cases where you bind flags to loading rule parameters before
-// the parse happens and you want your calling code to be ignorant of how the values are being mutated to avoid
-// passing extraneous information down a call stack
-type DeferredLoadingClientConfig struct {
- loader ClientConfigLoader
- overrides *ConfigOverrides
- fallbackReader io.Reader
-
- clientConfig ClientConfig
- loadingLock sync.Mutex
-}
-
-// NewNonInteractiveDeferredLoadingClientConfig creates a ConfigClientClientConfig using the passed context name
-func NewNonInteractiveDeferredLoadingClientConfig(loader ClientConfigLoader, overrides *ConfigOverrides) ClientConfig {
- return &DeferredLoadingClientConfig{loader: loader, overrides: overrides}
-}
-
-// NewInteractiveDeferredLoadingClientConfig creates a ConfigClientClientConfig using the passed context name and the fallback auth reader
-func NewInteractiveDeferredLoadingClientConfig(loader ClientConfigLoader, overrides *ConfigOverrides, fallbackReader io.Reader) ClientConfig {
- return &DeferredLoadingClientConfig{loader: loader, overrides: overrides, fallbackReader: fallbackReader}
-}
-
-func (config *DeferredLoadingClientConfig) createClientConfig() (ClientConfig, error) {
- if config.clientConfig == nil {
- config.loadingLock.Lock()
- defer config.loadingLock.Unlock()
-
- if config.clientConfig == nil {
- mergedConfig, err := config.loader.Load()
- if err != nil {
- return nil, err
- }
-
- var mergedClientConfig ClientConfig
- if config.fallbackReader != nil {
- mergedClientConfig = NewInteractiveClientConfig(*mergedConfig, config.overrides.CurrentContext, config.overrides, config.fallbackReader, config.loader)
- } else {
- mergedClientConfig = NewNonInteractiveClientConfig(*mergedConfig, config.overrides.CurrentContext, config.overrides, config.loader)
- }
-
- config.clientConfig = mergedClientConfig
- }
- }
-
- return config.clientConfig, nil
-}
-
-func (config *DeferredLoadingClientConfig) RawConfig() (clientcmdapi.Config, error) {
- mergedConfig, err := config.createClientConfig()
- if err != nil {
- return clientcmdapi.Config{}, err
- }
-
- return mergedConfig.RawConfig()
-}
-
-// ClientConfig implements ClientConfig
-func (config *DeferredLoadingClientConfig) ClientConfig() (*restclient.Config, error) {
- mergedClientConfig, err := config.createClientConfig()
- if err != nil {
- return nil, err
- }
-
- mergedConfig, err := mergedClientConfig.ClientConfig()
- if err != nil {
- return nil, err
- }
- // Are we running in a cluster and were no other configs found? If so, use the in-cluster-config.
- icc := inClusterClientConfig{}
- defaultConfig, err := DefaultClientConfig.ClientConfig()
- if icc.Possible() && err == nil && reflect.DeepEqual(mergedConfig, defaultConfig) {
- glog.V(2).Info("No kubeconfig could be created, falling back to service account.")
- return icc.ClientConfig()
- }
- return mergedConfig, nil
-}
-
-// Namespace implements KubeConfig
-func (config *DeferredLoadingClientConfig) Namespace() (string, bool, error) {
- mergedKubeConfig, err := config.createClientConfig()
- if err != nil {
- return "", false, err
- }
-
- return mergedKubeConfig.Namespace()
-}
-
-// ConfigAccess implements ClientConfig
-func (config *DeferredLoadingClientConfig) ConfigAccess() ConfigAccess {
- return config.loader
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/overrides.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/overrides.go
deleted file mode 100644
index 40a35e6..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/overrides.go
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package clientcmd
-
-import (
- "strconv"
-
- "github.com/spf13/pflag"
-
- clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
-)
-
-// ConfigOverrides holds values that should override whatever information is pulled from the actual Config object. You can't
-// simply use an actual Config object, because Configs hold maps, but overrides are restricted to "at most one"
-type ConfigOverrides struct {
- AuthInfo clientcmdapi.AuthInfo
- ClusterInfo clientcmdapi.Cluster
- Context clientcmdapi.Context
- CurrentContext string
-}
-
-// ConfigOverrideFlags holds the flag names to be used for binding command line flags. Notice that this structure tightly
-// corresponds to ConfigOverrides
-type ConfigOverrideFlags struct {
- AuthOverrideFlags AuthOverrideFlags
- ClusterOverrideFlags ClusterOverrideFlags
- ContextOverrideFlags ContextOverrideFlags
- CurrentContext FlagInfo
-}
-
-// AuthOverrideFlags holds the flag names to be used for binding command line flags for AuthInfo objects
-type AuthOverrideFlags struct {
- ClientCertificate FlagInfo
- ClientKey FlagInfo
- Token FlagInfo
- Impersonate FlagInfo
- Username FlagInfo
- Password FlagInfo
-}
-
-// ContextOverrideFlags holds the flag names to be used for binding command line flags for Cluster objects
-type ContextOverrideFlags struct {
- ClusterName FlagInfo
- AuthInfoName FlagInfo
- Namespace FlagInfo
-}
-
-// ClusterOverride holds the flag names to be used for binding command line flags for Cluster objects
-type ClusterOverrideFlags struct {
- APIServer FlagInfo
- APIVersion FlagInfo
- CertificateAuthority FlagInfo
- InsecureSkipTLSVerify FlagInfo
-}
-
-// FlagInfo contains information about how to register a flag. This struct is useful if you want to provide a way for an extender to
-// get back a set of recommended flag names, descriptions, and defaults, but allow for customization by an extender. This makes for
-// coherent extension, without full prescription
-type FlagInfo struct {
- // LongName is the long string for a flag. If this is empty, then the flag will not be bound
- LongName string
- // ShortName is the single character for a flag. If this is empty, then there will be no short flag
- ShortName string
- // Default is the default value for the flag
- Default string
- // Description is the description for the flag
- Description string
-}
-
-// BindStringFlag binds the flag based on the provided info. If LongName == "", nothing is registered
-func (f FlagInfo) BindStringFlag(flags *pflag.FlagSet, target *string) {
- // you can't register a flag without a long name
- if len(f.LongName) > 0 {
- flags.StringVarP(target, f.LongName, f.ShortName, f.Default, f.Description)
- }
-}
-
-// BindBoolFlag binds the flag based on the provided info. If LongName == "", nothing is registered
-func (f FlagInfo) BindBoolFlag(flags *pflag.FlagSet, target *bool) {
- // you can't register a flag without a long name
- if len(f.LongName) > 0 {
- // try to parse Default as a bool. If it fails, assume false
- boolVal, err := strconv.ParseBool(f.Default)
- if err != nil {
- boolVal = false
- }
-
- flags.BoolVarP(target, f.LongName, f.ShortName, boolVal, f.Description)
- }
-}
-
-const (
- FlagClusterName = "cluster"
- FlagAuthInfoName = "user"
- FlagContext = "context"
- FlagNamespace = "namespace"
- FlagAPIServer = "server"
- FlagAPIVersion = "api-version"
- FlagInsecure = "insecure-skip-tls-verify"
- FlagCertFile = "client-certificate"
- FlagKeyFile = "client-key"
- FlagCAFile = "certificate-authority"
- FlagEmbedCerts = "embed-certs"
- FlagBearerToken = "token"
- FlagImpersonate = "as"
- FlagUsername = "username"
- FlagPassword = "password"
-)
-
-// RecommendedAuthOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing
-func RecommendedAuthOverrideFlags(prefix string) AuthOverrideFlags {
- return AuthOverrideFlags{
- ClientCertificate: FlagInfo{prefix + FlagCertFile, "", "", "Path to a client certificate file for TLS"},
- ClientKey: FlagInfo{prefix + FlagKeyFile, "", "", "Path to a client key file for TLS"},
- Token: FlagInfo{prefix + FlagBearerToken, "", "", "Bearer token for authentication to the API server"},
- Impersonate: FlagInfo{prefix + FlagImpersonate, "", "", "Username to impersonate for the operation"},
- Username: FlagInfo{prefix + FlagUsername, "", "", "Username for basic authentication to the API server"},
- Password: FlagInfo{prefix + FlagPassword, "", "", "Password for basic authentication to the API server"},
- }
-}
-
-// RecommendedClusterOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing
-func RecommendedClusterOverrideFlags(prefix string) ClusterOverrideFlags {
- return ClusterOverrideFlags{
- APIServer: FlagInfo{prefix + FlagAPIServer, "", "", "The address and port of the Kubernetes API server"},
- APIVersion: FlagInfo{prefix + FlagAPIVersion, "", "", "DEPRECATED: The API version to use when talking to the server"},
- CertificateAuthority: FlagInfo{prefix + FlagCAFile, "", "", "Path to a cert. file for the certificate authority"},
- InsecureSkipTLSVerify: FlagInfo{prefix + FlagInsecure, "", "false", "If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure"},
- }
-}
-
-// RecommendedConfigOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing
-func RecommendedConfigOverrideFlags(prefix string) ConfigOverrideFlags {
- return ConfigOverrideFlags{
- AuthOverrideFlags: RecommendedAuthOverrideFlags(prefix),
- ClusterOverrideFlags: RecommendedClusterOverrideFlags(prefix),
- ContextOverrideFlags: RecommendedContextOverrideFlags(prefix),
- CurrentContext: FlagInfo{prefix + FlagContext, "", "", "The name of the kubeconfig context to use"},
- }
-}
-
-// RecommendedContextOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing
-func RecommendedContextOverrideFlags(prefix string) ContextOverrideFlags {
- return ContextOverrideFlags{
- ClusterName: FlagInfo{prefix + FlagClusterName, "", "", "The name of the kubeconfig cluster to use"},
- AuthInfoName: FlagInfo{prefix + FlagAuthInfoName, "", "", "The name of the kubeconfig user to use"},
- Namespace: FlagInfo{prefix + FlagNamespace, "", "", "If present, the namespace scope for this CLI request"},
- }
-}
-
-// BindAuthInfoFlags is a convenience method to bind the specified flags to their associated variables
-func BindAuthInfoFlags(authInfo *clientcmdapi.AuthInfo, flags *pflag.FlagSet, flagNames AuthOverrideFlags) {
- flagNames.ClientCertificate.BindStringFlag(flags, &authInfo.ClientCertificate)
- flagNames.ClientKey.BindStringFlag(flags, &authInfo.ClientKey)
- flagNames.Token.BindStringFlag(flags, &authInfo.Token)
- flagNames.Impersonate.BindStringFlag(flags, &authInfo.Impersonate)
- flagNames.Username.BindStringFlag(flags, &authInfo.Username)
- flagNames.Password.BindStringFlag(flags, &authInfo.Password)
-}
-
-// BindClusterFlags is a convenience method to bind the specified flags to their associated variables
-func BindClusterFlags(clusterInfo *clientcmdapi.Cluster, flags *pflag.FlagSet, flagNames ClusterOverrideFlags) {
- flagNames.APIServer.BindStringFlag(flags, &clusterInfo.Server)
- // TODO: remove --api-version flag in 1.3.
- flagNames.APIVersion.BindStringFlag(flags, &clusterInfo.APIVersion)
- flags.MarkDeprecated(FlagAPIVersion, "flag is no longer respected and will be deleted in the next release")
- flagNames.CertificateAuthority.BindStringFlag(flags, &clusterInfo.CertificateAuthority)
- flagNames.InsecureSkipTLSVerify.BindBoolFlag(flags, &clusterInfo.InsecureSkipTLSVerify)
-}
-
-// BindOverrideFlags is a convenience method to bind the specified flags to their associated variables
-func BindOverrideFlags(overrides *ConfigOverrides, flags *pflag.FlagSet, flagNames ConfigOverrideFlags) {
- BindAuthInfoFlags(&overrides.AuthInfo, flags, flagNames.AuthOverrideFlags)
- BindClusterFlags(&overrides.ClusterInfo, flags, flagNames.ClusterOverrideFlags)
- BindContextFlags(&overrides.Context, flags, flagNames.ContextOverrideFlags)
- flagNames.CurrentContext.BindStringFlag(flags, &overrides.CurrentContext)
-}
-
-// BindFlags is a convenience method to bind the specified flags to their associated variables
-func BindContextFlags(contextInfo *clientcmdapi.Context, flags *pflag.FlagSet, flagNames ContextOverrideFlags) {
- flagNames.ClusterName.BindStringFlag(flags, &contextInfo.Cluster)
- flagNames.AuthInfoName.BindStringFlag(flags, &contextInfo.AuthInfo)
- flagNames.Namespace.BindStringFlag(flags, &contextInfo.Namespace)
-}
diff --git a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/validation.go b/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/validation.go
deleted file mode 100644
index 63f8ade..0000000
--- a/kube2msb/src/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/validation.go
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package clientcmd
-
-import (
- "errors"
- "fmt"
- "os"
- "reflect"
- "strings"
-
- clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
- utilerrors "k8s.io/kubernetes/pkg/util/errors"
- "k8s.io/kubernetes/pkg/util/validation"
-)
-
-var (
- ErrNoContext = errors.New("no context chosen")
- ErrEmptyConfig = errors.New("no configuration has been provided")
- // message is for consistency with old behavior
- ErrEmptyCluster = errors.New("cluster has no server defined")
-)
-
-type errContextNotFound struct {
- ContextName string
-}
-
-func (e *errContextNotFound) Error() string {
- return fmt.Sprintf("context was not found for specified context: %v", e.ContextName)
-}
-
-// IsContextNotFound returns a boolean indicating whether the error is known to
-// report that a context was not found
-func IsContextNotFound(err error) bool {
- if err == nil {
- return false
- }
- if _, ok := err.(*errContextNotFound); ok || err == ErrNoContext {
- return true
- }
- return strings.Contains(err.Error(), "context was not found for specified context")
-}
-
-// IsEmptyConfig returns true if the provided error indicates the provided configuration
-// is empty.
-func IsEmptyConfig(err error) bool {
- switch t := err.(type) {
- case errConfigurationInvalid:
- return len(t) == 1 && t[0] == ErrEmptyConfig
- }
- return err == ErrEmptyConfig
-}
-
-// errConfigurationInvalid is a set of errors indicating the configuration is invalid.
-type errConfigurationInvalid []error
-
-// errConfigurationInvalid implements error and Aggregate
-var _ error = errConfigurationInvalid{}
-var _ utilerrors.Aggregate = errConfigurationInvalid{}
-
-func newErrConfigurationInvalid(errs []error) error {
- switch len(errs) {
- case 0:
- return nil
- default:
- return errConfigurationInvalid(errs)
- }
-}
-
-// Error implements the error interface
-func (e errConfigurationInvalid) Error() string {
- return fmt.Sprintf("invalid configuration: %v", utilerrors.NewAggregate(e).Error())
-}
-
-// Errors implements the AggregateError interface
-func (e errConfigurationInvalid) Errors() []error {
- return e
-}
-
-// IsConfigurationInvalid returns true if the provided error indicates the configuration is invalid.
-func IsConfigurationInvalid(err error) bool {
- switch err.(type) {
- case *errContextNotFound, errConfigurationInvalid:
- return true
- }
- return IsContextNotFound(err)
-}
-
-// Validate checks for errors in the Config. It does not return early so that it can find as many errors as possible.
-func Validate(config clientcmdapi.Config) error {
- validationErrors := make([]error, 0)
-
- if clientcmdapi.IsConfigEmpty(&config) {
- return newErrConfigurationInvalid([]error{ErrEmptyConfig})
- }
-
- if len(config.CurrentContext) != 0 {
- if _, exists := config.Contexts[config.CurrentContext]; !exists {
- validationErrors = append(validationErrors, &errContextNotFound{config.CurrentContext})
- }
- }
-
- for contextName, context := range config.Contexts {
- validationErrors = append(validationErrors, validateContext(contextName, *context, config)...)
- }
-
- for authInfoName, authInfo := range config.AuthInfos {
- validationErrors = append(validationErrors, validateAuthInfo(authInfoName, *authInfo)...)
- }
-
- for clusterName, clusterInfo := range config.Clusters {
- validationErrors = append(validationErrors, validateClusterInfo(clusterName, *clusterInfo)...)
- }
-
- return newErrConfigurationInvalid(validationErrors)
-}
-
-// ConfirmUsable looks a particular context and determines if that particular part of the config is useable. There might still be errors in the config,
-// but no errors in the sections requested or referenced. It does not return early so that it can find as many errors as possible.
-func ConfirmUsable(config clientcmdapi.Config, passedContextName string) error {
- validationErrors := make([]error, 0)
-
- if clientcmdapi.IsConfigEmpty(&config) {
- return newErrConfigurationInvalid([]error{ErrEmptyConfig})
- }
-
- var contextName string
- if len(passedContextName) != 0 {
- contextName = passedContextName
- } else {
- contextName = config.CurrentContext
- }
-
- if len(contextName) == 0 {
- return ErrNoContext
- }
-
- context, exists := config.Contexts[contextName]
- if !exists {
- validationErrors = append(validationErrors, &errContextNotFound{contextName})
- }
-
- if exists {
- validationErrors = append(validationErrors, validateContext(contextName, *context, config)...)
- validationErrors = append(validationErrors, validateAuthInfo(context.AuthInfo, *config.AuthInfos[context.AuthInfo])...)
- validationErrors = append(validationErrors, validateClusterInfo(context.Cluster, *config.Clusters[context.Cluster])...)
- }
-
- return newErrConfigurationInvalid(validationErrors)
-}
-
-// validateClusterInfo looks for conflicts and errors in the cluster info
-func validateClusterInfo(clusterName string, clusterInfo clientcmdapi.Cluster) []error {
- validationErrors := make([]error, 0)
-
- if reflect.DeepEqual(clientcmdapi.Cluster{}, clusterInfo) {
- return []error{ErrEmptyCluster}
- }
-
- if len(clusterInfo.Server) == 0 {
- if len(clusterName) == 0 {
- validationErrors = append(validationErrors, fmt.Errorf("default cluster has no server defined"))
- } else {
- validationErrors = append(validationErrors, fmt.Errorf("no server found for cluster %q", clusterName))
- }
- }
- // Make sure CA data and CA file aren't both specified
- if len(clusterInfo.CertificateAuthority) != 0 && len(clusterInfo.CertificateAuthorityData) != 0 {
- validationErrors = append(validationErrors, fmt.Errorf("certificate-authority-data and certificate-authority are both specified for %v. certificate-authority-data will override.", clusterName))
- }
- if len(clusterInfo.CertificateAuthority) != 0 {
- clientCertCA, err := os.Open(clusterInfo.CertificateAuthority)
- defer clientCertCA.Close()
- if err != nil {
- validationErrors = append(validationErrors, fmt.Errorf("unable to read certificate-authority %v for %v due to %v", clusterInfo.CertificateAuthority, clusterName, err))
- }
- }
-
- return validationErrors
-}
-
-// validateAuthInfo looks for conflicts and errors in the auth info
-func validateAuthInfo(authInfoName string, authInfo clientcmdapi.AuthInfo) []error {
- validationErrors := make([]error, 0)
-
- usingAuthPath := false
- methods := make([]string, 0, 3)
- if len(authInfo.Token) != 0 {
- methods = append(methods, "token")
- }
- if len(authInfo.Username) != 0 || len(authInfo.Password) != 0 {
- methods = append(methods, "basicAuth")
- }
-
- if len(authInfo.ClientCertificate) != 0 || len(authInfo.ClientCertificateData) != 0 {
- // Make sure cert data and file aren't both specified
- if len(authInfo.ClientCertificate) != 0 && len(authInfo.ClientCertificateData) != 0 {
- validationErrors = append(validationErrors, fmt.Errorf("client-cert-data and client-cert are both specified for %v. client-cert-data will override.", authInfoName))
- }
- // Make sure key data and file aren't both specified
- if len(authInfo.ClientKey) != 0 && len(authInfo.ClientKeyData) != 0 {
- validationErrors = append(validationErrors, fmt.Errorf("client-key-data and client-key are both specified for %v; client-key-data will override", authInfoName))
- }
- // Make sure a key is specified
- if len(authInfo.ClientKey) == 0 && len(authInfo.ClientKeyData) == 0 {
- validationErrors = append(validationErrors, fmt.Errorf("client-key-data or client-key must be specified for %v to use the clientCert authentication method.", authInfoName))
- }
-
- if len(authInfo.ClientCertificate) != 0 {
- clientCertFile, err := os.Open(authInfo.ClientCertificate)
- defer clientCertFile.Close()
- if err != nil {
- validationErrors = append(validationErrors, fmt.Errorf("unable to read client-cert %v for %v due to %v", authInfo.ClientCertificate, authInfoName, err))
- }
- }
- if len(authInfo.ClientKey) != 0 {
- clientKeyFile, err := os.Open(authInfo.ClientKey)
- defer clientKeyFile.Close()
- if err != nil {
- validationErrors = append(validationErrors, fmt.Errorf("unable to read client-key %v for %v due to %v", authInfo.ClientKey, authInfoName, err))
- }
- }
- }
-
- // authPath also provides information for the client to identify the server, so allow multiple auth methods in that case
- if (len(methods) > 1) && (!usingAuthPath) {
- validationErrors = append(validationErrors, fmt.Errorf("more than one authentication method found for %v; found %v, only one is allowed", authInfoName, methods))
- }
-
- return validationErrors
-}
-
-// validateContext looks for errors in the context. It is not transitive, so errors in the reference authInfo or cluster configs are not included in this return
-func validateContext(contextName string, context clientcmdapi.Context, config clientcmdapi.Config) []error {
- validationErrors := make([]error, 0)
-
- if len(context.AuthInfo) == 0 {
- validationErrors = append(validationErrors, fmt.Errorf("user was not specified for context %q", contextName))
- } else if _, exists := config.AuthInfos[context.AuthInfo]; !exists {
- validationErrors = append(validationErrors, fmt.Errorf("user %q was not found for context %q", context.AuthInfo, contextName))
- }
-
- if len(context.Cluster) == 0 {
- validationErrors = append(validationErrors, fmt.Errorf("cluster was not specified for context %q", contextName))
- } else if _, exists := config.Clusters[context.Cluster]; !exists {
- validationErrors = append(validationErrors, fmt.Errorf("cluster %q was not found for context %q", context.Cluster, contextName))
- }
-
- if len(context.Namespace) != 0 {
- if len(validation.IsDNS1123Label(context.Namespace)) != 0 {
- validationErrors = append(validationErrors, fmt.Errorf("namespace %q for context %q does not conform to the kubernetes DNS_LABEL rules", context.Namespace, contextName))
- }
- }
-
- return validationErrors
-}