diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index 4eddbf5995..e1b7222a20 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -128,6 +128,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/version:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/dynamic:go_default_library", diff --git a/test/e2e/framework/upgrade_util.go b/test/e2e/framework/upgrade_util.go index 8e5f4609e0..fa12401289 100644 --- a/test/e2e/framework/upgrade_util.go +++ b/test/e2e/framework/upgrade_util.go @@ -18,9 +18,13 @@ package framework import ( "fmt" + "os/exec" "path" "strings" + "time" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/apimachinery/pkg/version" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ) @@ -36,10 +40,36 @@ func RealVersion(s string) (string, error) { return strings.TrimPrefix(strings.TrimSpace(v), "v"), nil } +func traceRouteToMaster() { + path, err := exec.LookPath("traceroute") + if err != nil { + Logf("Could not find traceroute program") + return + } + + cmd := exec.Command(path, "-I", GetMasterHost()) + out, err := cmd.Output() + if len(out) != 0 { + Logf(string(out)) + } + if exiterr, ok := err.(*exec.ExitError); err != nil && ok { + Logf("error while running traceroute: %s", exiterr.Stderr) + } +} + func CheckMasterVersion(c clientset.Interface, want string) error { Logf("Checking master version") - v, err := c.Discovery().ServerVersion() - if err != nil { + var err error + var v *version.Info + waitErr := wait.PollImmediate(5*time.Second, 2*time.Minute, func() (bool, error) { + v, err = c.Discovery().ServerVersion() + if err != nil { + traceRouteToMaster() + return false, nil + } + return true, nil + }) + if waitErr != nil { return fmt.Errorf("CheckMasterVersion() couldn't get the master version: %v", err) } // We do prefix trimming and then matching because: