From e88f3768420cf763604e9ed6ba070654f29fb42c Mon Sep 17 00:00:00 2001 From: Christoph Blecker Date: Tue, 3 Jul 2018 11:15:43 -0700 Subject: [PATCH 1/4] Update github.com/imdario/mergo to v0.3.5 Kubernetes-commit: 12b2e2c2b53ab987e956673bc778e040af22e304 --- Godeps/Godeps.json | 202 ++++++++++++++++++++++----------------------- 1 file changed, 97 insertions(+), 105 deletions(-) diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index ffdab34f..430e5700 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -16,23 +16,19 @@ }, { "ImportPath": "github.com/Azure/go-autorest/autorest", - "Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06" + "Rev": "1ff28809256a84bb6966640ff3d0371af82ccba4" }, { "ImportPath": "github.com/Azure/go-autorest/autorest/adal", - "Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06" + "Rev": "1ff28809256a84bb6966640ff3d0371af82ccba4" }, { "ImportPath": "github.com/Azure/go-autorest/autorest/azure", - "Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06" + "Rev": "1ff28809256a84bb6966640ff3d0371af82ccba4" }, { "ImportPath": "github.com/Azure/go-autorest/autorest/date", - "Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06" - }, - { - "ImportPath": "github.com/Azure/go-autorest/version", - "Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06" + "Rev": "1ff28809256a84bb6966640ff3d0371af82ccba4" }, { "ImportPath": "github.com/davecgh/go-spew/spew", @@ -156,7 +152,7 @@ }, { "ImportPath": "github.com/imdario/mergo", - "Rev": "6633656539c1639d9d78127b7d47c622b5d7b6dc" + "Rev": "9316a62528ac99aaecb4e47eadd6dc8aa6533d58" }, { "ImportPath": "github.com/json-iterator/go", @@ -188,7 +184,7 @@ }, { "ImportPath": "golang.org/x/crypto/ssh/terminal", - "Rev": "de0752318171da717af4ce24d0a2e8626afaeb11" + "Rev": "49796115aa4b964c318aad4f3084fdb41e9aa067" }, { "ImportPath": "golang.org/x/net/context", @@ -272,335 +268,331 @@ }, { "ImportPath": "k8s.io/api/admissionregistration/v1alpha1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/admissionregistration/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/apps/v1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/apps/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/apps/v1beta2", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/authentication/v1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/authentication/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/authorization/v1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/authorization/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/autoscaling/v1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/autoscaling/v2beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/batch/v1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/batch/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/batch/v2alpha1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/certificates/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/coordination/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/core/v1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/events/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/extensions/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/imagepolicy/v1alpha1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/networking/v1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/policy/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/rbac/v1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/rbac/v1alpha1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/rbac/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/scheduling/v1alpha1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/scheduling/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/settings/v1alpha1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/storage/v1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/storage/v1alpha1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/api/storage/v1beta1", - "Rev": "f5c295feaba2cbc946f0bbb8b535fc5f6a0345ee" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/apitesting", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/apitesting/fuzzer", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/apitesting/roundtrip", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/equality", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/naming", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "ac4f7e0decfc7dbc613748c40f1bc938da71853b" + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, { "ImportPath": "k8s.io/kube-openapi/pkg/util/proto", - "Rev": "0cf8f7e6ed1d2e3d47d02e3b6e559369af24d803" + "Rev": "91cfa479c814065e420cee7ed227db0f63a5854e" } ] } From 44530d33a7601800a3eec3ad159a38ac9bfafecc Mon Sep 17 00:00:00 2001 From: Christoph Blecker Date: Wed, 4 Jul 2018 12:52:01 -0700 Subject: [PATCH 2/4] Move from mergo.Merge to mergo.MergeWithOverwrite Kubernetes-commit: a1f6d24962f2b9e6002bcc721e1b48d1008d6cbf --- tools/clientcmd/client_config.go | 28 ++++++++++++--------------- tools/clientcmd/client_config_test.go | 14 ++++++++------ tools/clientcmd/loader.go | 8 ++++---- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/tools/clientcmd/client_config.go b/tools/clientcmd/client_config.go index 66331a7a..b8927f71 100644 --- a/tools/clientcmd/client_config.go +++ b/tools/clientcmd/client_config.go @@ -175,10 +175,6 @@ func (config *DirectClientConfig) ClientConfig() (*restclient.Config, error) { // 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 { authInfoName, _ := config.getAuthInfoName() @@ -188,13 +184,13 @@ func (config *DirectClientConfig) ClientConfig() (*restclient.Config, error) { if err != nil { return nil, err } - mergo.Merge(clientConfig, userAuthPartialConfig) + mergo.MergeWithOverwrite(clientConfig, userAuthPartialConfig) serverAuthPartialConfig, err := getServerIdentificationPartialConfig(configAuthInfo, configClusterInfo) if err != nil { return nil, err } - mergo.Merge(clientConfig, serverAuthPartialConfig) + mergo.MergeWithOverwrite(clientConfig, serverAuthPartialConfig) } return clientConfig, nil @@ -214,7 +210,7 @@ func getServerIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, configClientConfig.CAFile = configClusterInfo.CertificateAuthority configClientConfig.CAData = configClusterInfo.CertificateAuthorityData configClientConfig.Insecure = configClusterInfo.InsecureSkipTLSVerify - mergo.Merge(mergedConfig, configClientConfig) + mergo.MergeWithOverwrite(mergedConfig, configClientConfig) return mergedConfig, nil } @@ -279,8 +275,8 @@ func (config *DirectClientConfig) getUserIdentificationPartialConfig(configAuthI promptedConfig := makeUserIdentificationConfig(*promptedAuthInfo) previouslyMergedConfig := mergedConfig mergedConfig = &restclient.Config{} - mergo.Merge(mergedConfig, promptedConfig) - mergo.Merge(mergedConfig, previouslyMergedConfig) + mergo.MergeWithOverwrite(mergedConfig, promptedConfig) + mergo.MergeWithOverwrite(mergedConfig, previouslyMergedConfig) config.promptedCredentials.username = mergedConfig.Username config.promptedCredentials.password = mergedConfig.Password } @@ -423,11 +419,11 @@ func (config *DirectClientConfig) getContext() (clientcmdapi.Context, error) { mergedContext := clientcmdapi.NewContext() if configContext, exists := contexts[contextName]; exists { - mergo.Merge(mergedContext, configContext) + mergo.MergeWithOverwrite(mergedContext, configContext) } else if required { return clientcmdapi.Context{}, fmt.Errorf("context %q does not exist", contextName) } - mergo.Merge(mergedContext, config.overrides.Context) + mergo.MergeWithOverwrite(mergedContext, config.overrides.Context) return *mergedContext, nil } @@ -439,11 +435,11 @@ func (config *DirectClientConfig) getAuthInfo() (clientcmdapi.AuthInfo, error) { mergedAuthInfo := clientcmdapi.NewAuthInfo() if configAuthInfo, exists := authInfos[authInfoName]; exists { - mergo.Merge(mergedAuthInfo, configAuthInfo) + mergo.MergeWithOverwrite(mergedAuthInfo, configAuthInfo) } else if required { return clientcmdapi.AuthInfo{}, fmt.Errorf("auth info %q does not exist", authInfoName) } - mergo.Merge(mergedAuthInfo, config.overrides.AuthInfo) + mergo.MergeWithOverwrite(mergedAuthInfo, config.overrides.AuthInfo) return *mergedAuthInfo, nil } @@ -454,13 +450,13 @@ func (config *DirectClientConfig) getCluster() (clientcmdapi.Cluster, error) { clusterInfoName, required := config.getClusterName() mergedClusterInfo := clientcmdapi.NewCluster() - mergo.Merge(mergedClusterInfo, config.overrides.ClusterDefaults) + mergo.MergeWithOverwrite(mergedClusterInfo, config.overrides.ClusterDefaults) if configClusterInfo, exists := clusterInfos[clusterInfoName]; exists { - mergo.Merge(mergedClusterInfo, configClusterInfo) + mergo.MergeWithOverwrite(mergedClusterInfo, configClusterInfo) } else if required { return clientcmdapi.Cluster{}, fmt.Errorf("cluster %q does not exist", clusterInfoName) } - mergo.Merge(mergedClusterInfo, config.overrides.ClusterInfo) + mergo.MergeWithOverwrite(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) diff --git a/tools/clientcmd/client_config_test.go b/tools/clientcmd/client_config_test.go index a209da42..b2335f12 100644 --- a/tools/clientcmd/client_config_test.go +++ b/tools/clientcmd/client_config_test.go @@ -28,21 +28,23 @@ import ( clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) -func TestOldMergoLib(t *testing.T) { +func TestMergoSemantics(t *testing.T) { type T struct { X string } dst := T{X: "one"} src := T{X: "two"} - mergo.Merge(&dst, &src) + mergo.MergeWithOverwrite(&dst, &src) if dst.X != "two" { - // mergo.Merge changed in an incompatible way with + // The mergo library has previously changed in a an incompatible way. + // example: // // https://github.com/imdario/mergo/commit/d304790b2ed594794496464fadd89d2bb266600a // - // We have to stay with the old version which still does eager - // copying from src to dst in structs. - t.Errorf("mergo.Merge library found with incompatible, new behavior") + // This test verifies that the semantics of the merge are what we expect. + // If they are not, the mergo library may have been updated and broken + // unexpectedly. + t.Errorf("mergo.MergeWithOverwrite did not provide expected output") } } diff --git a/tools/clientcmd/loader.go b/tools/clientcmd/loader.go index 3442475e..6038c8d4 100644 --- a/tools/clientcmd/loader.go +++ b/tools/clientcmd/loader.go @@ -211,7 +211,7 @@ func (rules *ClientConfigLoadingRules) Load() (*clientcmdapi.Config, error) { mapConfig := clientcmdapi.NewConfig() for _, kubeconfig := range kubeconfigs { - mergo.Merge(mapConfig, kubeconfig) + mergo.MergeWithOverwrite(mapConfig, kubeconfig) } // merge all of the struct values in the reverse order so that priority is given correctly @@ -219,14 +219,14 @@ func (rules *ClientConfigLoadingRules) Load() (*clientcmdapi.Config, error) { nonMapConfig := clientcmdapi.NewConfig() for i := len(kubeconfigs) - 1; i >= 0; i-- { kubeconfig := kubeconfigs[i] - mergo.Merge(nonMapConfig, kubeconfig) + mergo.MergeWithOverwrite(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) + mergo.MergeWithOverwrite(config, mapConfig) + mergo.MergeWithOverwrite(config, nonMapConfig) if rules.ResolvePaths() { if err := ResolveLocalPaths(config); err != nil { From 442fc9f1c48472c219cd93ebc59e34c9837080ab Mon Sep 17 00:00:00 2001 From: Christoph Blecker Date: Wed, 4 Jul 2018 13:52:44 -0700 Subject: [PATCH 3/4] Improve TestMergoSemantics test Kubernetes-commit: 194c471c9ccbb1cf57c66ac081828a693e7ce687 --- tools/clientcmd/client_config_test.go | 51 ++++++++++++++++++++------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/tools/clientcmd/client_config_test.go b/tools/clientcmd/client_config_test.go index b2335f12..fbe87c8e 100644 --- a/tools/clientcmd/client_config_test.go +++ b/tools/clientcmd/client_config_test.go @@ -29,22 +29,47 @@ import ( ) func TestMergoSemantics(t *testing.T) { + type U struct { + A string + B int64 + } type T struct { X string + Y int64 + U U } - dst := T{X: "one"} - src := T{X: "two"} - mergo.MergeWithOverwrite(&dst, &src) - if dst.X != "two" { - // The mergo library has previously changed in a an incompatible way. - // example: - // - // https://github.com/imdario/mergo/commit/d304790b2ed594794496464fadd89d2bb266600a - // - // This test verifies that the semantics of the merge are what we expect. - // If they are not, the mergo library may have been updated and broken - // unexpectedly. - t.Errorf("mergo.MergeWithOverwrite did not provide expected output") + var testData = []struct { + dst T + src T + expected T + }{ + { + dst: T{X: "one"}, + src: T{X: "two"}, + expected: T{X: "two"}, + }, + { + dst: T{X: "one", Y: 5, U: U{A: "four", B: 6}}, + src: T{X: "two", U: U{A: "three", B: 4}}, + expected: T{X: "two", Y: 5, U: U{A: "three", B: 4}}, + }, + } + for _, data := range testData { + err := mergo.MergeWithOverwrite(&data.dst, &data.src) + if err != nil { + t.Errorf("error while merging: %s", err) + } + if data.dst != data.expected { + // The mergo library has previously changed in a an incompatible way. + // example: + // + // https://github.com/imdario/mergo/commit/d304790b2ed594794496464fadd89d2bb266600a + // + // This test verifies that the semantics of the merge are what we expect. + // If they are not, the mergo library may have been updated and broken + // unexpectedly. + t.Errorf("mergo.MergeWithOverwrite did not provide expected output: %+v doesn't match %+v", data.dst, data.expected) + } } } From 43b95360bda44c863e8eaa1443da632f0ee6d49c Mon Sep 17 00:00:00 2001 From: Christoph Blecker Date: Sat, 11 Aug 2018 22:16:26 -0700 Subject: [PATCH 4/4] add more tests to clientcmd Kubernetes-commit: e9cf2b0f798f1fac07f52b5d193419e938e3a7cd --- tools/clientcmd/client_config_test.go | 84 ++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 3 deletions(-) diff --git a/tools/clientcmd/client_config_test.go b/tools/clientcmd/client_config_test.go index fbe87c8e..21a7d322 100644 --- a/tools/clientcmd/client_config_test.go +++ b/tools/clientcmd/client_config_test.go @@ -34,11 +34,12 @@ func TestMergoSemantics(t *testing.T) { B int64 } type T struct { + S []string X string Y int64 U U } - var testData = []struct { + var testDataStruct = []struct { dst T src T expected T @@ -53,13 +54,47 @@ func TestMergoSemantics(t *testing.T) { src: T{X: "two", U: U{A: "three", B: 4}}, expected: T{X: "two", Y: 5, U: U{A: "three", B: 4}}, }, + { + dst: T{S: []string{"test3", "test4", "test5"}}, + src: T{S: []string{"test1", "test2", "test3"}}, + expected: T{S: []string{"test1", "test2", "test3"}}, + }, } - for _, data := range testData { + for _, data := range testDataStruct { err := mergo.MergeWithOverwrite(&data.dst, &data.src) if err != nil { t.Errorf("error while merging: %s", err) } - if data.dst != data.expected { + if !reflect.DeepEqual(data.dst, data.expected) { + // The mergo library has previously changed in a an incompatible way. + // example: + // + // https://github.com/imdario/mergo/commit/d304790b2ed594794496464fadd89d2bb266600a + // + // This test verifies that the semantics of the merge are what we expect. + // If they are not, the mergo library may have been updated and broken + // unexpectedly. + t.Errorf("mergo.MergeWithOverwrite did not provide expected output: %+v doesn't match %+v", data.dst, data.expected) + } + } + + var testDataMap = []struct { + dst map[string]int + src map[string]int + expected map[string]int + }{ + { + dst: map[string]int{"rsc": 6543, "r": 2138, "gri": 1908, "adg": 912, "prt": 22}, + src: map[string]int{"rsc": 3711, "r": 2138, "gri": 1908, "adg": 912}, + expected: map[string]int{"rsc": 3711, "r": 2138, "gri": 1908, "adg": 912, "prt": 22}, + }, + } + for _, data := range testDataMap { + err := mergo.MergeWithOverwrite(&data.dst, &data.src) + if err != nil { + t.Errorf("error while merging: %s", err) + } + if !reflect.DeepEqual(data.dst, data.expected) { // The mergo library has previously changed in a an incompatible way. // example: // @@ -601,3 +636,46 @@ func TestNamespaceOverride(t *testing.T) { matchStringArg("foo", ns, t) } + +func TestAuthConfigMerge(t *testing.T) { + content := ` +apiVersion: v1 +clusters: +- cluster: + server: https://localhost:8080 + name: foo-cluster +contexts: +- context: + cluster: foo-cluster + user: foo-user + namespace: bar + name: foo-context +current-context: foo-context +kind: Config +users: +- name: foo-user + user: + exec: + apiVersion: client.authentication.k8s.io/v1alpha1 + args: + - arg-1 + - arg-2 + command: foo-command +` + tmpfile, err := ioutil.TempFile("", "kubeconfig") + if err != nil { + t.Error(err) + } + defer os.Remove(tmpfile.Name()) + if err := ioutil.WriteFile(tmpfile.Name(), []byte(content), 0666); err != nil { + t.Error(err) + } + config, err := BuildConfigFromFlags("", tmpfile.Name()) + if err != nil { + t.Error(err) + } + if !reflect.DeepEqual(config.ExecProvider.Args, []string{"arg-1", "arg-2"}) { + t.Errorf("Got args %v when they should be %v\n", config.ExecProvider.Args, []string{"arg-1", "arg-2"}) + } + +}