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) } }