From bf08f5c63cebad7d45b30e938130dbc6a549f1c3 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Tue, 23 Oct 2018 20:25:55 +0200 Subject: [PATCH] e2e: allow unknown providers with a warning The E2E refactoring tightened the sanity checking of the --provider parameter such that it only allowed known providers. That seemed to make sense because it catches typos, but it turned out that various callers depended on the "accept arbitrary provider value" behavior, therefore it gets restored. --- test/e2e/framework/BUILD | 1 + test/e2e/framework/provider.go | 5 ++++- test/e2e/framework/test_context.go | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index 11b184cb7f4..c1cebf68fa7 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -134,6 +134,7 @@ go_library( "//vendor/github.com/onsi/ginkgo/config:go_default_library", "//vendor/github.com/onsi/gomega:go_default_library", "//vendor/github.com/onsi/gomega/types:go_default_library", + "//vendor/github.com/pkg/errors:go_default_library", "//vendor/github.com/prometheus/common/expfmt:go_default_library", "//vendor/github.com/prometheus/common/model:go_default_library", "//vendor/golang.org/x/crypto/ssh:go_default_library", diff --git a/test/e2e/framework/provider.go b/test/e2e/framework/provider.go index f6c8181e0cf..7c75b15ee23 100644 --- a/test/e2e/framework/provider.go +++ b/test/e2e/framework/provider.go @@ -18,8 +18,11 @@ package framework import ( "fmt" + "os" "sync" + "github.com/pkg/errors" + "k8s.io/api/core/v1" clientset "k8s.io/client-go/kubernetes" ) @@ -66,7 +69,7 @@ func SetupProviderConfig(providerName string) (ProviderInterface, error) { defer mutex.Unlock() factory, ok := providers[providerName] if !ok { - return nil, fmt.Errorf("The provider %s is unknown.", providerName) + return nil, errors.Wrapf(os.ErrNotExist, "The provider %s is unknown.", providerName) } provider, err := factory() diff --git a/test/e2e/framework/test_context.go b/test/e2e/framework/test_context.go index dc3bd24640c..ac62258d498 100644 --- a/test/e2e/framework/test_context.go +++ b/test/e2e/framework/test_context.go @@ -25,6 +25,7 @@ import ( "github.com/golang/glog" "github.com/onsi/ginkgo/config" + "github.com/pkg/errors" utilflag "k8s.io/apiserver/pkg/util/flag" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -366,7 +367,20 @@ func AfterReadingAllFlags(t *TestContextType) { // Make sure that all test runs have a valid TestContext.CloudConfig.Provider. var err error TestContext.CloudConfig.Provider, err = SetupProviderConfig(TestContext.Provider) + if err == nil { + return + } + if !os.IsNotExist(errors.Cause(err)) { + Failf("Failed to setup provider config: %v", err) + } + // We allow unknown provider parameters for historic reasons. At least log a + // warning to catch typos. + // TODO (https://github.com/kubernetes/kubernetes/issues/70200): + // - remove the fallback for unknown providers + // - proper error message instead of Failf (which panics) + glog.Warningf("Unknown provider %q, proceeding as for --provider=skeleton.", TestContext.Provider) + TestContext.CloudConfig.Provider, err = SetupProviderConfig("skeleton") if err != nil { - Failf("Failed to setup provide r config: %v", err) + Failf("Failed to setup fallback skeleton provider config: %v", err) } }