e2e: kubectl HTTP fix for #15713

This commit is contained in:
Steve Milner 2015-10-16 13:57:22 -04:00
parent a6634adc1c
commit dda162d54c

View File

@ -26,6 +26,7 @@ import (
"mime/multipart" "mime/multipart"
"net" "net"
"net/http" "net/http"
"net/url"
"os" "os"
"os/exec" "os/exec"
"path" "path"
@ -197,8 +198,7 @@ var _ = Describe("Kubectl client", func() {
} }
}) })
// FIXME(ncdc) remove Skipped once we sort out the kubectl build issues in GCE It("should support exec through an HTTP proxy", func() {
It("[Skipped] should support exec through an HTTP proxy", func() {
// Note: We are skipping local since we want to verify an apiserver with HTTPS. // Note: We are skipping local since we want to verify an apiserver with HTTPS.
// At this time local only supports plain HTTP. // At this time local only supports plain HTTP.
SkipIfProviderIs("local") SkipIfProviderIs("local")
@ -206,33 +206,51 @@ var _ = Describe("Kubectl client", func() {
if testContext.Host == "" { if testContext.Host == "" {
Failf("--host variable must be set to the full URI to the api server on e2e run.") Failf("--host variable must be set to the full URI to the api server on e2e run.")
} }
// Make sure the apiServer is set to what kubectl requires
apiServer := testContext.Host apiServer := testContext.Host
// If there is no api in URL try to add it apiServerUrl, err := url.Parse(apiServer)
if !strings.Contains(apiServer, ":443/api") { if err != nil {
apiServer = apiServer + ":443/api" Failf("Unable to parse URL %s. Error=Ts", apiServer, err)
} }
apiServerUrl.Scheme = "https"
apiServerUrl.Path = "/api"
if !strings.Contains(apiServer, ":443") {
apiServerUrl.Host = apiServerUrl.Host + ":443"
}
apiServer = apiServerUrl.String()
// Get the kube/config // Get the kube/config
// TODO: Can it be RepoRoot with jenkins e2e?
testWorkspace := os.Getenv("WORKSPACE") testWorkspace := os.Getenv("WORKSPACE")
if testWorkspace == "" { if testWorkspace == "" {
// Not running in jenkins, assume RepoRoot // Not running in jenkins, assume RepoRoot
testWorkspace = testContext.RepoRoot // os.Getenv("HOME") testWorkspace = testContext.RepoRoot
} }
// Build the static kubectl // Build the static kubectl
By("Building a static kubectl for upload") By("Finding a static kubectl for upload")
kubectlContainerPath := path.Join(testWorkspace, "/examples/kubectl-container/") testStaticKubectlPath := path.Join(testWorkspace, "platforms/linux/386/kubectl")
staticKubectlBuild := exec.Command("make", "-C", kubectlContainerPath) _, err = os.Stat(testStaticKubectlPath)
if out, err := staticKubectlBuild.Output(); err != nil {
Failf("Unable to create static kubectl. Error=%s, Output=%s", err, out)
}
// Verify the static kubectl path
testStaticKubectlPath := path.Join(kubectlContainerPath, "kubectl")
_, err := os.Stat(testStaticKubectlPath)
if err != nil { if err != nil {
Failf("static kubectl path could not be accessed. Error=%s", err) Logf("No kubectl in %s. Attempting a local build...", testStaticKubectlPath)
// Fall back to trying to build a local static kubectl
kubectlContainerPath := path.Join(testWorkspace, "/examples/kubectl-container/")
if _, err := os.Stat(path.Join(testWorkspace, "hack/build-go.sh")); err != nil {
Failf("Can't build static kubectl due to missing hack/build-go.sh. Error=%s", err)
}
By("Building a static kubectl for upload")
staticKubectlBuild := exec.Command("make", "-C", kubectlContainerPath)
if out, err := staticKubectlBuild.Output(); err != nil {
Failf("Unable to create static kubectl. Error=%s, Output=%q", err, out)
}
// Verify the static kubectl path
testStaticKubectlPath = path.Join(kubectlContainerPath, "kubectl")
_, err := os.Stat(testStaticKubectlPath)
if err != nil {
Failf("static kubectl path could not be found in %s. Error=%s", testStaticKubectlPath, err)
}
} }
By(fmt.Sprintf("Using the kubectl in %s", testStaticKubectlPath))
// Verify the kubeconfig path // Verify the kubeconfig path
kubeConfigFilePath := testContext.KubeConfig kubeConfigFilePath := testContext.KubeConfig