From 18425172e56609e931714534372e7c7348a5e35c Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Sun, 12 Jun 2016 20:58:24 -0700 Subject: [PATCH 1/3] Updating federation up scripts to work in non e2e setup --- federation/cluster/common.sh | 8 ++++---- federation/cluster/federation-up.sh | 4 ++++ federation/cluster/template.go | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/federation/cluster/common.sh b/federation/cluster/common.sh index e836f84088e..49f5f975b65 100644 --- a/federation/cluster/common.sh +++ b/federation/cluster/common.sh @@ -46,7 +46,7 @@ if [[ -z "${FEDERATION_PUSH_REPO_BASE}" ]]; then fi FEDERATION_IMAGE_REPO_BASE=${FEDERATION_IMAGE_REPO_BASE:-'gcr.io/google_containers'} -FEDERATION_NAMESPACE=${FEDERATION_NAMESPACE:-federation-e2e} +FEDERATION_NAMESPACE=${FEDERATION_NAMESPACE:-federation} KUBE_PLATFORM=${KUBE_PLATFORM:-linux} KUBE_ARCH=${KUBE_ARCH:-amd64} @@ -98,7 +98,7 @@ function create-federation-api-objects { FEDERATION_KUBECONFIG_PATH="${KUBE_ROOT}/federation/cluster/kubeconfig" - federation_kubectl="${KUBE_ROOT}/cluster/kubectl.sh --context=federated-cluster --namespace=default" + federation_kubectl="${KUBE_ROOT}/cluster/kubectl.sh --context=federation-cluster --namespace=default" manifests_root="${KUBE_ROOT}/federation/manifests/" @@ -151,7 +151,7 @@ function create-federation-api-objects { # controller manager can use to talk to the federation-apiserver. # Note that the file name should be "kubeconfig" so that the secret key gets the same name. KUBECONFIG_DIR=$(dirname ${KUBECONFIG:-$DEFAULT_KUBECONFIG}) - CONTEXT=federated-cluster \ + CONTEXT=federation-cluster \ KUBE_BEARER_TOKEN="$FEDERATION_API_TOKEN" \ KUBECONFIG="${KUBECONFIG_DIR}/federation/federation-apiserver/kubeconfig" \ create-kubeconfig @@ -168,7 +168,7 @@ function create-federation-api-objects { done # Update the users kubeconfig to include federation-apiserver credentials. - CONTEXT=federated-cluster \ + CONTEXT=federation-cluster \ KUBE_BEARER_TOKEN="$FEDERATION_API_TOKEN" \ SECONDARY_KUBECONFIG=true \ create-kubeconfig diff --git a/federation/cluster/federation-up.sh b/federation/cluster/federation-up.sh index 90c80982302..9599d54e247 100755 --- a/federation/cluster/federation-up.sh +++ b/federation/cluster/federation-up.sh @@ -22,4 +22,8 @@ KUBE_ROOT=$(readlink -m $(dirname "${BASH_SOURCE}")/../../) . ${KUBE_ROOT}/federation/cluster/common.sh +if [[ -f "${KUBE_ROOT}/federation/manifests/federated-image.tag" ]]; then + export FEDERATION_IMAGE_TAG="$(cat "${KUBE_ROOT}/federation/manifests/federated-image.tag")" +fi + create-federation-api-objects diff --git a/federation/cluster/template.go b/federation/cluster/template.go index 9c947bc8549..3914cfec0df 100644 --- a/federation/cluster/template.go +++ b/federation/cluster/template.go @@ -64,7 +64,7 @@ func main() { } func templateYamlFile(params map[string]string, inpath string, out io.Writer) error { - if tmpl, err := template.New(path.Base(inpath)).ParseFiles(inpath); err != nil { + if tmpl, err := template.New(path.Base(inpath)).Option("missingkey=zero").ParseFiles(inpath); err != nil { return err } else { if err := tmpl.Execute(out, params); err != nil { From 9b2b763ab0300c8e3077b26d79910c926ecb22d4 Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Mon, 13 Jun 2016 11:20:55 -0700 Subject: [PATCH 2/3] Fixing references to federated-context and federation-e2e --- federation/cluster/federation-up.sh | 7 +++++-- hack/e2e-internal/e2e-status.sh | 2 +- hack/e2e-internal/e2e-up.sh | 8 ++++++-- test/e2e/federation-apiserver.go | 2 +- test/e2e/framework/framework.go | 2 +- test/e2e/framework/test_context.go | 2 +- test/e2e/framework/util.go | 2 +- 7 files changed, 16 insertions(+), 9 deletions(-) diff --git a/federation/cluster/federation-up.sh b/federation/cluster/federation-up.sh index 9599d54e247..3c8680189c1 100755 --- a/federation/cluster/federation-up.sh +++ b/federation/cluster/federation-up.sh @@ -22,8 +22,11 @@ KUBE_ROOT=$(readlink -m $(dirname "${BASH_SOURCE}")/../../) . ${KUBE_ROOT}/federation/cluster/common.sh -if [[ -f "${KUBE_ROOT}/federation/manifests/federated-image.tag" ]]; then - export FEDERATION_IMAGE_TAG="$(cat "${KUBE_ROOT}/federation/manifests/federated-image.tag")" +tagfile="${KUBE_ROOT}/federation/manifests/federated-image.tag" +if [[ ! -f "$tagfile" ]]; then + echo "FATAL: tagfile ${tagfile} does not exist. Make sure that you have run build/push-federation-images.sh" + exit 1 fi +export FEDERATION_IMAGE_TAG="$(cat "${KUBE_ROOT}/federation/manifests/federated-image.tag")" create-federation-api-objects diff --git a/hack/e2e-internal/e2e-status.sh b/hack/e2e-internal/e2e-status.sh index df171bb5463..f26530190bb 100755 --- a/hack/e2e-internal/e2e-status.sh +++ b/hack/e2e-internal/e2e-status.sh @@ -30,7 +30,7 @@ source "${KUBE_ROOT}/cluster/kube-util.sh" prepare-e2e if [[ "${FEDERATION:-}" == "true" ]];then - FEDERATION_NAMESPACE=${FEDERATION_NAMESPACE:-federation-e2e} + FEDERATION_NAMESPACE=${FEDERATION_NAMESPACE:-federation} #TODO(colhom): the last cluster that was created in the loop above is the current context. # Hence, it will be the cluster that hosts the federated components. # In the future, we will want to loop through the all the federated contexts, diff --git a/hack/e2e-internal/e2e-up.sh b/hack/e2e-internal/e2e-up.sh index 8d2a501dcf3..eea67d4b87a 100755 --- a/hack/e2e-internal/e2e-up.sh +++ b/hack/e2e-internal/e2e-up.sh @@ -40,9 +40,13 @@ if [[ "${FEDERATION:-}" == "true" ]];then test-setup ) done - if [[ -f "${KUBE_ROOT}/federation/manifests/federated-image.tag" ]];then - export FEDERATION_IMAGE_TAG="$(cat "${KUBE_ROOT}/federation/manifests/federated-image.tag")" + tagfile="${KUBE_ROOT}/federation/manifests/federated-image.tag" + if [[ ! -f "$tagfile" ]]; then + echo "FATAL: tagfile ${tagfile} does not exist. Make sure that you have run build/push-federation-images.sh" + exit 1 fi + export FEDERATION_IMAGE_TAG="$(cat "${KUBE_ROOT}/federation/manifests/federated-image.tag")" + "${KUBE_ROOT}/federation/cluster/federation-up.sh" else test-setup diff --git a/test/e2e/federation-apiserver.go b/test/e2e/federation-apiserver.go index c0c39fbc4ac..656a127fb9e 100644 --- a/test/e2e/federation-apiserver.go +++ b/test/e2e/federation-apiserver.go @@ -27,7 +27,7 @@ import ( // Create/delete cluster api objects var _ = framework.KubeDescribe("Federation apiserver [Feature:Federation]", func() { - f := framework.NewDefaultFederatedFramework("federated-cluster") + f := framework.NewDefaultFederatedFramework("federation-cluster") It("should allow creation of cluster api objects", func() { framework.SkipUnlessFederated(f.Client) diff --git a/test/e2e/framework/framework.go b/test/e2e/framework/framework.go index 07ff5df7aa8..19bf34ed3ff 100644 --- a/test/e2e/framework/framework.go +++ b/test/e2e/framework/framework.go @@ -586,7 +586,7 @@ func (f *Framework) GetUnderlyingFederatedContexts() []E2EContext { e2eContexts := []E2EContext{} for _, context := range kubeconfig.Contexts { - if strings.HasPrefix(context.Name, "federation-e2e") { + if strings.HasPrefix(context.Name, "federation") { user := kubeconfig.findUser(context.Context.User) if user == nil { diff --git a/test/e2e/framework/test_context.go b/test/e2e/framework/test_context.go index d8bac29c26a..c998331e0b6 100644 --- a/test/e2e/framework/test_context.go +++ b/test/e2e/framework/test_context.go @@ -92,7 +92,7 @@ func RegisterFlags() { flag.StringVar(&TestContext.KubeConfig, clientcmd.RecommendedConfigPathFlag, os.Getenv(clientcmd.RecommendedConfigPathEnvVar), "Path to kubeconfig containing embedded authinfo.") flag.StringVar(&TestContext.KubeContext, clientcmd.FlagContext, "", "kubeconfig context to use/override. If unset, will use value from 'current-context'") flag.StringVar(&TestContext.KubeAPIContentType, "kube-api-content-type", "", "ContentType used to communicate with apiserver") - flag.StringVar(&federatedKubeContext, "federated-kube-context", "federated-cluster", "kubeconfig context for federated-cluster.") + flag.StringVar(&federatedKubeContext, "federated-kube-context", "federation-cluster", "kubeconfig context for federation-cluster.") flag.StringVar(&TestContext.KubeVolumeDir, "volume-dir", "/var/lib/kubelet", "Path to the directory containing the kubelet volumes.") flag.StringVar(&TestContext.CertDir, "cert-dir", "", "Path to the directory containing the certs. Default is empty, which doesn't use certs.") diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index ba9f17e8989..0071406da7c 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -383,7 +383,7 @@ func SkipUnlessServerVersionGTE(v semver.Version, c discovery.ServerVersionInter func SkipUnlessFederated(c *client.Client) { federationNS := os.Getenv("FEDERATION_NAMESPACE") if federationNS == "" { - federationNS = "federation-e2e" + federationNS = "federation" } _, err := c.Namespaces().Get(federationNS) From 5a20112ec4a19107e2f74809be8198afc0417129 Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Mon, 13 Jun 2016 15:19:57 -0700 Subject: [PATCH 3/3] Adding test for cluster controller --- test/e2e/federation-apiserver.go | 25 +++++++++++++++++++++++-- test/e2e/framework/framework.go | 2 +- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/test/e2e/federation-apiserver.go b/test/e2e/federation-apiserver.go index 656a127fb9e..90bb5422316 100644 --- a/test/e2e/federation-apiserver.go +++ b/test/e2e/federation-apiserver.go @@ -18,10 +18,13 @@ package e2e import ( "fmt" + "time" . "github.com/onsi/ginkgo" federationapi "k8s.io/kubernetes/federation/apis/federation" + "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/test/e2e/framework" ) @@ -54,16 +57,34 @@ var _ = framework.KubeDescribe("Federation apiserver [Feature:Federation]", func }, }, } - _, err := f.FederationClient.Clusters().Create(&cluster) + _, err := f.FederationClientset.Federation().Clusters().Create(&cluster) framework.ExpectNoError(err, fmt.Sprintf("creating cluster: %+v", err)) } for _, context := range contexts { - c, err := f.FederationClient.Clusters().Get(context.Name) + c, err := f.FederationClientset.Federation().Clusters().Get(context.Name) framework.ExpectNoError(err, fmt.Sprintf("get cluster: %+v", err)) if c.ObjectMeta.Name != context.Name { framework.Failf("cluster name does not match input context: actual=%+v, expected=%+v", c, context) } + err = isReady(context.Name, f.FederationClientset) + framework.ExpectNoError(err, fmt.Sprintf("unexpected error in verifying if cluster %s is ready: %+v", context.Name, err)) } }) }) + +// Verify that the cluster is marked ready. +func isReady(clusterName string, clientset *federation_internalclientset.Clientset) error { + return wait.PollImmediate(time.Second, wait.ForeverTestTimeout, func() (bool, error) { + c, err := clientset.Federation().Clusters().Get(clusterName) + if err != nil { + return false, err + } + for _, condition := range c.Status.Conditions { + if condition.Type == federationapi.ClusterReady && condition.Status == api.ConditionTrue { + return true, nil + } + } + return false, nil + }) +} diff --git a/test/e2e/framework/framework.go b/test/e2e/framework/framework.go index 19bf34ed3ff..55168c2dfc1 100644 --- a/test/e2e/framework/framework.go +++ b/test/e2e/framework/framework.go @@ -586,7 +586,7 @@ func (f *Framework) GetUnderlyingFederatedContexts() []E2EContext { e2eContexts := []E2EContext{} for _, context := range kubeconfig.Contexts { - if strings.HasPrefix(context.Name, "federation") { + if strings.HasPrefix(context.Name, "federation") && context.Name != "federation-cluster" { user := kubeconfig.findUser(context.Context.User) if user == nil {