Move e2e fromManifest funcs to manifest package
This commit is contained in:
		@@ -463,6 +463,7 @@ staging/src/k8s.io/metrics/pkg/apis/metrics/install
 | 
				
			|||||||
staging/src/k8s.io/sample-apiserver
 | 
					staging/src/k8s.io/sample-apiserver
 | 
				
			||||||
staging/src/k8s.io/sample-apiserver/pkg/apis/wardle/install
 | 
					staging/src/k8s.io/sample-apiserver/pkg/apis/wardle/install
 | 
				
			||||||
test/e2e/framework/ginkgowrapper
 | 
					test/e2e/framework/ginkgowrapper
 | 
				
			||||||
 | 
					test/e2e/manifest
 | 
				
			||||||
test/e2e/perftype
 | 
					test/e2e/perftype
 | 
				
			||||||
test/e2e_node/perftype
 | 
					test/e2e_node/perftype
 | 
				
			||||||
test/e2e_node/runner/local
 | 
					test/e2e_node/runner/local
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -157,6 +157,7 @@ go_library(
 | 
				
			|||||||
        "//test/e2e/framework:go_default_library",
 | 
					        "//test/e2e/framework:go_default_library",
 | 
				
			||||||
        "//test/e2e/framework/ginkgowrapper:go_default_library",
 | 
					        "//test/e2e/framework/ginkgowrapper:go_default_library",
 | 
				
			||||||
        "//test/e2e/generated:go_default_library",
 | 
					        "//test/e2e/generated:go_default_library",
 | 
				
			||||||
 | 
					        "//test/e2e/manifest:go_default_library",
 | 
				
			||||||
        "//test/e2e/perf:go_default_library",
 | 
					        "//test/e2e/perf:go_default_library",
 | 
				
			||||||
        "//test/e2e/scheduling:go_default_library",
 | 
					        "//test/e2e/scheduling:go_default_library",
 | 
				
			||||||
        "//test/e2e/upgrades:go_default_library",
 | 
					        "//test/e2e/upgrades:go_default_library",
 | 
				
			||||||
@@ -246,6 +247,7 @@ filegroup(
 | 
				
			|||||||
        "//test/e2e/extension:all-srcs",
 | 
					        "//test/e2e/extension:all-srcs",
 | 
				
			||||||
        "//test/e2e/framework:all-srcs",
 | 
					        "//test/e2e/framework:all-srcs",
 | 
				
			||||||
        "//test/e2e/generated:all-srcs",
 | 
					        "//test/e2e/generated:all-srcs",
 | 
				
			||||||
 | 
					        "//test/e2e/manifest:all-srcs",
 | 
				
			||||||
        "//test/e2e/perf:all-srcs",
 | 
					        "//test/e2e/perf:all-srcs",
 | 
				
			||||||
        "//test/e2e/perftype:all-srcs",
 | 
					        "//test/e2e/perftype:all-srcs",
 | 
				
			||||||
        "//test/e2e/scheduling:all-srcs",
 | 
					        "//test/e2e/scheduling:all-srcs",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,12 +31,8 @@ import (
 | 
				
			|||||||
	"github.com/onsi/ginkgo/reporters"
 | 
						"github.com/onsi/ginkgo/reporters"
 | 
				
			||||||
	"github.com/onsi/gomega"
 | 
						"github.com/onsi/gomega"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/api/core/v1"
 | 
					 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
					 | 
				
			||||||
	runtimeutils "k8s.io/apimachinery/pkg/util/runtime"
 | 
						runtimeutils "k8s.io/apimachinery/pkg/util/runtime"
 | 
				
			||||||
	utilyaml "k8s.io/apimachinery/pkg/util/yaml"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
 | 
						"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/azure"
 | 
						"k8s.io/kubernetes/pkg/cloudprovider/providers/azure"
 | 
				
			||||||
	gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
 | 
						gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
 | 
				
			||||||
@@ -45,7 +41,7 @@ import (
 | 
				
			|||||||
	commontest "k8s.io/kubernetes/test/e2e/common"
 | 
						commontest "k8s.io/kubernetes/test/e2e/common"
 | 
				
			||||||
	"k8s.io/kubernetes/test/e2e/framework"
 | 
						"k8s.io/kubernetes/test/e2e/framework"
 | 
				
			||||||
	"k8s.io/kubernetes/test/e2e/framework/ginkgowrapper"
 | 
						"k8s.io/kubernetes/test/e2e/framework/ginkgowrapper"
 | 
				
			||||||
	"k8s.io/kubernetes/test/e2e/generated"
 | 
						"k8s.io/kubernetes/test/e2e/manifest"
 | 
				
			||||||
	federationtest "k8s.io/kubernetes/test/e2e_federation"
 | 
						federationtest "k8s.io/kubernetes/test/e2e_federation"
 | 
				
			||||||
	testutils "k8s.io/kubernetes/test/utils"
 | 
						testutils "k8s.io/kubernetes/test/utils"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -341,25 +337,12 @@ func RunE2ETests(t *testing.T) {
 | 
				
			|||||||
	ginkgo.RunSpecsWithDefaultAndCustomReporters(t, "Kubernetes e2e suite", r)
 | 
						ginkgo.RunSpecsWithDefaultAndCustomReporters(t, "Kubernetes e2e suite", r)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func podFromManifest(filename string) (*v1.Pod, error) {
 | 
					 | 
				
			||||||
	var pod v1.Pod
 | 
					 | 
				
			||||||
	framework.Logf("Parsing pod from %v", filename)
 | 
					 | 
				
			||||||
	data := generated.ReadOrDie(filename)
 | 
					 | 
				
			||||||
	json, err := utilyaml.ToJSON(data)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if err := runtime.DecodeInto(api.Codecs.UniversalDecoder(), json, &pod); err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return &pod, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Run a test container to try and contact the Kubernetes api-server from a pod, wait for it
 | 
					// Run a test container to try and contact the Kubernetes api-server from a pod, wait for it
 | 
				
			||||||
// to flip to Ready, log its output and delete it.
 | 
					// to flip to Ready, log its output and delete it.
 | 
				
			||||||
func runKubernetesServiceTestContainer(c clientset.Interface, ns string) {
 | 
					func runKubernetesServiceTestContainer(c clientset.Interface, ns string) {
 | 
				
			||||||
	path := "test/images/clusterapi-tester/pod.yaml"
 | 
						path := "test/images/clusterapi-tester/pod.yaml"
 | 
				
			||||||
	p, err := podFromManifest(path)
 | 
						framework.Logf("Parsing pod from %v", path)
 | 
				
			||||||
 | 
						p, err := manifest.PodFromManifest(path)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		framework.Logf("Failed to parse clusterapi-tester from manifest %v: %v", path, err)
 | 
							framework.Logf("Failed to parse clusterapi-tester from manifest %v: %v", path, err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,7 +80,7 @@ go_library(
 | 
				
			|||||||
        "//plugin/pkg/scheduler/algorithm/predicates:go_default_library",
 | 
					        "//plugin/pkg/scheduler/algorithm/predicates:go_default_library",
 | 
				
			||||||
        "//plugin/pkg/scheduler/schedulercache:go_default_library",
 | 
					        "//plugin/pkg/scheduler/schedulercache:go_default_library",
 | 
				
			||||||
        "//test/e2e/framework/ginkgowrapper:go_default_library",
 | 
					        "//test/e2e/framework/ginkgowrapper:go_default_library",
 | 
				
			||||||
        "//test/e2e/generated:go_default_library",
 | 
					        "//test/e2e/manifest:go_default_library",
 | 
				
			||||||
        "//test/e2e/perftype:go_default_library",
 | 
					        "//test/e2e/perftype:go_default_library",
 | 
				
			||||||
        "//test/utils:go_default_library",
 | 
					        "//test/utils:go_default_library",
 | 
				
			||||||
        "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
 | 
					        "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
 | 
				
			||||||
@@ -125,7 +125,6 @@ go_library(
 | 
				
			|||||||
        "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_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/uuid:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/watch: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/discovery:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/client-go/dynamic:go_default_library",
 | 
					        "//vendor/k8s.io/client-go/dynamic:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,6 @@ import (
 | 
				
			|||||||
	"encoding/pem"
 | 
						"encoding/pem"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"io/ioutil"
 | 
					 | 
				
			||||||
	"math/big"
 | 
						"math/big"
 | 
				
			||||||
	"net"
 | 
						"net"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
@@ -44,16 +43,14 @@ import (
 | 
				
			|||||||
	apierrs "k8s.io/apimachinery/pkg/api/errors"
 | 
						apierrs "k8s.io/apimachinery/pkg/api/errors"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
					 | 
				
			||||||
	utilnet "k8s.io/apimachinery/pkg/util/net"
 | 
						utilnet "k8s.io/apimachinery/pkg/util/net"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
						"k8s.io/apimachinery/pkg/util/sets"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
						"k8s.io/apimachinery/pkg/util/wait"
 | 
				
			||||||
	utilyaml "k8s.io/apimachinery/pkg/util/yaml"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
 | 
						"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
 | 
				
			||||||
	gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
 | 
						gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util"
 | 
						"k8s.io/kubernetes/pkg/util"
 | 
				
			||||||
	utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
						utilexec "k8s.io/kubernetes/pkg/util/exec"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/test/e2e/manifest"
 | 
				
			||||||
	testutils "k8s.io/kubernetes/test/utils"
 | 
						testutils "k8s.io/kubernetes/test/utils"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	. "github.com/onsi/ginkgo"
 | 
						. "github.com/onsi/ginkgo"
 | 
				
			||||||
@@ -825,14 +822,16 @@ func (j *IngressTestJig) CreateIngress(manifestPath, ns string, ingAnnotations m
 | 
				
			|||||||
		Logf("creating secret")
 | 
							Logf("creating secret")
 | 
				
			||||||
		RunKubectlOrDie("create", "-f", mkpath("secret.yaml"), fmt.Sprintf("--namespace=%v", ns))
 | 
							RunKubectlOrDie("create", "-f", mkpath("secret.yaml"), fmt.Sprintf("--namespace=%v", ns))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	j.Ingress = createIngressFromManifest(mkpath("ing.yaml"))
 | 
						Logf("Parsing ingress from %v", filepath.Join(manifestPath, "ing.yaml"))
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
						j.Ingress, err = manifest.IngressFromManifest(filepath.Join(manifestPath, "ing.yaml"))
 | 
				
			||||||
 | 
						ExpectNoError(err)
 | 
				
			||||||
	j.Ingress.Namespace = ns
 | 
						j.Ingress.Namespace = ns
 | 
				
			||||||
	j.Ingress.Annotations = map[string]string{ingressClass: j.Class}
 | 
						j.Ingress.Annotations = map[string]string{ingressClass: j.Class}
 | 
				
			||||||
	for k, v := range ingAnnotations {
 | 
						for k, v := range ingAnnotations {
 | 
				
			||||||
		j.Ingress.Annotations[k] = v
 | 
							j.Ingress.Annotations[k] = v
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	Logf(fmt.Sprintf("creating" + j.Ingress.Name + " ingress"))
 | 
						Logf(fmt.Sprintf("creating" + j.Ingress.Name + " ingress"))
 | 
				
			||||||
	var err error
 | 
					 | 
				
			||||||
	j.Ingress, err = j.Client.Extensions().Ingresses(ns).Create(j.Ingress)
 | 
						j.Ingress, err = j.Client.Extensions().Ingresses(ns).Create(j.Ingress)
 | 
				
			||||||
	ExpectNoError(err)
 | 
						ExpectNoError(err)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -990,20 +989,6 @@ func (j *IngressTestJig) ConstructFirewallForIngress(gceController *GCEIngressCo
 | 
				
			|||||||
	return &fw
 | 
						return &fw
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// createIngressFromManifest reads a .json/yaml file and returns the rc in it.
 | 
					 | 
				
			||||||
func createIngressFromManifest(fileName string) *extensions.Ingress {
 | 
					 | 
				
			||||||
	var ing extensions.Ingress
 | 
					 | 
				
			||||||
	Logf("Parsing ingress from %v", fileName)
 | 
					 | 
				
			||||||
	data, err := ioutil.ReadFile(fileName)
 | 
					 | 
				
			||||||
	ExpectNoError(err)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	json, err := utilyaml.ToJSON(data)
 | 
					 | 
				
			||||||
	ExpectNoError(err)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ExpectNoError(runtime.DecodeInto(api.Codecs.UniversalDecoder(), json, &ing))
 | 
					 | 
				
			||||||
	return &ing
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (cont *GCEIngressController) getL7AddonUID() (string, error) {
 | 
					func (cont *GCEIngressController) getL7AddonUID() (string, error) {
 | 
				
			||||||
	Logf("Retrieving UID from config map: %v/%v", metav1.NamespaceSystem, uidConfigMap)
 | 
						Logf("Retrieving UID from config map: %v/%v", metav1.NamespaceSystem, uidConfigMap)
 | 
				
			||||||
	cm, err := cont.Client.Core().ConfigMaps(metav1.NamespaceSystem).Get(uidConfigMap, metav1.GetOptions{})
 | 
						cm, err := cont.Client.Core().ConfigMaps(metav1.NamespaceSystem).Get(uidConfigMap, metav1.GetOptions{})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,21 +27,17 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	. "github.com/onsi/gomega"
 | 
						. "github.com/onsi/gomega"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						apps "k8s.io/api/apps/v1beta1"
 | 
				
			||||||
 | 
						"k8s.io/api/core/v1"
 | 
				
			||||||
	apierrs "k8s.io/apimachinery/pkg/api/errors"
 | 
						apierrs "k8s.io/apimachinery/pkg/api/errors"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/resource"
 | 
						"k8s.io/apimachinery/pkg/api/resource"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
					 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
						"k8s.io/apimachinery/pkg/util/sets"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
						"k8s.io/apimachinery/pkg/util/wait"
 | 
				
			||||||
	utilyaml "k8s.io/apimachinery/pkg/util/yaml"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	apps "k8s.io/api/apps/v1beta1"
 | 
					 | 
				
			||||||
	"k8s.io/api/core/v1"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
					 | 
				
			||||||
	podutil "k8s.io/kubernetes/pkg/api/v1/pod"
 | 
						podutil "k8s.io/kubernetes/pkg/api/v1/pod"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
 | 
						"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
 | 
				
			||||||
	"k8s.io/kubernetes/test/e2e/generated"
 | 
						"k8s.io/kubernetes/test/e2e/manifest"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -70,24 +66,6 @@ func CreateStatefulSetService(name string, labels map[string]string) *v1.Service
 | 
				
			|||||||
	return headlessService
 | 
						return headlessService
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// StatefulSetFromManifest returns a StatefulSet from a manifest stored in fileName in the Namespace indicated by ns.
 | 
					 | 
				
			||||||
func StatefulSetFromManifest(fileName, ns string) *apps.StatefulSet {
 | 
					 | 
				
			||||||
	var ss apps.StatefulSet
 | 
					 | 
				
			||||||
	Logf("Parsing statefulset from %v", fileName)
 | 
					 | 
				
			||||||
	data := generated.ReadOrDie(fileName)
 | 
					 | 
				
			||||||
	json, err := utilyaml.ToJSON(data)
 | 
					 | 
				
			||||||
	Expect(err).NotTo(HaveOccurred())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	Expect(runtime.DecodeInto(api.Codecs.UniversalDecoder(), json, &ss)).NotTo(HaveOccurred())
 | 
					 | 
				
			||||||
	ss.Namespace = ns
 | 
					 | 
				
			||||||
	if ss.Spec.Selector == nil {
 | 
					 | 
				
			||||||
		ss.Spec.Selector = &metav1.LabelSelector{
 | 
					 | 
				
			||||||
			MatchLabels: ss.Spec.Template.Labels,
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return &ss
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// StatefulSetTester is a struct that contains utility methods for testing StatefulSet related functionality. It uses a
 | 
					// StatefulSetTester is a struct that contains utility methods for testing StatefulSet related functionality. It uses a
 | 
				
			||||||
// clientset.Interface to communicate with the API server.
 | 
					// clientset.Interface to communicate with the API server.
 | 
				
			||||||
type StatefulSetTester struct {
 | 
					type StatefulSetTester struct {
 | 
				
			||||||
@@ -113,15 +91,21 @@ func (s *StatefulSetTester) CreateStatefulSet(manifestPath, ns string) *apps.Sta
 | 
				
			|||||||
	mkpath := func(file string) string {
 | 
						mkpath := func(file string) string {
 | 
				
			||||||
		return filepath.Join(manifestPath, file)
 | 
							return filepath.Join(manifestPath, file)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ss := StatefulSetFromManifest(mkpath("statefulset.yaml"), ns)
 | 
					
 | 
				
			||||||
	svcYaml := generated.ReadOrDie(mkpath("service.yaml"))
 | 
						Logf("Parsing statefulset from %v", mkpath("statefulset.yaml"))
 | 
				
			||||||
	ssYaml := generated.ReadOrDie(mkpath("statefulset.yaml"))
 | 
						ss, err := manifest.StatefulSetFromManifest(mkpath("statefulset.yaml"), ns)
 | 
				
			||||||
 | 
						Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
 | 
						Logf("Parsing service from %v", mkpath("service.yaml"))
 | 
				
			||||||
 | 
						svc, err := manifest.SvcFromManifest(mkpath("service.yaml"))
 | 
				
			||||||
 | 
						Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Logf(fmt.Sprintf("creating " + ss.Name + " service"))
 | 
						Logf(fmt.Sprintf("creating " + ss.Name + " service"))
 | 
				
			||||||
	RunKubectlOrDieInput(string(svcYaml[:]), "create", "-f", "-", fmt.Sprintf("--namespace=%v", ns))
 | 
						_, err = s.c.CoreV1().Services(ns).Create(svc)
 | 
				
			||||||
 | 
						Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Logf(fmt.Sprintf("creating statefulset %v/%v with %d replicas and selector %+v", ss.Namespace, ss.Name, *(ss.Spec.Replicas), ss.Spec.Selector))
 | 
						Logf(fmt.Sprintf("creating statefulset %v/%v with %d replicas and selector %+v", ss.Namespace, ss.Name, *(ss.Spec.Replicas), ss.Spec.Selector))
 | 
				
			||||||
	RunKubectlOrDieInput(string(ssYaml[:]), "create", "-f", "-", fmt.Sprintf("--namespace=%v", ns))
 | 
						_, err = s.c.AppsV1beta1().StatefulSets(ns).Create(ss)
 | 
				
			||||||
 | 
						Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
	s.WaitForRunningAndReady(*ss.Spec.Replicas, ss)
 | 
						s.WaitForRunningAndReady(*ss.Spec.Replicas, ss)
 | 
				
			||||||
	return ss
 | 
						return ss
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										37
									
								
								test/e2e/manifest/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								test/e2e/manifest/BUILD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					package(default_visibility = ["//visibility:public"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					licenses(["notice"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load(
 | 
				
			||||||
 | 
					    "@io_bazel_rules_go//go:def.bzl",
 | 
				
			||||||
 | 
					    "go_library",
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = ["manifest.go"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//pkg/api:go_default_library",
 | 
				
			||||||
 | 
					        "//test/e2e/generated:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/api/apps/v1beta1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/api/core/v1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
 | 
				
			||||||
 | 
					        "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "package-srcs",
 | 
				
			||||||
 | 
					    srcs = glob(["**"]),
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    visibility = ["//visibility:private"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					filegroup(
 | 
				
			||||||
 | 
					    name = "all-srcs",
 | 
				
			||||||
 | 
					    srcs = [":package-srcs"],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										109
									
								
								test/e2e/manifest/manifest.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								test/e2e/manifest/manifest.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,109 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package manifest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						apps "k8s.io/api/apps/v1beta1"
 | 
				
			||||||
 | 
						"k8s.io/api/core/v1"
 | 
				
			||||||
 | 
						extensions "k8s.io/api/extensions/v1beta1"
 | 
				
			||||||
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
 | 
						utilyaml "k8s.io/apimachinery/pkg/util/yaml"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/test/e2e/generated"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PodFromManifest reads a .json/yaml file and returns the pod in it.
 | 
				
			||||||
 | 
					func PodFromManifest(filename string) (*v1.Pod, error) {
 | 
				
			||||||
 | 
						var pod v1.Pod
 | 
				
			||||||
 | 
						data := generated.ReadOrDie(filename)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						json, err := utilyaml.ToJSON(data)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := runtime.DecodeInto(api.Codecs.UniversalDecoder(), json, &pod); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &pod, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RcFromManifest reads a .json/yaml file and returns the rc in it.
 | 
				
			||||||
 | 
					func RcFromManifest(fileName string) (*v1.ReplicationController, error) {
 | 
				
			||||||
 | 
						var controller v1.ReplicationController
 | 
				
			||||||
 | 
						data := generated.ReadOrDie(fileName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						json, err := utilyaml.ToJSON(data)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := runtime.DecodeInto(api.Codecs.UniversalDecoder(), json, &controller); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &controller, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SvcFromManifest reads a .json/yaml file and returns the service in it.
 | 
				
			||||||
 | 
					func SvcFromManifest(fileName string) (*v1.Service, error) {
 | 
				
			||||||
 | 
						var svc v1.Service
 | 
				
			||||||
 | 
						data := generated.ReadOrDie(fileName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						json, err := utilyaml.ToJSON(data)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := runtime.DecodeInto(api.Codecs.UniversalDecoder(), json, &svc); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &svc, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IngressFromManifest reads a .json/yaml file and returns the ingress in it.
 | 
				
			||||||
 | 
					func IngressFromManifest(fileName string) (*extensions.Ingress, error) {
 | 
				
			||||||
 | 
						var ing extensions.Ingress
 | 
				
			||||||
 | 
						data := generated.ReadOrDie(fileName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						json, err := utilyaml.ToJSON(data)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := runtime.DecodeInto(api.Codecs.UniversalDecoder(), json, &ing); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &ing, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// StatefulSetFromManifest returns a StatefulSet from a manifest stored in fileName in the Namespace indicated by ns.
 | 
				
			||||||
 | 
					func StatefulSetFromManifest(fileName, ns string) (*apps.StatefulSet, error) {
 | 
				
			||||||
 | 
						var ss apps.StatefulSet
 | 
				
			||||||
 | 
						data := generated.ReadOrDie(fileName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						json, err := utilyaml.ToJSON(data)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := runtime.DecodeInto(api.Codecs.UniversalDecoder(), json, &ss); err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						ss.Namespace = ns
 | 
				
			||||||
 | 
						if ss.Spec.Selector == nil {
 | 
				
			||||||
 | 
							ss.Spec.Selector = &metav1.LabelSelector{
 | 
				
			||||||
 | 
								MatchLabels: ss.Spec.Template.Labels,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return &ss, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -23,13 +23,11 @@ import (
 | 
				
			|||||||
	"k8s.io/api/core/v1"
 | 
						"k8s.io/api/core/v1"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
					 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
						"k8s.io/apimachinery/pkg/util/wait"
 | 
				
			||||||
	utilyaml "k8s.io/apimachinery/pkg/util/yaml"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
 | 
						"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
 | 
				
			||||||
	"k8s.io/kubernetes/test/e2e/framework"
 | 
						"k8s.io/kubernetes/test/e2e/framework"
 | 
				
			||||||
	"k8s.io/kubernetes/test/e2e/generated"
 | 
						"k8s.io/kubernetes/test/e2e/manifest"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	. "github.com/onsi/ginkgo"
 | 
						. "github.com/onsi/ginkgo"
 | 
				
			||||||
	. "github.com/onsi/gomega"
 | 
						. "github.com/onsi/gomega"
 | 
				
			||||||
@@ -88,7 +86,9 @@ func (h *haproxyControllerTester) getName() string {
 | 
				
			|||||||
func (h *haproxyControllerTester) start(namespace string) (err error) {
 | 
					func (h *haproxyControllerTester) start(namespace string) (err error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create a replication controller with the given configuration.
 | 
						// Create a replication controller with the given configuration.
 | 
				
			||||||
	rc := rcFromManifest(h.cfg)
 | 
						framework.Logf("Parsing rc from %v", h.cfg)
 | 
				
			||||||
 | 
						rc, err := manifest.RcFromManifest(h.cfg)
 | 
				
			||||||
 | 
						Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
	rc.Namespace = namespace
 | 
						rc.Namespace = namespace
 | 
				
			||||||
	rc.Spec.Template.Labels["name"] = rc.Name
 | 
						rc.Spec.Template.Labels["name"] = rc.Name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -164,7 +164,10 @@ func (s *ingManager) getName() string {
 | 
				
			|||||||
func (s *ingManager) start(namespace string) (err error) {
 | 
					func (s *ingManager) start(namespace string) (err error) {
 | 
				
			||||||
	// Create rcs
 | 
						// Create rcs
 | 
				
			||||||
	for _, rcPath := range s.rcCfgPaths {
 | 
						for _, rcPath := range s.rcCfgPaths {
 | 
				
			||||||
		rc := rcFromManifest(rcPath)
 | 
							framework.Logf("Parsing rc from %v", rcPath)
 | 
				
			||||||
 | 
							var rc *v1.ReplicationController
 | 
				
			||||||
 | 
							rc, err = manifest.RcFromManifest(rcPath)
 | 
				
			||||||
 | 
							Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
		rc.Namespace = namespace
 | 
							rc.Namespace = namespace
 | 
				
			||||||
		rc.Spec.Template.Labels["name"] = rc.Name
 | 
							rc.Spec.Template.Labels["name"] = rc.Name
 | 
				
			||||||
		rc, err = s.client.Core().ReplicationControllers(rc.Namespace).Create(rc)
 | 
							rc, err = s.client.Core().ReplicationControllers(rc.Namespace).Create(rc)
 | 
				
			||||||
@@ -179,7 +182,10 @@ func (s *ingManager) start(namespace string) (err error) {
 | 
				
			|||||||
	// Note that it's up to the caller to make sure the service actually matches
 | 
						// Note that it's up to the caller to make sure the service actually matches
 | 
				
			||||||
	// the pods of the rc.
 | 
						// the pods of the rc.
 | 
				
			||||||
	for _, svcPath := range s.svcCfgPaths {
 | 
						for _, svcPath := range s.svcCfgPaths {
 | 
				
			||||||
		svc := svcFromManifest(svcPath)
 | 
							framework.Logf("Parsing service from %v", svcPath)
 | 
				
			||||||
 | 
							var svc *v1.Service
 | 
				
			||||||
 | 
							svc, err = manifest.SvcFromManifest(svcPath)
 | 
				
			||||||
 | 
							Expect(err).NotTo(HaveOccurred())
 | 
				
			||||||
		svc.Namespace = namespace
 | 
							svc.Namespace = namespace
 | 
				
			||||||
		svc, err = s.client.Core().Services(svc.Namespace).Create(svc)
 | 
							svc, err = s.client.Core().Services(svc.Namespace).Create(svc)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@@ -238,29 +244,3 @@ var _ = framework.KubeDescribe("ServiceLoadBalancer [Feature:ServiceLoadBalancer
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					 | 
				
			||||||
// rcFromManifest reads a .json/yaml file and returns the rc in it.
 | 
					 | 
				
			||||||
func rcFromManifest(fileName string) *v1.ReplicationController {
 | 
					 | 
				
			||||||
	var controller v1.ReplicationController
 | 
					 | 
				
			||||||
	framework.Logf("Parsing rc from %v", fileName)
 | 
					 | 
				
			||||||
	data := generated.ReadOrDie(fileName)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	json, err := utilyaml.ToJSON(data)
 | 
					 | 
				
			||||||
	Expect(err).NotTo(HaveOccurred())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	Expect(runtime.DecodeInto(api.Codecs.UniversalDecoder(), json, &controller)).NotTo(HaveOccurred())
 | 
					 | 
				
			||||||
	return &controller
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// svcFromManifest reads a .json/yaml file and returns the rc in it.
 | 
					 | 
				
			||||||
func svcFromManifest(fileName string) *v1.Service {
 | 
					 | 
				
			||||||
	var svc v1.Service
 | 
					 | 
				
			||||||
	framework.Logf("Parsing service from %v", fileName)
 | 
					 | 
				
			||||||
	data := generated.ReadOrDie(fileName)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	json, err := utilyaml.ToJSON(data)
 | 
					 | 
				
			||||||
	Expect(err).NotTo(HaveOccurred())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	Expect(runtime.DecodeInto(api.Codecs.UniversalDecoder(), json, &svc)).NotTo(HaveOccurred())
 | 
					 | 
				
			||||||
	return &svc
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user