Pass the GCE project, zone, and master name into e2e.go as flags.

This commit is contained in:
Alex Robinson 2015-02-18 15:12:20 -08:00
parent f946aa887b
commit 94161a44ee
5 changed files with 29 additions and 31 deletions

View File

@ -29,11 +29,14 @@ import (
var ( var (
authConfig = flag.String("auth_config", os.Getenv("HOME")+"/.kubernetes_auth", "Path to the auth info file.") authConfig = flag.String("auth_config", os.Getenv("HOME")+"/.kubernetes_auth", "Path to the auth info file.")
certDir = flag.String("cert_dir", "", "Path to the directory containing the certs. Default is empty, which doesn't use certs.") certDir = flag.String("cert_dir", "", "Path to the directory containing the certs. Default is empty, which doesn't use certs.")
reportDir = flag.String("report_dir", "", "Path to the directory where the JUnit XML reports should be saved. Default is empty, which doesn't generate these reports.") gceProject = flag.String("gce_project", "", "The GCE project being used, if applicable")
gceZone = flag.String("gce_zone", "", "GCE zone being used, if applicable")
host = flag.String("host", "", "The host to connect to") host = flag.String("host", "", "The host to connect to")
repoRoot = flag.String("repo_root", "./", "Root directory of kubernetes repository, for finding test files. Default assumes working directory is repository root") masterName = flag.String("kube_master", "", "Name of the kubernetes master. Only required if provider is gce or gke")
provider = flag.String("provider", "", "The name of the Kubernetes provider") provider = flag.String("provider", "", "The name of the Kubernetes provider")
orderseed = flag.Int64("orderseed", 0, "If non-zero, seed of random test shuffle order. (Otherwise random.)") orderseed = flag.Int64("orderseed", 0, "If non-zero, seed of random test shuffle order. (Otherwise random.)")
repoRoot = flag.String("repo_root", "./", "Root directory of kubernetes repository, for finding test files. Default assumes working directory is repository root")
reportDir = flag.String("report_dir", "", "Path to the directory where the JUnit XML reports should be saved. Default is empty, which doesn't generate these reports.")
times = flag.Int("times", 1, "Number of times each test is eligible to be run. Individual order is determined by shuffling --times instances of each test using --orderseed (like a multi-deck shoe of cards).") times = flag.Int("times", 1, "Number of times each test is eligible to be run. Individual order is determined by shuffling --times instances of each test using --orderseed (like a multi-deck shoe of cards).")
testList util.StringList testList util.StringList
) )
@ -53,5 +56,10 @@ func main() {
glog.Error("Invalid --times (negative or no testing requested)!") glog.Error("Invalid --times (negative or no testing requested)!")
os.Exit(1) os.Exit(1)
} }
e2e.RunE2ETests(*authConfig, *certDir, *host, *repoRoot, *provider, *orderseed, *times, *reportDir, testList) gceConfig := &e2e.GCEConfig{
ProjectID: *gceProject,
Zone: *gceZone,
MasterName: *masterName,
}
e2e.RunE2ETests(*authConfig, *certDir, *host, *repoRoot, *provider, gceConfig, *orderseed, *times, *reportDir, testList)
} }

View File

@ -32,8 +32,6 @@ source "${KUBE_VERSION_ROOT}/cluster/${KUBERNETES_PROVIDER}/util.sh"
prepare-e2e prepare-e2e
detect-master >/dev/null detect-master >/dev/null
# Export the master name to make it available to the ginkgo tests.
export KUBE_MASTER
# Detect the OS name/arch so that we can find our binary # Detect the OS name/arch so that we can find our binary
case "$(uname -s)" in case "$(uname -s)" in
@ -79,6 +77,9 @@ locations=(
) )
e2e=$( (ls -t "${locations[@]}" 2>/dev/null || true) | head -1 ) e2e=$( (ls -t "${locations[@]}" 2>/dev/null || true) | head -1 )
PROJECT=""
ZONE=""
KUBE_MASTER=""
if [[ "$KUBERNETES_PROVIDER" == "vagrant" ]]; then if [[ "$KUBERNETES_PROVIDER" == "vagrant" ]]; then
# When we are using vagrant it has hard coded auth. We repeat that here so that # When we are using vagrant it has hard coded auth. We repeat that here so that
# we don't clobber auth that might be used for a publicly facing cluster. # we don't clobber auth that might be used for a publicly facing cluster.
@ -93,15 +94,10 @@ elif [[ "${KUBERNETES_PROVIDER}" == "gke" ]]; then
"--auth_config=${cfg_dir}/kubernetes_auth" "--auth_config=${cfg_dir}/kubernetes_auth"
"--cert_dir=${cfg_dir}" "--cert_dir=${cfg_dir}"
) )
# Export the project and zone env vars to make them available to the tests.
export PROJECT
export ZONE
elif [[ "${KUBERNETES_PROVIDER}" == "gce" ]]; then elif [[ "${KUBERNETES_PROVIDER}" == "gce" ]]; then
auth_config=( auth_config=(
"--auth_config=${HOME}/.kube/${PROJECT}_${INSTANCE_PREFIX}/kubernetes_auth" "--auth_config=${HOME}/.kube/${PROJECT}_${INSTANCE_PREFIX}/kubernetes_auth"
) )
export PROJECT
export ZONE
else else
auth_config=() auth_config=()
fi fi
@ -109,5 +105,8 @@ fi
"${e2e}" "${auth_config[@]:+${auth_config[@]}}" \ "${e2e}" "${auth_config[@]:+${auth_config[@]}}" \
--host="https://${KUBE_MASTER_IP-}" \ --host="https://${KUBE_MASTER_IP-}" \
--provider="${KUBERNETES_PROVIDER}" \ --provider="${KUBERNETES_PROVIDER}" \
--gce_project="${PROJECT}" \
--gce_zone="${ZONE}" \
--kube_master="${KUBE_MASTER}" \
${E2E_REPORT_DIR+"--report_dir=${E2E_REPORT_DIR}"} \ ${E2E_REPORT_DIR+"--report_dir=${E2E_REPORT_DIR}"} \
"${@:-}" "${@:-}"

View File

@ -18,7 +18,6 @@ package e2e
import ( import (
"fmt" "fmt"
"os"
"os/exec" "os/exec"
"github.com/GoogleCloudPlatform/kubernetes/pkg/client" "github.com/GoogleCloudPlatform/kubernetes/pkg/client"
@ -42,25 +41,10 @@ var _ = Describe("MasterCerts", func() {
return return
} }
// gcloud requires the project, zone and master VM name, it can't SSH
// based only on the host IP. Unfortunately, you can't SSH into a GCE VM
// without using gcloud SSH or doing out-of-band configuration.
project := os.Getenv("PROJECT")
if project == "" {
Fail(fmt.Sprintf("Error getting PROJECT environment variable"))
}
zone := os.Getenv("ZONE")
if zone == "" {
Fail(fmt.Sprintf("Error getting ZONE environment variable"))
}
master := os.Getenv("KUBE_MASTER")
if master == "" {
Fail(fmt.Sprintf("Error getting KUBE_MASTER environment variable"))
}
for _, certFile := range []string{"kubecfg.key", "kubecfg.crt", "ca.crt"} { for _, certFile := range []string{"kubecfg.key", "kubecfg.crt", "ca.crt"} {
cmd := exec.Command("gcloud", "compute", "ssh", "--project", project, "--zone", zone, cmd := exec.Command("gcloud", "compute", "ssh", "--project", testContext.gceConfig.ProjectID,
master, "--command", fmt.Sprintf("ls /srv/kubernetes/%s", certFile)) "--zone", testContext.gceConfig.Zone, testContext.gceConfig.MasterName,
"--command", fmt.Sprintf("ls /srv/kubernetes/%s", certFile))
if _, err := cmd.CombinedOutput(); err != nil { if _, err := cmd.CombinedOutput(); err != nil {
Fail(fmt.Sprintf("Error checking for cert file %s on master: %v", certFile, err)) Fail(fmt.Sprintf("Error checking for cert file %s on master: %v", certFile, err))
} }

View File

@ -31,6 +31,12 @@ import (
type testResult bool type testResult bool
type GCEConfig struct {
ProjectID string
Zone string
MasterName string
}
func init() { func init() {
// Turn on verbose by default to get spec names // Turn on verbose by default to get spec names
config.DefaultReporterConfig.Verbose = true config.DefaultReporterConfig.Verbose = true
@ -46,8 +52,8 @@ func (t *testResult) Fail() { *t = false }
// Run each Go end-to-end-test. This function assumes the // Run each Go end-to-end-test. This function assumes the
// creation of a test cluster. // creation of a test cluster.
func RunE2ETests(authConfig, certDir, host, repoRoot, provider string, orderseed int64, times int, reportDir string, testList []string) { func RunE2ETests(authConfig, certDir, host, repoRoot, provider string, gceConfig *GCEConfig, orderseed int64, times int, reportDir string, testList []string) {
testContext = testContextType{authConfig, certDir, host, repoRoot, provider} testContext = testContextType{authConfig, certDir, host, repoRoot, provider, *gceConfig}
util.ReallyCrash = true util.ReallyCrash = true
util.InitLogs() util.InitLogs()
defer util.FlushLogs() defer util.FlushLogs()

View File

@ -37,6 +37,7 @@ type testContextType struct {
host string host string
repoRoot string repoRoot string
provider string provider string
gceConfig GCEConfig
} }
var testContext testContextType var testContext testContextType