diff --git a/test/e2e/apimachinery/aggregator.go b/test/e2e/apimachinery/aggregator.go index a5afd256631..6616a45cd8d 100644 --- a/test/e2e/apimachinery/aggregator.go +++ b/test/e2e/apimachinery/aggregator.go @@ -202,7 +202,6 @@ func TestSampleAPIServer(f *framework.Framework, aggrclient *aggregatorclient.Cl etcdImage := imageutils.GetE2EImage(imageutils.Etcd) podLabels := map[string]string{"app": "sample-apiserver", "apiserver": "true"} replicas := int32(1) - zero := int64(0) etcdLocalhostAddress := "127.0.0.1" if framework.TestContext.ClusterIsIPv6() { etcdLocalhostAddress = "::1" @@ -250,31 +249,10 @@ func TestSampleAPIServer(f *framework.Framework, aggrclient *aggregatorclient.Cl }, }, } - d := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: deploymentName, - Labels: podLabels, - }, - Spec: appsv1.DeploymentSpec{ - Replicas: &replicas, - Selector: &metav1.LabelSelector{ - MatchLabels: podLabels, - }, - Strategy: appsv1.DeploymentStrategy{ - Type: appsv1.RollingUpdateDeploymentStrategyType, - }, - Template: v1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: podLabels, - }, - Spec: v1.PodSpec{ - TerminationGracePeriodSeconds: &zero, - Containers: containers, - Volumes: volumes, - }, - }, - }, - } + d := e2edeployment.NewDeployment(deploymentName, replicas, podLabels, "", "", appsv1.RollingUpdateDeploymentStrategyType) + d.Spec.Template.Spec.Containers = containers + d.Spec.Template.Spec.Volumes = volumes + deployment, err := client.AppsV1().Deployments(namespace).Create(context.TODO(), d, metav1.CreateOptions{}) framework.ExpectNoError(err, "creating deployment %s in namespace %s", deploymentName, namespace) diff --git a/test/e2e/apimachinery/crd_conversion_webhook.go b/test/e2e/apimachinery/crd_conversion_webhook.go index a45e369f307..4898c8375a6 100644 --- a/test/e2e/apimachinery/crd_conversion_webhook.go +++ b/test/e2e/apimachinery/crd_conversion_webhook.go @@ -266,7 +266,6 @@ func deployCustomResourceWebhookAndService(f *framework.Framework, image string, // Create the deployment of the webhook podLabels := map[string]string{"app": "sample-crd-conversion-webhook", "crd-webhook": "true"} replicas := int32(1) - zero := int64(0) mounts := []v1.VolumeMount{ { Name: "crd-conversion-webhook-certs", @@ -311,31 +310,10 @@ func deployCustomResourceWebhookAndService(f *framework.Framework, image string, Ports: []v1.ContainerPort{{ContainerPort: containerPort}}, }, } - d := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: deploymentCRDName, - Labels: podLabels, - }, - Spec: appsv1.DeploymentSpec{ - Replicas: &replicas, - Selector: &metav1.LabelSelector{ - MatchLabels: podLabels, - }, - Strategy: appsv1.DeploymentStrategy{ - Type: appsv1.RollingUpdateDeploymentStrategyType, - }, - Template: v1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: podLabels, - }, - Spec: v1.PodSpec{ - TerminationGracePeriodSeconds: &zero, - Containers: containers, - Volumes: volumes, - }, - }, - }, - } + d := e2edeployment.NewDeployment(deploymentCRDName, replicas, podLabels, "", "", appsv1.RollingUpdateDeploymentStrategyType) + d.Spec.Template.Spec.Containers = containers + d.Spec.Template.Spec.Volumes = volumes + deployment, err := client.AppsV1().Deployments(namespace).Create(context.TODO(), d, metav1.CreateOptions{}) framework.ExpectNoError(err, "creating deployment %s in namespace %s", deploymentCRDName, namespace) diff --git a/test/e2e/apimachinery/garbage_collector.go b/test/e2e/apimachinery/garbage_collector.go index 4bfe7ba1864..e337a46d60a 100644 --- a/test/e2e/apimachinery/garbage_collector.go +++ b/test/e2e/apimachinery/garbage_collector.go @@ -39,6 +39,7 @@ import ( "k8s.io/apiserver/pkg/storage/names" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/test/e2e/framework" + e2edeployment "k8s.io/kubernetes/test/e2e/framework/deployment" e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics" e2enode "k8s.io/kubernetes/test/e2e/framework/node" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" @@ -126,20 +127,7 @@ func getPodTemplateSpec(labels map[string]string) v1.PodTemplateSpec { } func newOwnerDeployment(f *framework.Framework, deploymentName string, labels map[string]string) *appsv1.Deployment { - replicas := int32(2) - return &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: deploymentName, - }, - Spec: appsv1.DeploymentSpec{ - Replicas: &replicas, - Selector: &metav1.LabelSelector{MatchLabels: labels}, - Strategy: appsv1.DeploymentStrategy{ - Type: appsv1.RollingUpdateDeploymentStrategyType, - }, - Template: getPodTemplateSpec(labels), - }, - } + return e2edeployment.NewDeployment(deploymentName, 2, labels, "nginx", imageutils.GetE2EImage(imageutils.Nginx), appsv1.RollingUpdateDeploymentStrategyType) } func newOwnerRC(f *framework.Framework, name string, replicas int32, labels map[string]string) *v1.ReplicationController { diff --git a/test/e2e/apimachinery/webhook.go b/test/e2e/apimachinery/webhook.go index 4f73c71b73b..360993e3889 100644 --- a/test/e2e/apimachinery/webhook.go +++ b/test/e2e/apimachinery/webhook.go @@ -767,7 +767,6 @@ func deployWebhookAndService(f *framework.Framework, image string, certCtx *cert // Create the deployment of the webhook podLabels := map[string]string{"app": "sample-webhook", "webhook": "true"} replicas := int32(1) - zero := int64(0) mounts := []v1.VolumeMount{ { Name: "webhook-certs", @@ -812,31 +811,10 @@ func deployWebhookAndService(f *framework.Framework, image string, certCtx *cert Ports: []v1.ContainerPort{{ContainerPort: containerPort}}, }, } - d := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: deploymentName, - Labels: podLabels, - }, - Spec: appsv1.DeploymentSpec{ - Replicas: &replicas, - Selector: &metav1.LabelSelector{ - MatchLabels: podLabels, - }, - Strategy: appsv1.DeploymentStrategy{ - Type: appsv1.RollingUpdateDeploymentStrategyType, - }, - Template: v1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: podLabels, - }, - Spec: v1.PodSpec{ - TerminationGracePeriodSeconds: &zero, - Containers: containers, - Volumes: volumes, - }, - }, - }, - } + d := e2edeployment.NewDeployment(deploymentName, replicas, podLabels, "", "", appsv1.RollingUpdateDeploymentStrategyType) + d.Spec.Template.Spec.Containers = containers + d.Spec.Template.Spec.Volumes = volumes + deployment, err := client.AppsV1().Deployments(namespace).Create(context.TODO(), d, metav1.CreateOptions{}) framework.ExpectNoError(err, "creating deployment %s in namespace %s", deploymentName, namespace) ginkgo.By("Wait for the deployment to be ready") diff --git a/test/e2e/apps/deployment.go b/test/e2e/apps/deployment.go index 3f9082bf07d..95e7aea7db6 100644 --- a/test/e2e/apps/deployment.go +++ b/test/e2e/apps/deployment.go @@ -192,9 +192,6 @@ var _ = SIGDescribe("Deployment", func() { testDeploymentNoReplicas := int32(0) testDeploymentLabels := map[string]string{"test-deployment-static": "true"} testDeploymentLabelsFlat := "test-deployment-static=true" - testDeploymentLabelSelectors := metav1.LabelSelector{ - MatchLabels: testDeploymentLabels, - } w := &cache.ListWatch{ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { options.LabelSelector = testDeploymentLabelsFlat @@ -205,29 +202,13 @@ var _ = SIGDescribe("Deployment", func() { framework.ExpectNoError(err, "failed to list Deployments") ginkgo.By("creating a Deployment") - testDeployment := appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: testDeploymentName, - Labels: map[string]string{"test-deployment-static": "true"}, - }, - Spec: appsv1.DeploymentSpec{ - Replicas: &testDeploymentDefaultReplicas, - Selector: &testDeploymentLabelSelectors, - Template: v1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: testDeploymentLabelSelectors.MatchLabels, - }, - Spec: v1.PodSpec{ - TerminationGracePeriodSeconds: &one, - Containers: []v1.Container{{ - Name: testDeploymentName, - Image: testDeploymentInitialImage, - }}, - }, - }, - }, - } - _, err = f.ClientSet.AppsV1().Deployments(testNamespaceName).Create(context.TODO(), &testDeployment, metav1.CreateOptions{}) + testDeployment := e2edeployment.NewDeployment( + testDeploymentName, testDeploymentDefaultReplicas, testDeploymentLabels, + testDeploymentName, testDeploymentInitialImage, appsv1.RollingUpdateDeploymentStrategyType) + testDeployment.ObjectMeta.Labels = map[string]string{"test-deployment-static": "true"} + testDeployment.Spec.Template.Spec.TerminationGracePeriodSeconds = &one + + _, err = f.ClientSet.AppsV1().Deployments(testNamespaceName).Create(context.TODO(), testDeployment, metav1.CreateOptions{}) framework.ExpectNoError(err, "failed to create Deployment %v in namespace %v", testDeploymentName, testNamespaceName) ginkgo.By("waiting for Deployment to be created") diff --git a/test/e2e/framework/ingress/ingress_utils.go b/test/e2e/framework/ingress/ingress_utils.go index 50673171e43..c0aff34161d 100644 --- a/test/e2e/framework/ingress/ingress_utils.go +++ b/test/e2e/framework/ingress/ingress_utils.go @@ -57,6 +57,7 @@ import ( clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" "k8s.io/kubernetes/test/e2e/framework" + e2edeployment "k8s.io/kubernetes/test/e2e/framework/deployment" e2eservice "k8s.io/kubernetes/test/e2e/framework/service" e2etestfiles "k8s.io/kubernetes/test/e2e/framework/testfiles" testutils "k8s.io/kubernetes/test/utils" @@ -1101,35 +1102,14 @@ func generateBacksideHTTPSServiceSpec() *v1.Service { } func generateBacksideHTTPSDeploymentSpec() *appsv1.Deployment { - return &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: "echoheaders-https", - }, - Spec: appsv1.DeploymentSpec{ - Selector: &metav1.LabelSelector{MatchLabels: map[string]string{ - "app": "echoheaders-https", - }}, - Template: v1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: map[string]string{ - "app": "echoheaders-https", - }, - }, - Spec: v1.PodSpec{ - Containers: []v1.Container{ - { - Name: "echoheaders-https", - Image: imageutils.GetE2EImage(imageutils.EchoServer), - Ports: []v1.ContainerPort{{ - ContainerPort: 8443, - Name: "echo-443", - }}, - }, - }, - }, - }, - }, - } + labels := map[string]string{"app": "echoheaders-https"} + d := e2edeployment.NewDeployment("echoheaders-https", 0, labels, "echoheaders-https", imageutils.GetE2EImage(imageutils.EchoServer), appsv1.RollingUpdateDeploymentStrategyType) + d.Spec.Replicas = nil + d.Spec.Template.Spec.Containers[0].Ports = []v1.ContainerPort{{ + ContainerPort: 8443, + Name: "echo-443", + }} + return d } // SetUpBacksideHTTPSIngress sets up deployment, service and ingress with backside HTTPS configured. diff --git a/test/e2e/instrumentation/monitoring/custom_metrics_deployments.go b/test/e2e/instrumentation/monitoring/custom_metrics_deployments.go index 4079a90e742..78ece15e3a9 100644 --- a/test/e2e/instrumentation/monitoring/custom_metrics_deployments.go +++ b/test/e2e/instrumentation/monitoring/custom_metrics_deployments.go @@ -26,6 +26,7 @@ import ( rbacv1 "k8s.io/api/rbac/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/test/e2e/framework" + e2edeployment "k8s.io/kubernetes/test/e2e/framework/deployment" imageutils "k8s.io/kubernetes/test/utils/image" gcm "google.golang.org/api/monitoring/v3" @@ -104,26 +105,10 @@ func StackdriverExporterDeployment(name, namespace string, replicas int32, conta podSpec.Containers = append(podSpec.Containers, stackdriverExporterContainerSpec(containerSpec.Name, namespace, containerSpec.MetricName, containerSpec.MetricValue)) } - return &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - }, - Spec: appsv1.DeploymentSpec{ - Selector: &metav1.LabelSelector{ - MatchLabels: map[string]string{"name": name}, - }, - Template: v1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: map[string]string{ - "name": name, - }, - }, - Spec: podSpec, - }, - Replicas: &replicas, - }, - } + d := e2edeployment.NewDeployment(name, replicas, map[string]string{"name": name}, "", "", appsv1.RollingUpdateDeploymentStrategyType) + d.ObjectMeta.Namespace = namespace + d.Spec.Template.Spec = podSpec + return d } // StackdriverExporterPod is a Pod of simple application that exports a metric of fixed value to @@ -188,26 +173,10 @@ func stackdriverExporterContainerSpec(name string, namespace string, metricName // one exposing a metric in prometheus format and second a prometheus-to-sd container // that scrapes the metric and pushes it to stackdriver. func PrometheusExporterDeployment(name, namespace string, replicas int32, metricValue int64) *appsv1.Deployment { - return &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - }, - Spec: appsv1.DeploymentSpec{ - Selector: &metav1.LabelSelector{ - MatchLabels: map[string]string{"name": name}, - }, - Template: v1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: map[string]string{ - "name": name, - }, - }, - Spec: prometheusExporterPodSpec(CustomMetricName, metricValue, 8080), - }, - Replicas: &replicas, - }, - } + d := e2edeployment.NewDeployment(name, replicas, map[string]string{"name": name}, "", "", appsv1.RollingUpdateDeploymentStrategyType) + d.ObjectMeta.Namespace = namespace + d.Spec.Template.Spec = prometheusExporterPodSpec(CustomMetricName, metricValue, 8080) + return d } func prometheusExporterPodSpec(metricName string, metricValue int64, port int32) v1.PodSpec { diff --git a/test/e2e/network/networking_perf.go b/test/e2e/network/networking_perf.go index d66de56871c..136888bd83b 100644 --- a/test/e2e/network/networking_perf.go +++ b/test/e2e/network/networking_perf.go @@ -68,38 +68,16 @@ func iperf2ServerDeployment(client clientset.Interface, namespace string, isIPV6 if isIPV6 { args = append(args, "-V") } - deploymentSpec := &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: "iperf2-server-deployment", - Labels: labels, - }, - Spec: appsv1.DeploymentSpec{ - Replicas: &replicas, - Selector: &metav1.LabelSelector{ - MatchLabels: labels, - }, - Template: v1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: labels, - }, - Spec: v1.PodSpec{ - TerminationGracePeriodSeconds: &one, - Containers: []v1.Container{ - { - Name: "iperf2-server", - Image: imageutils.GetE2EImage(imageutils.Agnhost), - Command: []string{"iperf"}, - Args: args, - Ports: []v1.ContainerPort{ - { - ContainerPort: iperf2Port, - Protocol: v1.ProtocolTCP, - }, - }, - }, - }, - }, - }, + deploymentSpec := e2edeployment.NewDeployment( + "iperf2-server-deployment", replicas, labels, "iperf2-server", + imageutils.GetE2EImage(imageutils.Agnhost), appsv1.RollingUpdateDeploymentStrategyType) + deploymentSpec.Spec.Template.Spec.TerminationGracePeriodSeconds = &one + deploymentSpec.Spec.Template.Spec.Containers[0].Command = []string{"iperf"} + deploymentSpec.Spec.Template.Spec.Containers[0].Args = args + deploymentSpec.Spec.Template.Spec.Containers[0].Ports = []v1.ContainerPort{ + { + ContainerPort: iperf2Port, + Protocol: v1.ProtocolTCP, }, } diff --git a/test/e2e/network/scale/ingress.go b/test/e2e/network/scale/ingress.go index 3b814a4ffeb..6f75650297c 100644 --- a/test/e2e/network/scale/ingress.go +++ b/test/e2e/network/scale/ingress.go @@ -32,6 +32,7 @@ import ( imageutils "k8s.io/kubernetes/test/utils/image" "k8s.io/kubernetes/test/e2e/framework" + e2edeployment "k8s.io/kubernetes/test/e2e/framework/deployment" e2eingress "k8s.io/kubernetes/test/e2e/framework/ingress" "k8s.io/kubernetes/test/e2e/framework/providers/gce" ) @@ -445,39 +446,21 @@ func generateScaleTestServiceSpec(suffix string) *v1.Service { } func generateScaleTestBackendDeploymentSpec(numReplicas int32) *appsv1.Deployment { - return &appsv1.Deployment{ - ObjectMeta: metav1.ObjectMeta{ - Name: scaleTestBackendName, - }, - Spec: appsv1.DeploymentSpec{ - Replicas: &numReplicas, - Selector: &metav1.LabelSelector{MatchLabels: scaleTestLabels}, - Template: v1.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{ - Labels: scaleTestLabels, - }, - Spec: v1.PodSpec{ - Containers: []v1.Container{ - { - Name: scaleTestBackendName, - Image: imageutils.GetE2EImage(imageutils.EchoServer), - Ports: []v1.ContainerPort{{ContainerPort: 8080}}, - ReadinessProbe: &v1.Probe{ - ProbeHandler: v1.ProbeHandler{ - HTTPGet: &v1.HTTPGetAction{ - Port: intstr.FromInt(8080), - Path: "/healthz", - }, - }, - FailureThreshold: 10, - PeriodSeconds: 1, - SuccessThreshold: 1, - TimeoutSeconds: 1, - }, - }, - }, - }, + d := e2edeployment.NewDeployment( + scaleTestBackendName, numReplicas, scaleTestLabels, scaleTestBackendName, + imageutils.GetE2EImage(imageutils.EchoServer), appsv1.RollingUpdateDeploymentStrategyType) + d.Spec.Template.Spec.Containers[0].Ports = []v1.ContainerPort{{ContainerPort: 8080}} + d.Spec.Template.Spec.Containers[0].ReadinessProbe = &v1.Probe{ + ProbeHandler: v1.ProbeHandler{ + HTTPGet: &v1.HTTPGetAction{ + Port: intstr.FromInt(8080), + Path: "/healthz", }, }, + FailureThreshold: 10, + PeriodSeconds: 1, + SuccessThreshold: 1, + TimeoutSeconds: 1, } + return d }