diff --git a/examples/sample-app/application-template-stibuild.json b/examples/sample-app/application-template-stibuild.json index 88b209bef26a..9dd2b9ff85f1 100644 --- a/examples/sample-app/application-template-stibuild.json +++ b/examples/sample-app/application-template-stibuild.json @@ -164,75 +164,24 @@ } }, { - "kind": "DeploymentConfig", - "apiVersion": "apps.openshift.io/v1", + "kind": "Deployment", + "apiVersion": "apps/v1", "metadata": { "name": "frontend", "annotations": { - "template.alpha.openshift.io/wait-for-ready": "true" + "template.alpha.openshift.io/wait-for-ready": "true", + "image.openshift.io/triggers": "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"origin-ruby-sample:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" } }, "spec": { "strategy": { - "type": "Rolling", - "rollingParams": { - "updatePeriodSeconds": 1, - "intervalSeconds": 1, - "timeoutSeconds": 120, - "pre": { - "failurePolicy": "Abort", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR1", - "value": "custom_value1" - } - ], - "containerName": "ruby-helloworld" - } - }, - "post": { - "failurePolicy": "Ignore", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR2", - "value": "custom_value2" - } - ], - "containerName": "ruby-helloworld" - } - } - }, - "resources": {} + "type": "RollingUpdate" }, - "triggers": [ - { - "type": "ImageChange", - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "ruby-helloworld" - ], - "from": { - "kind": "ImageStreamTag", - "name": "origin-ruby-sample:latest" - } - } - }, - { - "type": "ConfigChange" - } - ], "replicas": 2, "selector": { - "name": "frontend" + "matchLabels": { + "name": "frontend" + } }, "template": { "metadata": { @@ -317,8 +266,8 @@ } }, { - "kind": "DeploymentConfig", - "apiVersion": "apps.openshift.io/v1", + "kind": "Deployment", + "apiVersion": "apps/v1", "metadata": { "name": "database", "annotations": { @@ -327,67 +276,13 @@ }, "spec": { "strategy": { - "type": "Recreate", - "recreateParams": { - "pre": { - "failurePolicy": "Abort", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR1", - "value": "custom_value1" - } - ], - "containerName": "ruby-helloworld-database", - "volumes": ["ruby-helloworld-data"] - } - }, - "mid": { - "failurePolicy": "Abort", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR2", - "value": "custom_value2" - } - ], - "containerName": "ruby-helloworld-database", - "volumes": ["ruby-helloworld-data"] - } - }, - "post": { - "failurePolicy": "Ignore", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR2", - "value": "custom_value2" - } - ], - "containerName": "ruby-helloworld-database", - "volumes": ["ruby-helloworld-data"] - } - } - }, - "resources": {} + "type": "Recreate" }, - "triggers": [ - { - "type": "ConfigChange" - } - ], "replicas": 1, "selector": { - "name": "database" + "matchLabels": { + "name": "database" + } }, "template": { "metadata": { diff --git a/test/extended/builds/volumes.go b/test/extended/builds/volumes.go index 9de1d5672ca7..435a044ac34d 100644 --- a/test/extended/builds/volumes.go +++ b/test/extended/builds/volumes.go @@ -2,29 +2,27 @@ package builds import ( "path/filepath" - "time" g "github.com/onsi/ginkgo/v2" o "github.com/onsi/gomega" admissionapi "k8s.io/pod-security-admission/api" - deploymentutil "github.com/openshift/origin/test/extended/deployments" exutil "github.com/openshift/origin/test/extended/util" ) var _ = g.Describe("[sig-builds][Feature:Builds][volumes] build volumes", func() { var ( - oc = exutil.NewCLIWithPodSecurityLevel("build-volumes", admissionapi.LevelBaseline) - baseDir = exutil.FixturePath("testdata", "builds", "volumes") - secret = filepath.Join(baseDir, "secret.yaml") - configmap = filepath.Join(baseDir, "configmap.yaml") - s2iImageStream = filepath.Join(baseDir, "s2i-imagestream.yaml") - s2iBuildConfig = filepath.Join(baseDir, "s2i-buildconfig.yaml") - s2iDeploymentConfig = filepath.Join(baseDir, "s2i-deploymentconfig.yaml") - dockerImageStream = filepath.Join(baseDir, "docker-imagestream.yaml") - dockerBuildConfig = filepath.Join(baseDir, "docker-buildconfig.yaml") - dockerDeploymentConfig = filepath.Join(baseDir, "docker-deploymentconfig.yaml") + oc = exutil.NewCLIWithPodSecurityLevel("build-volumes", admissionapi.LevelBaseline) + baseDir = exutil.FixturePath("testdata", "builds", "volumes") + secret = filepath.Join(baseDir, "secret.yaml") + configmap = filepath.Join(baseDir, "configmap.yaml") + s2iImageStream = filepath.Join(baseDir, "s2i-imagestream.yaml") + s2iBuildConfig = filepath.Join(baseDir, "s2i-buildconfig.yaml") + s2iDeployment = filepath.Join(baseDir, "s2i-deployment.yaml") + dockerImageStream = filepath.Join(baseDir, "docker-imagestream.yaml") + dockerBuildConfig = filepath.Join(baseDir, "docker-buildconfig.yaml") + dockerDeployment = filepath.Join(baseDir, "docker-deployment.yaml") ) g.Context("", func() { @@ -51,7 +49,7 @@ var _ = g.Describe("[sig-builds][Feature:Builds][volumes] build volumes", func() } }) - g.It("should mount given secrets and configmaps into the build pod for source strategy builds [apigroup:image.openshift.io][apigroup:build.openshift.io][apigroup:apps.openshift.io]", func() { + g.It("should mount given secrets and configmaps into the build pod for source strategy builds [apigroup:image.openshift.io][apigroup:build.openshift.io]", func() { g.By("creating an imagestream") err := oc.Run("create").Args("-f", s2iImageStream).Execute() o.Expect(err).NotTo(o.HaveOccurred()) @@ -70,26 +68,29 @@ var _ = g.Describe("[sig-builds][Feature:Builds][volumes] build volumes", func() o.Expect(buildPodLogs).To(o.ContainSubstring("my-secret-value")) o.Expect(buildPodLogs).To(o.ContainSubstring("my-configmap-value")) - g.By("creating a deployment config") - err = oc.Run("create").Args("-f", s2iDeploymentConfig).Execute() + g.By("creating a deployment") + err = oc.Run("create").Args("-f", s2iDeployment).Execute() + o.Expect(err).NotTo(o.HaveOccurred()) + + projectName, err := oc.Run("project").Args("-q").Output() o.Expect(err).NotTo(o.HaveOccurred()) g.By("waiting for the deployment to complete") - _, err = deploymentutil.WaitForDeployerToComplete(oc, "mys2itest-1", 5*time.Minute) + err = exutil.WaitForDeploymentReady(oc, "mys2itest", projectName, -1) o.Expect(err).NotTo(o.HaveOccurred()) g.By("ensuring that the secret does not exist in the build image") - out, err := oc.Run("rsh").Args("dc/mys2itest", "cat", "/var/run/secrets/some-secret/key").Output() + out, err := oc.Run("rsh").Args("deployment/mys2itest", "cat", "/var/run/secrets/some-secret/key").Output() o.Expect(err).To(o.HaveOccurred()) o.Expect(out).To(o.ContainSubstring("cat: /var/run/secrets/some-secret/key: No such file or directory")) g.By("ensuring that the configmap does not exist in the build image") - out, err = oc.Run("rsh").Args("dc/mys2itest", "cat", "/var/run/configmaps/some-configmap/key").Output() + out, err = oc.Run("rsh").Args("deployment/mys2itest", "cat", "/var/run/configmaps/some-configmap/key").Output() o.Expect(err).To(o.HaveOccurred()) o.Expect(out).To(o.ContainSubstring("cat: /var/run/configmaps/some-configmap/key: No such file or directory")) }) - g.It("should mount given secrets and configmaps into the build pod for docker strategy builds [apigroup:image.openshift.io][apigroup:build.openshift.io][apigroup:apps.openshift.io]", func() { + g.It("should mount given secrets and configmaps into the build pod for docker strategy builds [apigroup:image.openshift.io][apigroup:build.openshift.io]", func() { g.By("creating an imagestream") err := oc.Run("create").Args("-f", dockerImageStream).Execute() o.Expect(err).NotTo(o.HaveOccurred()) @@ -108,21 +109,24 @@ var _ = g.Describe("[sig-builds][Feature:Builds][volumes] build volumes", func() o.Expect(buildPodLogs).To(o.ContainSubstring("my-secret-value")) o.Expect(buildPodLogs).To(o.ContainSubstring("my-configmap-value")) - g.By("creating a deployment config") - err = oc.Run("create").Args("-f", dockerDeploymentConfig).Execute() + g.By("creating a deployment") + err = oc.Run("create").Args("-f", dockerDeployment).Execute() + o.Expect(err).NotTo(o.HaveOccurred()) + + projectName, err := oc.Run("project").Args("-q").Output() o.Expect(err).NotTo(o.HaveOccurred()) g.By("waiting for the deployment to complete") - _, err = deploymentutil.WaitForDeployerToComplete(oc, "mydockertest-1", 5*time.Minute) + err = exutil.WaitForDeploymentReady(oc, "mydockertest", projectName, -1) o.Expect(err).NotTo(o.HaveOccurred()) g.By("ensuring that the secret does not exist in the build image") - out, err := oc.Run("rsh").Args("dc/mydockertest", "cat", "/var/run/secrets/some-secret/key").Output() + out, err := oc.Run("rsh").Args("deployment/mydockertest", "cat", "/var/run/secrets/some-secret/key").Output() o.Expect(err).To(o.HaveOccurred()) o.Expect(out).To(o.ContainSubstring("cat: /var/run/secrets/some-secret/key: No such file or directory")) g.By("ensuring that the configmap does not exist in the build image") - out, err = oc.Run("rsh").Args("dc/mydockertest", "cat", "/var/run/configmaps/some-configmap/key").Output() + out, err = oc.Run("rsh").Args("deployment/mydockertest", "cat", "/var/run/configmaps/some-configmap/key").Output() o.Expect(err).To(o.HaveOccurred()) o.Expect(out).To(o.ContainSubstring("cat: /var/run/configmaps/some-configmap/key: No such file or directory")) }) diff --git a/test/extended/cli/admin.go b/test/extended/cli/admin.go index 0b6e19807caf..60237a1492fa 100644 --- a/test/extended/cli/admin.go +++ b/test/extended/cli/admin.go @@ -443,7 +443,7 @@ var _ = g.Describe("[sig-cli] oc adm", func() { o.Expect(out).To(o.ContainSubstring("createuser2")) }) - g.It("build-chain [apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:project.openshift.io][apigroup:apps.openshift.io]", func() { + g.It("build-chain [apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:project.openshift.io]", func() { // Test building a dependency tree s2iBuildPath := exutil.FixturePath("..", "..", "examples", "sample-app", "application-template-stibuild.json") out, _, err := ocns.Run("process").Args("-f", s2iBuildPath, "-l", "build=sti").Outputs() diff --git a/test/extended/cli/builds.go b/test/extended/cli/builds.go index 6d57ed92a8e7..78d6d34e3498 100644 --- a/test/extended/cli/builds.go +++ b/test/extended/cli/builds.go @@ -226,7 +226,7 @@ var _ = g.Describe("[sig-cli] oc builds", func() { o.Expect(err).NotTo(o.HaveOccurred()) }) - g.It("webhooks CRUD [apigroup:build.openshift.io][apigroup:apps.openshift.io]", func() { + g.It("webhooks CRUD [apigroup:build.openshift.io]", func() { g.By("check bc webhooks") out, err := oc.Run("describe").Args("buildConfigs", "ruby-sample-build").Output() o.Expect(err).NotTo(o.HaveOccurred()) @@ -284,7 +284,7 @@ var _ = g.Describe("[sig-cli] oc builds", func() { )) }) - g.It("start-build [apigroup:build.openshift.io][apigroup:apps.openshift.io]", func() { + g.It("start-build [apigroup:build.openshift.io]", func() { g.By("valid build") out, err := oc.Run("start-build").Args("--from-webhook", getTriggerURL("secret101", "generic")).Output() o.Expect(err).NotTo(o.HaveOccurred()) diff --git a/test/extended/cli/debug.go b/test/extended/cli/debug.go index 932a85d5441f..4175d954c8b6 100644 --- a/test/extended/cli/debug.go +++ b/test/extended/cli/debug.go @@ -1,13 +1,16 @@ package cli import ( + "context" "fmt" "time" g "github.com/onsi/ginkgo/v2" o "github.com/onsi/gomega" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/klog/v2" admissionapi "k8s.io/pod-security-admission/api" configv1 "github.com/openshift/api/config/v1" @@ -30,8 +33,11 @@ var _ = g.Describe("[sig-cli] oc debug", func() { helloPod := exutil.FixturePath("..", "..", "examples", "hello-openshift", "hello-pod.json") imageStreamsCentos := exutil.FixturePath("..", "..", "examples", "image-streams", "image-streams-centos7.json") - g.It("deployment configs from a build [apigroup:image.openshift.io][apigroup:apps.openshift.io]", func() { - err := oc.Run("create").Args("-f", testCLIDebug).Execute() + g.It("deployment from a build [apigroup:image.openshift.io]", func() { + projectName, err := oc.Run("project").Args("-q").Output() + o.Expect(err).NotTo(o.HaveOccurred()) + + err = oc.Run("create").Args("-f", testCLIDebug).Execute() o.Expect(err).NotTo(o.HaveOccurred()) // wait for image stream to be present which means the build has completed err = wait.Poll(cliInterval, buildTimeout, func() (bool, error) { @@ -39,31 +45,45 @@ var _ = g.Describe("[sig-cli] oc debug", func() { return err == nil, nil }) o.Expect(err).NotTo(o.HaveOccurred()) - // and for replication controller which means we can kick of debug session + + // and for replicaset which means we can kick of debug session + var rsName string err = wait.Poll(cliInterval, deployTimeout, func() (bool, error) { - err := oc.Run("get").Args("replicationcontrollers", "local-busybox1-1").Execute() + rsList, err := oc.AdminKubeClient().AppsV1().ReplicaSets(projectName).List(context.TODO(), metav1.ListOptions{LabelSelector: "deployment=local-busybox1"}) + o.Expect(err).NotTo(o.HaveOccurred()) + for _, item := range rsList.Items { + if item.Annotations["deployment.kubernetes.io/revision"] == "2" { + rsName = rsList.Items[0].Name + } + } + if rsName == "" { + klog.Infof("Waiting for a replicaset with deployment.kubernetes.io/revision=2") + return false, nil + } + rsName = rsList.Items[0].Name + err = oc.Run("get").Args("replicasets", rsName).Execute() return err == nil, nil }) o.Expect(err).NotTo(o.HaveOccurred()) g.By("should print the imagestream-based container entrypoint/command") var out string - out, err = oc.Run("debug").Args("dc/local-busybox1").Output() + out, err = oc.Run("debug").Args("deployment/local-busybox1").Output() o.Expect(err).NotTo(o.HaveOccurred()) - o.Expect(out).To(o.MatchRegexp("Starting pod/local-busybox1-debug.*, command was: /usr/bin/bash\n")) + o.Expect(out).To(o.MatchRegexp("Starting pod/local-busybox1-debug.* ...\n")) g.By("should print the overridden imagestream-based container entrypoint/command") - out, err = oc.Run("debug").Args("dc/local-busybox2").Output() + out, err = oc.Run("debug").Args("deployment/local-busybox2").Output() o.Expect(err).NotTo(o.HaveOccurred()) o.Expect(out).To(o.MatchRegexp("Starting pod/local-busybox2-debug.*, command was: foo bar baz qux\n")) g.By("should print the container image-based container entrypoint/command") - out, err = oc.Run("debug").Args("dc/busybox1").Output() + out, err = oc.Run("debug").Args("deployment/busybox1").Output() o.Expect(err).NotTo(o.HaveOccurred()) o.Expect(out).To(o.MatchRegexp("Starting pod/busybox1-debug.* ...\n")) g.By("should print the overridden container image-based container entrypoint/command") - out, err = oc.Run("debug").Args("dc/busybox2").Output() + out, err = oc.Run("debug").Args("deployment/busybox2").Output() o.Expect(err).NotTo(o.HaveOccurred()) o.Expect(out).To(o.MatchRegexp("Starting pod/busybox2-debug.*, command was: foo bar baz qux\n")) }) @@ -196,8 +216,10 @@ var _ = g.Describe("[sig-cli] oc debug", func() { out, err = oc.Run("debug").Args("--request-timeout=10s", "-c", "ruby-helloworld", "--one-container", "dc/test-deployment-config", "-o", "jsonpath='{.metadata.name}").Output() o.Expect(err).NotTo(o.HaveOccurred()) o.Expect(out).To(o.ContainSubstring("test-deployment-config")) + }) - err = oc.Run("create").Args("-f", "-").InputString(` + g.It("ensure debug does not depend on a container actually existing for the selected resource for deployment", func() { + err := oc.Run("create").Args("-f", "-").InputString(` apiVersion: apps/v1 kind: Deployment metadata: @@ -222,7 +244,7 @@ spec: `).Execute() o.Expect(err).NotTo(o.HaveOccurred()) - out, err = oc.Run("debug").Args("--request-timeout=10s", "-c", "ruby-helloworld", "--one-container", "deploy/test-deployment", "-o", "jsonpath='{.metadata.name}").Output() + out, err := oc.Run("debug").Args("--request-timeout=10s", "-c", "ruby-helloworld", "--one-container", "deploy/test-deployment", "-o", "jsonpath='{.metadata.name}").Output() o.Expect(err).NotTo(o.HaveOccurred()) o.Expect(out).To(o.ContainSubstring("test-deployment-debug")) }) diff --git a/test/extended/cli/status.go b/test/extended/cli/status.go index 25e7fe7cdc36..235601a0a452 100644 --- a/test/extended/cli/status.go +++ b/test/extended/cli/status.go @@ -19,12 +19,12 @@ var _ = g.Describe("[sig-cli] oc status", func() { var oc = exutil.NewCLI("oc-status") - g.It("returns expected help messages [apigroup:project.openshift.io][apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:apps.openshift.io][apigroup:route.openshift.io]", func() { + g.It("returns expected help messages [apigroup:project.openshift.io][apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:route.openshift.io]", func() { out, err := oc.Run("status").Args("-h").Output() o.Expect(err).NotTo(o.HaveOccurred()) o.Expect(out).To(o.ContainSubstring("oc describe buildconfig")) - out, err = oc.Run("status").Output() + out, err = oc.Run("status").Args("--suggest").Output() o.Expect(err).NotTo(o.HaveOccurred()) o.Expect(out).To(o.ContainSubstring("oc new-app")) }) diff --git a/test/extended/cli/template.go b/test/extended/cli/template.go index b20157849544..461c6ded2f7b 100644 --- a/test/extended/cli/template.go +++ b/test/extended/cli/template.go @@ -33,7 +33,7 @@ var _ = g.Describe("[sig-cli] templates", func() { multilinePath = filepath.Join(testDataPath, "templates", "multiline.txt") ) - g.It("process [apigroup:apps.openshift.io][apigroup:template.openshift.io][Skipped:Disconnected]", func() { + g.It("process [apigroup:template.openshift.io][Skipped:Disconnected]", func() { err := oc.Run("get").Args("templates").Execute() o.Expect(err).NotTo(o.HaveOccurred()) err = oc.Run("create").Args("-f", appTemplatePath).Execute() diff --git a/test/extended/image_ecosystem/s2i_perl.go b/test/extended/image_ecosystem/s2i_perl.go index d15959a81a13..42a70f549ef4 100644 --- a/test/extended/image_ecosystem/s2i_perl.go +++ b/test/extended/image_ecosystem/s2i_perl.go @@ -38,13 +38,12 @@ func archHasModPerl(oc *exutil.CLI) bool { var _ = g.Describe("[sig-devex][Feature:ImageEcosystem][perl][Slow] hot deploy for openshift perl image", func() { defer g.GinkgoRecover() var ( - appSource = exutil.FixturePath("testdata", "image_ecosystem", "perl-hotdeploy") - perlTemplate = exutil.FixturePath("testdata", "image_ecosystem", "perl-hotdeploy", "perl.json") - oc = exutil.NewCLI("s2i-perl") - modifyCommand = []string{"sed", "-ie", `s/initial value/modified value/`, "lib/My/Test.pm"} - dcName = "perl" - rcNameOne = fmt.Sprintf("%s-1", dcName) - dcLabelOne = exutil.ParseLabelsOrDie(fmt.Sprintf("deployment=%s", rcNameOne)) + appSource = exutil.FixturePath("testdata", "image_ecosystem", "perl-hotdeploy") + perlTemplate = exutil.FixturePath("testdata", "image_ecosystem", "perl-hotdeploy", "perl.json") + oc = exutil.NewCLI("s2i-perl") + modifyCommand = []string{"sed", "-ie", `s/initial value/modified value/`, "lib/My/Test.pm"} + deploymentName = "perl" + buildName = fmt.Sprintf("%s-1", deploymentName) ) g.Context("", func() { @@ -60,7 +59,7 @@ var _ = g.Describe("[sig-devex][Feature:ImageEcosystem][perl][Slow] hot deploy f }) g.Describe("hot deploy test", func() { - g.It("should work [apigroup:image.openshift.io][apigroup:operator.openshift.io][apigroup:config.openshift.io][apigroup:build.openshift.io][apigroup:apps.openshift.io]", func() { + g.It("should work [apigroup:image.openshift.io][apigroup:operator.openshift.io][apigroup:config.openshift.io][apigroup:build.openshift.io]", func() { // This image-ecosystem test fails on ARM because it depends on behaviour specific to mod_perl, // which is only included in the RHSCL (RHEL 7) perl images which are not available on ARM. if !archHasModPerl(oc) { @@ -81,34 +80,37 @@ var _ = g.Describe("[sig-devex][Feature:ImageEcosystem][perl][Slow] hot deploy f br.AssertSuccess() g.By("waiting for build to finish") - err = exutil.WaitForABuild(oc.BuildClient().BuildV1().Builds(oc.Namespace()), rcNameOne, nil, nil, nil) + err = exutil.WaitForABuild(oc.BuildClient().BuildV1().Builds(oc.Namespace()), buildName, nil, nil, nil) if err != nil { - exutil.DumpBuildLogs(dcName, oc) + exutil.DumpBuildLogs(deploymentName, oc) } o.Expect(err).NotTo(o.HaveOccurred()) - err = exutil.WaitForDeploymentConfig(oc.KubeClient(), oc.AppsClient().AppsV1(), oc.Namespace(), dcName, 1, true, oc) + err = exutil.WaitForDeploymentReady(oc, deploymentName, oc.Namespace(), 2) o.Expect(err).NotTo(o.HaveOccurred()) g.By("waiting for endpoint") - err = exutil.WaitForEndpoint(oc.KubeFramework().ClientSet, oc.Namespace(), dcName) + err = exutil.WaitForEndpoint(oc.KubeFramework().ClientSet, oc.Namespace(), deploymentName) o.Expect(err).NotTo(o.HaveOccurred()) checkPage := func(expected string, dcLabel labels.Selector) { _, err := exutil.WaitForPods(oc.KubeClient().CoreV1().Pods(oc.Namespace()), dcLabel, exutil.CheckPodIsRunning, 1, 4*time.Minute) o.ExpectWithOffset(1, err).NotTo(o.HaveOccurred()) - result, err := CheckPageContains(oc, dcName, "", expected) + result, err := CheckPageContains(oc, deploymentName, "", expected) o.ExpectWithOffset(1, err).NotTo(o.HaveOccurred()) o.ExpectWithOffset(1, result).To(o.BeTrue()) } - checkPage("initial value", dcLabelOne) + hash, err := exutil.GetDeploymentRSPodTemplateHash(oc, deploymentName, oc.Namespace(), 2) + o.Expect(err).NotTo(o.HaveOccurred()) + ReplicaSetRev2Label := exutil.ParseLabelsOrDie(fmt.Sprintf("pod-template-hash=%s", hash)) + checkPage("initial value", ReplicaSetRev2Label) g.By("modifying the source code") - err = RunInPodContainer(oc, dcLabelOne, modifyCommand) + err = RunInPodContainer(oc, ReplicaSetRev2Label, modifyCommand) o.Expect(err).NotTo(o.HaveOccurred()) - checkPage("modified value", dcLabelOne) + checkPage("modified value", ReplicaSetRev2Label) }) }) }) diff --git a/test/extended/image_ecosystem/s2i_ruby.go b/test/extended/image_ecosystem/s2i_ruby.go index 85435de2f965..019b405c74bb 100644 --- a/test/extended/image_ecosystem/s2i_ruby.go +++ b/test/extended/image_ecosystem/s2i_ruby.go @@ -49,7 +49,7 @@ var _ = g.Describe("[sig-devex][Feature:ImageEcosystem][ruby][Slow] hot deploy f o.Expect(err).NotTo(o.HaveOccurred()) - err = exutil.WaitForDeploymentReadyWithTimeout(oc, deploymentName, oc.Namespace(), 15*time.Minute) + err = exutil.WaitForDeploymentReadyWithTimeout(oc, deploymentName, oc.Namespace(), -1, 15*time.Minute) o.Expect(err).NotTo(o.HaveOccurred()) g.By("waiting for endpoint") @@ -78,7 +78,7 @@ var _ = g.Describe("[sig-devex][Feature:ImageEcosystem][ruby][Slow] hot deploy f g.By("turning on hot-deploy") err = oc.Run("set", "env").Args("deployment", deploymentName, "RAILS_ENV=development").Execute() o.Expect(err).NotTo(o.HaveOccurred()) - err = exutil.WaitForDeploymentReady(oc, deploymentName, oc.Namespace()) + err = exutil.WaitForDeploymentReady(oc, deploymentName, oc.Namespace(), -1) o.Expect(err).NotTo(o.HaveOccurred()) g.By("waiting for a new endpoint") diff --git a/test/extended/image_ecosystem/sample_repos.go b/test/extended/image_ecosystem/sample_repos.go index 210f2292bb74..96481927b587 100644 --- a/test/extended/image_ecosystem/sample_repos.go +++ b/test/extended/image_ecosystem/sample_repos.go @@ -81,7 +81,7 @@ func NewSampleRepoTest(c sampleRepoConfig) func() { if c.deploymentConfigName != "" { err = exutil.WaitForDeploymentConfig(oc.KubeClient(), oc.AppsClient().AppsV1(), oc.Namespace(), c.deploymentConfigName, 1, true, oc) } else if c.deploymentName != "" { - err = exutil.WaitForDeploymentReadyWithTimeout(oc, c.deploymentName, oc.Namespace(), 15*time.Minute) + err = exutil.WaitForDeploymentReadyWithTimeout(oc, c.deploymentName, oc.Namespace(), -1, 15*time.Minute) } else { g.Fail("invalid test configuration: neither deploymentConfigName nor deploymentName is set") } @@ -92,7 +92,7 @@ func NewSampleRepoTest(c sampleRepoConfig) func() { if c.dbDeploymentConfigName != "" { err = exutil.WaitForDeploymentConfig(oc.KubeClient(), oc.AppsClient().AppsV1(), oc.Namespace(), c.dbDeploymentConfigName, 1, true, oc) } else if c.dbDeploymentName != "" { - err = exutil.WaitForDeploymentReadyWithTimeout(oc, c.dbDeploymentName, oc.Namespace(), 15*time.Minute) + err = exutil.WaitForDeploymentReadyWithTimeout(oc, c.dbDeploymentName, oc.Namespace(), -1, 15*time.Minute) } else { g.Fail("invalid test configuration: neither dbDeploymentConfigName nor dbDeploymentName is set") } diff --git a/test/extended/oauth/requestheaders.go b/test/extended/oauth/requestheaders.go index 1c2cf3e0e1ec..9147b51c311e 100644 --- a/test/extended/oauth/requestheaders.go +++ b/test/extended/oauth/requestheaders.go @@ -61,7 +61,7 @@ type certAuthTest struct { var _ = g.Describe("[Serial] [sig-auth][Feature:OAuthServer] [RequestHeaders] [IdP]", func() { var oc = exutil.NewCLI("request-headers") - g.It("test RequestHeaders IdP [apigroup:config.openshift.io][apigroup:user.openshift.io][apigroup:apps.openshift.io]", func() { + g.It("test RequestHeaders IdP [apigroup:config.openshift.io][apigroup:user.openshift.io]", func() { // In some rare cases, CAO might be damaged when entering this test. If it is - the results // of this test might flaky. This check ensures that we capture such situation early and diff --git a/test/extended/scheduling/pods.go b/test/extended/scheduling/pods.go index f497dbc7100a..24e9fbe37e99 100644 --- a/test/extended/scheduling/pods.go +++ b/test/extended/scheduling/pods.go @@ -136,7 +136,7 @@ var _ = g.Describe("[sig-scheduling][Early]", func() { }) }) - g.Describe("The openshift-apiserver pods [apigroup:apps.openshift.io][apigroup:authorization.openshift.io][apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:project.openshift.io][apigroup:quota.openshift.io][apigroup:route.openshift.io][apigroup:security.openshift.io][apigroup:template.openshift.io]", func() { + g.Describe("The openshift-apiserver pods [apigroup:authorization.openshift.io][apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:project.openshift.io][apigroup:quota.openshift.io][apigroup:route.openshift.io][apigroup:security.openshift.io][apigroup:template.openshift.io]", func() { g.It("should be scheduled on different nodes", func() { requirePodsOnDifferentNodesTest{namespace: "openshift-apiserver", deployment: "apiserver"}.run(oc) }) diff --git a/test/extended/storage/csi_snapshot_controller_operator.go b/test/extended/storage/csi_snapshot_controller_operator.go index 1f8cbf2633a6..7525e8eaf547 100644 --- a/test/extended/storage/csi_snapshot_controller_operator.go +++ b/test/extended/storage/csi_snapshot_controller_operator.go @@ -50,7 +50,7 @@ var _ = g.Describe("[sig-storage][Feature:Cluster-CSI-Snapshot-Controller-Operat g.By("# Modify the csi-snapshot-webhook-secret expiry annotation") defer func() { - if exutil.WaitForDeploymentReady(oc, snapshotWebhookDeployName, clusterCSISnapshotOperatorNs) != nil { + if exutil.WaitForDeploymentReady(oc, snapshotWebhookDeployName, clusterCSISnapshotOperatorNs, -1) != nil { e2e.Failf("The csiSnapshotWebhook was not recovered ready") } }() @@ -71,7 +71,7 @@ var _ = g.Describe("[sig-storage][Feature:Cluster-CSI-Snapshot-Controller-Operat g.By("# Delete the csi-snapshot-webhook-secret") defer func() { - if exutil.WaitForDeploymentReady(oc, snapshotWebhookDeployName, clusterCSISnapshotOperatorNs) != nil { + if exutil.WaitForDeploymentReady(oc, snapshotWebhookDeployName, clusterCSISnapshotOperatorNs, -1) != nil { e2e.Failf("The csiSnapshotWebhook was not recovered ready") } }() diff --git a/test/extended/templates/templateinstance_readiness.go b/test/extended/templates/templateinstance_readiness.go index 96374f16bcca..db4c5c86133f 100644 --- a/test/extended/templates/templateinstance_readiness.go +++ b/test/extended/templates/templateinstance_readiness.go @@ -9,17 +9,17 @@ import ( g "github.com/onsi/ginkgo/v2" o "github.com/onsi/gomega" + appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" admissionapi "k8s.io/pod-security-admission/api" - appsv1 "github.com/openshift/api/apps/v1" buildv1 "github.com/openshift/api/build/v1" templatev1 "github.com/openshift/api/template/v1" - "github.com/openshift/library-go/pkg/apps/appsutil" exutil "github.com/openshift/origin/test/extended/util" ) @@ -38,7 +38,7 @@ var _ = g.Describe("[sig-devex][Feature:Templates] templateinstance readiness te waitSettle := func() (bool, error) { var err error - // must read the templateinstance before the build/dc + // must read the templateinstance before the build/deployment templateinstance, err = cli.TemplateClient().TemplateV1().TemplateInstances(cli.Namespace()).Get(context.Background(), templateinstance.Name, metav1.GetOptions{}) if err != nil { return false, err @@ -52,7 +52,7 @@ var _ = g.Describe("[sig-devex][Feature:Templates] templateinstance readiness te return false, err } - dc, err := cli.AppsClient().AppsV1().DeploymentConfigs(cli.Namespace()).Get(context.Background(), "simple-example", metav1.GetOptions{}) + deploymentObj, err := cli.AdminKubeClient().AppsV1().Deployments(cli.Namespace()).Get(context.Background(), "simple-example", metav1.GetOptions{}) if err != nil { if kerrors.IsNotFound(err) { err = nil @@ -67,19 +67,19 @@ var _ = g.Describe("[sig-devex][Feature:Templates] templateinstance readiness te case buildv1.BuildPhaseComplete: var progressing, available *appsv1.DeploymentCondition - for i, condition := range dc.Status.Conditions { + for i, condition := range deploymentObj.Status.Conditions { switch condition.Type { case appsv1.DeploymentProgressing: - progressing = &dc.Status.Conditions[i] + progressing = &deploymentObj.Status.Conditions[i] case appsv1.DeploymentAvailable: - available = &dc.Status.Conditions[i] + available = &deploymentObj.Status.Conditions[i] } } if (progressing != nil && progressing.Status == corev1.ConditionTrue && - progressing.Reason == appsutil.NewRcAvailableReason && + progressing.Reason == deploymentutil.NewRSAvailableReason && available != nil && available.Status == corev1.ConditionTrue) || (progressing != nil && @@ -122,7 +122,7 @@ var _ = g.Describe("[sig-devex][Feature:Templates] templateinstance readiness te } }) - g.It("should report ready soon after all annotated objects are ready [apigroup:template.openshift.io][apigroup:build.openshift.io][apigroup:apps.openshift.io]", func() { + g.It("should report ready soon after all annotated objects are ready [apigroup:template.openshift.io][apigroup:build.openshift.io]", func() { var err error templateinstance = &templatev1.TemplateInstance{ @@ -171,7 +171,7 @@ var _ = g.Describe("[sig-devex][Feature:Templates] templateinstance readiness te o.Expect(err).NotTo(o.HaveOccurred()) }) - g.It("should report failed soon after an annotated objects has failed [apigroup:template.openshift.io][apigroup:build.openshift.io][apigroup:apps.openshift.io]", func() { + g.It("should report failed soon after an annotated objects has failed [apigroup:template.openshift.io][apigroup:build.openshift.io]", func() { var err error secret, err := cli.KubeClient().CoreV1().Secrets(cli.Namespace()).Create(context.Background(), &v1.Secret{ diff --git a/test/extended/testdata/bindata.go b/test/extended/testdata/bindata.go index bade6f4a2efc..d77be73c5a18 100644 --- a/test/extended/testdata/bindata.go +++ b/test/extended/testdata/bindata.go @@ -156,10 +156,10 @@ // test/extended/testdata/builds/valuefrom/test-secret.yaml // test/extended/testdata/builds/volumes/configmap.yaml // test/extended/testdata/builds/volumes/docker-buildconfig.yaml -// test/extended/testdata/builds/volumes/docker-deploymentconfig.yaml +// test/extended/testdata/builds/volumes/docker-deployment.yaml // test/extended/testdata/builds/volumes/docker-imagestream.yaml // test/extended/testdata/builds/volumes/s2i-buildconfig.yaml -// test/extended/testdata/builds/volumes/s2i-deploymentconfig.yaml +// test/extended/testdata/builds/volumes/s2i-deployment.yaml // test/extended/testdata/builds/volumes/s2i-imagestream.yaml // test/extended/testdata/builds/volumes/secret.yaml // test/extended/testdata/builds/webhook/bitbucket/testdata/pushevent-not-master.json @@ -214,6 +214,7 @@ // test/extended/testdata/cmd/test/cmd/setbuildhook.sh // test/extended/testdata/cmd/test/cmd/setbuildsecret.sh // test/extended/testdata/cmd/test/cmd/testdata/application-template-custombuild.json +// test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild-dc.json // test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild.json // test/extended/testdata/cmd/test/cmd/testdata/application-template-mix.json // test/extended/testdata/cmd/test/cmd/testdata/application-template-stibuild.json @@ -6046,75 +6047,24 @@ var _examplesSampleAppApplicationTemplateStibuildJson = []byte(`{ } }, { - "kind": "DeploymentConfig", - "apiVersion": "apps.openshift.io/v1", + "kind": "Deployment", + "apiVersion": "apps/v1", "metadata": { "name": "frontend", "annotations": { - "template.alpha.openshift.io/wait-for-ready": "true" + "template.alpha.openshift.io/wait-for-ready": "true", + "image.openshift.io/triggers": "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"origin-ruby-sample:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" } }, "spec": { "strategy": { - "type": "Rolling", - "rollingParams": { - "updatePeriodSeconds": 1, - "intervalSeconds": 1, - "timeoutSeconds": 120, - "pre": { - "failurePolicy": "Abort", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR1", - "value": "custom_value1" - } - ], - "containerName": "ruby-helloworld" - } - }, - "post": { - "failurePolicy": "Ignore", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR2", - "value": "custom_value2" - } - ], - "containerName": "ruby-helloworld" - } - } - }, - "resources": {} + "type": "RollingUpdate" }, - "triggers": [ - { - "type": "ImageChange", - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "ruby-helloworld" - ], - "from": { - "kind": "ImageStreamTag", - "name": "origin-ruby-sample:latest" - } - } - }, - { - "type": "ConfigChange" - } - ], "replicas": 2, "selector": { - "name": "frontend" + "matchLabels": { + "name": "frontend" + } }, "template": { "metadata": { @@ -6199,8 +6149,8 @@ var _examplesSampleAppApplicationTemplateStibuildJson = []byte(`{ } }, { - "kind": "DeploymentConfig", - "apiVersion": "apps.openshift.io/v1", + "kind": "Deployment", + "apiVersion": "apps/v1", "metadata": { "name": "database", "annotations": { @@ -6209,67 +6159,13 @@ var _examplesSampleAppApplicationTemplateStibuildJson = []byte(`{ }, "spec": { "strategy": { - "type": "Recreate", - "recreateParams": { - "pre": { - "failurePolicy": "Abort", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR1", - "value": "custom_value1" - } - ], - "containerName": "ruby-helloworld-database", - "volumes": ["ruby-helloworld-data"] - } - }, - "mid": { - "failurePolicy": "Abort", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR2", - "value": "custom_value2" - } - ], - "containerName": "ruby-helloworld-database", - "volumes": ["ruby-helloworld-data"] - } - }, - "post": { - "failurePolicy": "Ignore", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR2", - "value": "custom_value2" - } - ], - "containerName": "ruby-helloworld-database", - "volumes": ["ruby-helloworld-data"] - } - } - }, - "resources": {} + "type": "Recreate" }, - "triggers": [ - { - "type": "ConfigChange" - } - ], "replicas": 1, "selector": { - "name": "database" + "matchLabels": { + "name": "database" + } }, "template": { "metadata": { @@ -22515,53 +22411,47 @@ func testExtendedTestdataBuildsVolumesDockerBuildconfigYaml() (*asset, error) { return a, nil } -var _testExtendedTestdataBuildsVolumesDockerDeploymentconfigYaml = []byte(`apiVersion: apps.openshift.io/v1 -kind: DeploymentConfig +var _testExtendedTestdataBuildsVolumesDockerDeploymentYaml = []byte(`apiVersion: apps/v1 +kind: Deployment metadata: name: mydockertest + annotations: + image.openshift.io/triggers: "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"mydockerstream:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" spec: replicas: 1 selector: - app: mydockertest - deploymentconfig: mydockertest + matchLabels: + app: mydockertest + deployment: mydockertest strategy: - type: Rolling + type: RollingUpdate template: metadata: labels: app: mydockertest - deploymentconfig: mydockertest + deployment: mydockertest spec: containers: - - image: + - image: " " imagePullPolicy: Always name: mydockertest terminationMessagePath: /dev/termination-log dnsPolicy: ClusterFirst restartPolicy: Always securityContext: {} - triggers: - - imageChangeParams: - automatic: true - containerNames: - - mydockertest - from: - kind: ImageStreamTag - name: mydockerstream:latest - type: ImageChange - - type: ConfigChange`) +`) -func testExtendedTestdataBuildsVolumesDockerDeploymentconfigYamlBytes() ([]byte, error) { - return _testExtendedTestdataBuildsVolumesDockerDeploymentconfigYaml, nil +func testExtendedTestdataBuildsVolumesDockerDeploymentYamlBytes() ([]byte, error) { + return _testExtendedTestdataBuildsVolumesDockerDeploymentYaml, nil } -func testExtendedTestdataBuildsVolumesDockerDeploymentconfigYaml() (*asset, error) { - bytes, err := testExtendedTestdataBuildsVolumesDockerDeploymentconfigYamlBytes() +func testExtendedTestdataBuildsVolumesDockerDeploymentYaml() (*asset, error) { + bytes, err := testExtendedTestdataBuildsVolumesDockerDeploymentYamlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "test/extended/testdata/builds/volumes/docker-deploymentconfig.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{name: "test/extended/testdata/builds/volumes/docker-deployment.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -22650,53 +22540,47 @@ func testExtendedTestdataBuildsVolumesS2iBuildconfigYaml() (*asset, error) { return a, nil } -var _testExtendedTestdataBuildsVolumesS2iDeploymentconfigYaml = []byte(`apiVersion: apps.openshift.io/v1 -kind: DeploymentConfig +var _testExtendedTestdataBuildsVolumesS2iDeploymentYaml = []byte(`apiVersion: apps/v1 +kind: Deployment metadata: name: mys2itest + annotations: + image.openshift.io/triggers: "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"mys2istream:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" spec: replicas: 1 selector: - app: mys2itest - deploymentconfig: mys2itest + matchLabels: + app: mys2itest + deployment: mys2itest strategy: - type: Rolling + type: RollingUpdate template: metadata: labels: app: mys2itest - deploymentconfig: mys2itest + deployment: mys2itest spec: containers: - - image: + - image: " " imagePullPolicy: Always name: mys2itest terminationMessagePath: /dev/termination-log dnsPolicy: ClusterFirst restartPolicy: Always securityContext: {} - triggers: - - imageChangeParams: - automatic: true - containerNames: - - mys2itest - from: - kind: ImageStreamTag - name: mys2istream:latest - type: ImageChange - - type: ConfigChange`) +`) -func testExtendedTestdataBuildsVolumesS2iDeploymentconfigYamlBytes() ([]byte, error) { - return _testExtendedTestdataBuildsVolumesS2iDeploymentconfigYaml, nil +func testExtendedTestdataBuildsVolumesS2iDeploymentYamlBytes() ([]byte, error) { + return _testExtendedTestdataBuildsVolumesS2iDeploymentYaml, nil } -func testExtendedTestdataBuildsVolumesS2iDeploymentconfigYaml() (*asset, error) { - bytes, err := testExtendedTestdataBuildsVolumesS2iDeploymentconfigYamlBytes() +func testExtendedTestdataBuildsVolumesS2iDeploymentYaml() (*asset, error) { + bytes, err := testExtendedTestdataBuildsVolumesS2iDeploymentYamlBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "test/extended/testdata/builds/volumes/s2i-deploymentconfig.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + info := bindataFileInfo{name: "test/extended/testdata/builds/volumes/s2i-deployment.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -32965,7 +32849,7 @@ os::cmd::expect_success 'oc delete all --all' sleep 1 os::cmd::expect_success 'oc delete all --all' -os::cmd::expect_success 'oc process -f ${TEST_DATA}/application-template-dockerbuild.json -l app=dockerbuild | oc create -f -' +os::cmd::expect_success 'oc process -f ${TEST_DATA}/application-template-dockerbuild-dc.json -l app=dockerbuild | oc create -f -' os::cmd::try_until_success 'oc get rc/database-1' os::test::junit::declare_suite_start "cmd/deployments/get" @@ -34929,7 +34813,7 @@ func testExtendedTestdataCmdTestCmdTestdataApplicationTemplateCustombuildJson() return a, nil } -var _testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildJson = []byte(`{ +var _testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildDcJson = []byte(`{ "kind": "Template", "apiVersion": "template.openshift.io/v1", "metadata": { @@ -35374,6 +35258,412 @@ var _testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildJson = } `) +func testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildDcJsonBytes() ([]byte, error) { + return _testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildDcJson, nil +} + +func testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildDcJson() (*asset, error) { + bytes, err := testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildDcJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild-dc.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildJson = []byte(`{ + "kind": "Template", + "apiVersion": "template.openshift.io/v1", + "metadata": { + "name": "ruby-helloworld-sample", + "annotations": { + "description": "This example shows how to create a simple ruby application in openshift origin v3", + "iconClass": "icon-ruby", + "tags": "instant-app,ruby,mysql" + } + }, + "objects": [ + { + "kind": "Secret", + "apiVersion": "v1", + "metadata": { + "name": "dbsecret" + }, + "stringData" : { + "mysql-user" : "${MYSQL_USER}", + "mysql-password" : "${MYSQL_PASSWORD}" + } + }, + { + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "frontend" + }, + "spec": { + "ports": [ + { + "name": "web", + "protocol": "TCP", + "port": 5432, + "targetPort": 8080, + "nodePort": 0 + } + ], + "selector": { + "name": "frontend" + }, + "type": "ClusterIP", + "sessionAffinity": "None" + }, + "status": { + "loadBalancer": {} + } + }, + { + "kind": "Route", + "apiVersion": "route.openshift.io/v1", + "metadata": { + "name": "route-edge", + "annotations": { + "template.openshift.io/expose-uri": "http://{.spec.host}{.spec.path}" + } + }, + "spec": { + "host": "www.example.com", + "to": { + "kind": "Service", + "name": "frontend" + }, + "tls": { + "termination": "edge" + } + }, + "status": {} + }, + { + "kind": "ImageStream", + "apiVersion": "image.openshift.io/v1", + "metadata": { + "name": "origin-ruby-sample" + }, + "spec": {}, + "status": { + "dockerImageRepository": "" + } + }, + { + "kind": "ImageStream", + "apiVersion": "image.openshift.io/v1", + "metadata": { + "name": "ruby-27-centos7" + }, + "spec": { + "tags": [ + { + "from": { + "kind": "DockerImage", + "name": "registry.redhat.io/ubi8/ruby-30:latest" + }, + "name": "latest" + } + ] + } + }, + { + "kind": "BuildConfig", + "apiVersion": "build.openshift.io/v1", + "metadata": { + "name": "ruby-sample-build", + "labels": { + "name": "ruby-sample-build" + }, + "annotations": { + "template.alpha.openshift.io/wait-for-ready": "true" + } + }, + "spec": { + "triggers": [ + { + "type": "GitHub", + "github": { + "secret": "secret101" + } + }, + { + "type": "Generic", + "generic": { + "secret": "secret101", + "allowEnv": true + } + }, + { + "type": "ImageChange", + "imageChange": {} + }, + { + "type": "ConfigChange" + } + ], + "source": { + "type": "Git", + "git": { + "uri": "https://github.com/openshift/ruby-hello-world.git" + } + }, + "strategy": { + "type": "Docker", + "dockerStrategy": { + "from": { + "kind": "ImageStreamTag", + "name": "ruby-27-centos7:latest" + }, + "env": [ + { + "name": "EXAMPLE", + "value": "sample-app" + } + ] + } + }, + "output": { + "to": { + "kind": "ImageStreamTag", + "name": "origin-ruby-sample:latest" + } + }, + "postCommit": { + "script": "bundle exec rake test" + }, + "resources": {} + }, + "status": { + "lastVersion": 0 + } + }, + { + "kind": "Deployment", + "apiVersion": "apps/v1", + "metadata": { + "name": "frontend", + "annotations": { + "template.alpha.openshift.io/wait-for-ready": "true", + "image.openshift.io/triggers": "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"origin-ruby-sample:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" + } + }, + "spec": { + "strategy": { + "type": "RollingUpdate" + }, + "replicas": 2, + "selector": { + "matchLabels": { + "name": "frontend" + } + }, + "template": { + "metadata": { + "labels": { + "name": "frontend" + } + }, + "spec": { + "containers": [ + { + "name": "ruby-helloworld", + "image": "origin-ruby-sample", + "ports": [ + { + "containerPort": 8080, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "MYSQL_USER", + "valueFrom": { + "secretKeyRef" : { + "name" : "dbsecret", + "key" : "mysql-user" + } + } + }, + { + "name": "MYSQL_PASSWORD", + "valueFrom": { + "secretKeyRef" : { + "name" : "dbsecret", + "key" : "mysql-password" + } + } + }, + { + "name": "MYSQL_DATABASE", + "value": "${MYSQL_DATABASE}" + } + ], + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent", + "securityContext": { + "capabilities": {}, + "privileged": false + } + } + ], + "restartPolicy": "Always", + "dnsPolicy": "ClusterFirst" + } + } + } + }, + { + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "database" + }, + "spec": { + "ports": [ + { + "name": "db", + "protocol": "TCP", + "port": 5434, + "targetPort": 3306, + "nodePort": 0 + } + ], + "selector": { + "name": "database" + }, + "type": "ClusterIP", + "sessionAffinity": "None" + }, + "status": { + "loadBalancer": {} + } + }, + { + "kind": "Deployment", + "apiVersion": "apps/v1", + "metadata": { + "name": "database", + "annotations": { + "template.alpha.openshift.io/wait-for-ready": "true" + } + }, + "spec": { + "strategy": { + "type": "Recreate", + "resources": {} + }, + "replicas": 1, + "selector": { + "matchLabels": { + "name": "database" + } + }, + "template": { + "metadata": { + "labels": { + "name": "database" + } + }, + "spec": { + "containers": [ + { + "name": "ruby-helloworld-database", + "image": "registry.redhat.io/rhel8/mysql-80:latest", + "ports": [ + { + "containerPort": 3306, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "MYSQL_USER", + "valueFrom": { + "secretKeyRef" : { + "name" : "dbsecret", + "key" : "mysql-user" + } + } + }, + { + "name": "MYSQL_PASSWORD", + "valueFrom": { + "secretKeyRef" : { + "name" : "dbsecret", + "key" : "mysql-password" + } + } + }, + { + "name": "MYSQL_DATABASE", + "value": "${MYSQL_DATABASE}" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "ruby-helloworld-data", + "mountPath": "/var/lib/mysql/data" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "Always", + "securityContext": { + "capabilities": {}, + "privileged": false + } + } + ], + "volumes": [ + { + "name": "ruby-helloworld-data", + "emptyDir": { + "medium": "" + } + } + ], + "restartPolicy": "Always", + "dnsPolicy": "ClusterFirst" + } + } + } + } + ], + "parameters": [ + { + "name": "MYSQL_USER", + "description": "database username", + "generate": "expression", + "from": "user[A-Z0-9]{3}", + "required": true + }, + { + "name": "MYSQL_PASSWORD", + "description": "database password", + "generate": "expression", + "from": "[a-zA-Z0-9]{8}", + "required": true + }, + { + "name": "MYSQL_DATABASE", + "description": "database name", + "value": "root", + "required": true + } + ], + "labels": { + "template": "application-template-dockerbuild" + } +} +`) + func testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildJsonBytes() ([]byte, error) { return _testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildJson, nil } @@ -45324,36 +45614,23 @@ var _testExtendedTestdataImage_ecosystemPerlHotdeployPerlJson = []byte(`{ } }, { - "kind": "DeploymentConfig", - "apiVersion": "apps.openshift.io/v1", + "kind": "Deployment", + "apiVersion": "apps/v1", "metadata": { - "name": "${NAME}" + "name": "${NAME}", + "annotations": { + "image.openshift.io/triggers": "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"${NAME}:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" + } }, "spec": { "strategy": { - "type": "Rolling" + "type": "RollingUpdate" }, - "triggers": [ - { - "type": "ImageChange", - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "perl" - ], - "from": { - "kind": "ImageStreamTag", - "name": "${NAME}:latest" - } - } - }, - { - "type": "ConfigChange" - } - ], "replicas": 1, "selector": { - "name": "${NAME}" + "matchLabels": { + "name": "${NAME}" + } }, "template": { "metadata": { @@ -52334,29 +52611,21 @@ objects: name: "${NAME}:latest" triggers: - type: ConfigChange -- kind: DeploymentConfig - apiVersion: apps.openshift.io/v1 +- kind: Deployment + apiVersion: apps/v1 metadata: name: "${NAME}" annotations: description: Defines how to deploy the application server template.alpha.openshift.io/wait-for-ready: 'true' + image.openshift.io/triggers: "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"${NAME}:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" spec: strategy: - type: Rolling - triggers: - - type: ImageChange - imageChangeParams: - automatic: true - containerNames: - - simple-example - from: - kind: ImageStreamTag - name: "${NAME}:latest" - - type: ConfigChange + type: RollingUpdate replicas: 1 selector: - name: "${NAME}" + matchLabels: + name: "${NAME}" template: metadata: name: "${NAME}" @@ -52665,91 +52934,83 @@ items: triggers: - type: ConfigChange -- kind: DeploymentConfig - apiVersion: apps.openshift.io/v1 +- kind: Deployment + apiVersion: apps/v1 metadata: name: local-busybox1 + annotations: + "image.openshift.io/triggers": "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"local-busybox:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" spec: replicas: 0 selector: - deploymentconfig: local-busybox1 + matchLabels: + deployment: local-busybox1 template: metadata: labels: - deploymentconfig: local-busybox1 + deployment: local-busybox1 spec: containers: - name: local-busybox - triggers: - - type: ImageChange - imageChangeParams: - automatic: true - containerNames: - - local-busybox - from: - kind: ImageStreamTag - name: local-busybox:latest + image: " " -- kind: DeploymentConfig - apiVersion: apps.openshift.io/v1 +- kind: Deployment + apiVersion: apps/v1 metadata: name: local-busybox2 + annotations: + "image.openshift.io/triggers": "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"local-busybox:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" spec: replicas: 0 selector: - deploymentconfig: local-busybox2 + matchLabels: + deployment: local-busybox2 template: metadata: labels: - deploymentconfig: local-busybox2 + deployment: local-busybox2 spec: containers: - name: local-busybox + image: " " command: - foo - bar args: - baz - qux - triggers: - - type: ImageChange - imageChangeParams: - automatic: true - containerNames: - - local-busybox - from: - kind: ImageStreamTag - name: local-busybox:latest -- kind: DeploymentConfig - apiVersion: apps.openshift.io/v1 +- kind: Deployment + apiVersion: apps/v1 metadata: name: busybox1 spec: replicas: 0 selector: - deploymentconfig: busybox1 + matchLabels: + deployment: busybox1 template: metadata: labels: - deploymentconfig: busybox1 + deployment: busybox1 spec: containers: - name: busybox image: image-registry.openshift-image-registry.svc:5000/openshift/tools:latest -- kind: DeploymentConfig - apiVersion: apps.openshift.io/v1 +- kind: Deployment + apiVersion: apps/v1 metadata: name: busybox2 spec: replicas: 0 selector: - deploymentconfig: busybox2 + matchLabels: + deployment: busybox2 template: metadata: labels: - deploymentconfig: busybox2 + deployment: busybox2 spec: containers: - name: busybox @@ -55050,10 +55311,10 @@ var _bindata = map[string]func() (*asset, error){ "test/extended/testdata/builds/valuefrom/test-secret.yaml": testExtendedTestdataBuildsValuefromTestSecretYaml, "test/extended/testdata/builds/volumes/configmap.yaml": testExtendedTestdataBuildsVolumesConfigmapYaml, "test/extended/testdata/builds/volumes/docker-buildconfig.yaml": testExtendedTestdataBuildsVolumesDockerBuildconfigYaml, - "test/extended/testdata/builds/volumes/docker-deploymentconfig.yaml": testExtendedTestdataBuildsVolumesDockerDeploymentconfigYaml, + "test/extended/testdata/builds/volumes/docker-deployment.yaml": testExtendedTestdataBuildsVolumesDockerDeploymentYaml, "test/extended/testdata/builds/volumes/docker-imagestream.yaml": testExtendedTestdataBuildsVolumesDockerImagestreamYaml, "test/extended/testdata/builds/volumes/s2i-buildconfig.yaml": testExtendedTestdataBuildsVolumesS2iBuildconfigYaml, - "test/extended/testdata/builds/volumes/s2i-deploymentconfig.yaml": testExtendedTestdataBuildsVolumesS2iDeploymentconfigYaml, + "test/extended/testdata/builds/volumes/s2i-deployment.yaml": testExtendedTestdataBuildsVolumesS2iDeploymentYaml, "test/extended/testdata/builds/volumes/s2i-imagestream.yaml": testExtendedTestdataBuildsVolumesS2iImagestreamYaml, "test/extended/testdata/builds/volumes/secret.yaml": testExtendedTestdataBuildsVolumesSecretYaml, "test/extended/testdata/builds/webhook/bitbucket/testdata/pushevent-not-master.json": testExtendedTestdataBuildsWebhookBitbucketTestdataPusheventNotMasterJson, @@ -55108,6 +55369,7 @@ var _bindata = map[string]func() (*asset, error){ "test/extended/testdata/cmd/test/cmd/setbuildhook.sh": testExtendedTestdataCmdTestCmdSetbuildhookSh, "test/extended/testdata/cmd/test/cmd/setbuildsecret.sh": testExtendedTestdataCmdTestCmdSetbuildsecretSh, "test/extended/testdata/cmd/test/cmd/testdata/application-template-custombuild.json": testExtendedTestdataCmdTestCmdTestdataApplicationTemplateCustombuildJson, + "test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild-dc.json": testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildDcJson, "test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild.json": testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildJson, "test/extended/testdata/cmd/test/cmd/testdata/application-template-mix.json": testExtendedTestdataCmdTestCmdTestdataApplicationTemplateMixJson, "test/extended/testdata/cmd/test/cmd/testdata/application-template-stibuild.json": testExtendedTestdataCmdTestCmdTestdataApplicationTemplateStibuildJson, @@ -55661,14 +55923,14 @@ var _bintree = &bintree{nil, map[string]*bintree{ "test-secret.yaml": {testExtendedTestdataBuildsValuefromTestSecretYaml, map[string]*bintree{}}, }}, "volumes": {nil, map[string]*bintree{ - "configmap.yaml": {testExtendedTestdataBuildsVolumesConfigmapYaml, map[string]*bintree{}}, - "docker-buildconfig.yaml": {testExtendedTestdataBuildsVolumesDockerBuildconfigYaml, map[string]*bintree{}}, - "docker-deploymentconfig.yaml": {testExtendedTestdataBuildsVolumesDockerDeploymentconfigYaml, map[string]*bintree{}}, - "docker-imagestream.yaml": {testExtendedTestdataBuildsVolumesDockerImagestreamYaml, map[string]*bintree{}}, - "s2i-buildconfig.yaml": {testExtendedTestdataBuildsVolumesS2iBuildconfigYaml, map[string]*bintree{}}, - "s2i-deploymentconfig.yaml": {testExtendedTestdataBuildsVolumesS2iDeploymentconfigYaml, map[string]*bintree{}}, - "s2i-imagestream.yaml": {testExtendedTestdataBuildsVolumesS2iImagestreamYaml, map[string]*bintree{}}, - "secret.yaml": {testExtendedTestdataBuildsVolumesSecretYaml, map[string]*bintree{}}, + "configmap.yaml": {testExtendedTestdataBuildsVolumesConfigmapYaml, map[string]*bintree{}}, + "docker-buildconfig.yaml": {testExtendedTestdataBuildsVolumesDockerBuildconfigYaml, map[string]*bintree{}}, + "docker-deployment.yaml": {testExtendedTestdataBuildsVolumesDockerDeploymentYaml, map[string]*bintree{}}, + "docker-imagestream.yaml": {testExtendedTestdataBuildsVolumesDockerImagestreamYaml, map[string]*bintree{}}, + "s2i-buildconfig.yaml": {testExtendedTestdataBuildsVolumesS2iBuildconfigYaml, map[string]*bintree{}}, + "s2i-deployment.yaml": {testExtendedTestdataBuildsVolumesS2iDeploymentYaml, map[string]*bintree{}}, + "s2i-imagestream.yaml": {testExtendedTestdataBuildsVolumesS2iImagestreamYaml, map[string]*bintree{}}, + "secret.yaml": {testExtendedTestdataBuildsVolumesSecretYaml, map[string]*bintree{}}, }}, "webhook": {nil, map[string]*bintree{ "bitbucket": {nil, map[string]*bintree{ @@ -55760,11 +56022,12 @@ var _bintree = &bintree{nil, map[string]*bintree{ "setbuildhook.sh": {testExtendedTestdataCmdTestCmdSetbuildhookSh, map[string]*bintree{}}, "setbuildsecret.sh": {testExtendedTestdataCmdTestCmdSetbuildsecretSh, map[string]*bintree{}}, "testdata": {nil, map[string]*bintree{ - "application-template-custombuild.json": {testExtendedTestdataCmdTestCmdTestdataApplicationTemplateCustombuildJson, map[string]*bintree{}}, - "application-template-dockerbuild.json": {testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildJson, map[string]*bintree{}}, - "application-template-mix.json": {testExtendedTestdataCmdTestCmdTestdataApplicationTemplateMixJson, map[string]*bintree{}}, - "application-template-stibuild.json": {testExtendedTestdataCmdTestCmdTestdataApplicationTemplateStibuildJson, map[string]*bintree{}}, - "external-service.yaml": {testExtendedTestdataCmdTestCmdTestdataExternalServiceYaml, map[string]*bintree{}}, + "application-template-custombuild.json": {testExtendedTestdataCmdTestCmdTestdataApplicationTemplateCustombuildJson, map[string]*bintree{}}, + "application-template-dockerbuild-dc.json": {testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildDcJson, map[string]*bintree{}}, + "application-template-dockerbuild.json": {testExtendedTestdataCmdTestCmdTestdataApplicationTemplateDockerbuildJson, map[string]*bintree{}}, + "application-template-mix.json": {testExtendedTestdataCmdTestCmdTestdataApplicationTemplateMixJson, map[string]*bintree{}}, + "application-template-stibuild.json": {testExtendedTestdataCmdTestCmdTestdataApplicationTemplateStibuildJson, map[string]*bintree{}}, + "external-service.yaml": {testExtendedTestdataCmdTestCmdTestdataExternalServiceYaml, map[string]*bintree{}}, "hello-openshift": {nil, map[string]*bintree{ "hello-pod.json": {testExtendedTestdataCmdTestCmdTestdataHelloOpenshiftHelloPodJson, map[string]*bintree{}}, }}, diff --git a/test/extended/testdata/builds/volumes/docker-deployment.yaml b/test/extended/testdata/builds/volumes/docker-deployment.yaml new file mode 100644 index 000000000000..680af58aa584 --- /dev/null +++ b/test/extended/testdata/builds/volumes/docker-deployment.yaml @@ -0,0 +1,28 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mydockertest + annotations: + image.openshift.io/triggers: "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"mydockerstream:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" +spec: + replicas: 1 + selector: + matchLabels: + app: mydockertest + deployment: mydockertest + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: mydockertest + deployment: mydockertest + spec: + containers: + - image: " " + imagePullPolicy: Always + name: mydockertest + terminationMessagePath: /dev/termination-log + dnsPolicy: ClusterFirst + restartPolicy: Always + securityContext: {} diff --git a/test/extended/testdata/builds/volumes/docker-deploymentconfig.yaml b/test/extended/testdata/builds/volumes/docker-deploymentconfig.yaml deleted file mode 100644 index d2d52b1f5d4d..000000000000 --- a/test/extended/testdata/builds/volumes/docker-deploymentconfig.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: apps.openshift.io/v1 -kind: DeploymentConfig -metadata: - name: mydockertest -spec: - replicas: 1 - selector: - app: mydockertest - deploymentconfig: mydockertest - strategy: - type: Rolling - template: - metadata: - labels: - app: mydockertest - deploymentconfig: mydockertest - spec: - containers: - - image: - imagePullPolicy: Always - name: mydockertest - terminationMessagePath: /dev/termination-log - dnsPolicy: ClusterFirst - restartPolicy: Always - securityContext: {} - triggers: - - imageChangeParams: - automatic: true - containerNames: - - mydockertest - from: - kind: ImageStreamTag - name: mydockerstream:latest - type: ImageChange - - type: ConfigChange \ No newline at end of file diff --git a/test/extended/testdata/builds/volumes/s2i-deployment.yaml b/test/extended/testdata/builds/volumes/s2i-deployment.yaml new file mode 100644 index 000000000000..ff109e2d7fd9 --- /dev/null +++ b/test/extended/testdata/builds/volumes/s2i-deployment.yaml @@ -0,0 +1,28 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mys2itest + annotations: + image.openshift.io/triggers: "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"mys2istream:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" +spec: + replicas: 1 + selector: + matchLabels: + app: mys2itest + deployment: mys2itest + strategy: + type: RollingUpdate + template: + metadata: + labels: + app: mys2itest + deployment: mys2itest + spec: + containers: + - image: " " + imagePullPolicy: Always + name: mys2itest + terminationMessagePath: /dev/termination-log + dnsPolicy: ClusterFirst + restartPolicy: Always + securityContext: {} diff --git a/test/extended/testdata/builds/volumes/s2i-deploymentconfig.yaml b/test/extended/testdata/builds/volumes/s2i-deploymentconfig.yaml deleted file mode 100644 index 789e859eb422..000000000000 --- a/test/extended/testdata/builds/volumes/s2i-deploymentconfig.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: apps.openshift.io/v1 -kind: DeploymentConfig -metadata: - name: mys2itest -spec: - replicas: 1 - selector: - app: mys2itest - deploymentconfig: mys2itest - strategy: - type: Rolling - template: - metadata: - labels: - app: mys2itest - deploymentconfig: mys2itest - spec: - containers: - - image: - imagePullPolicy: Always - name: mys2itest - terminationMessagePath: /dev/termination-log - dnsPolicy: ClusterFirst - restartPolicy: Always - securityContext: {} - triggers: - - imageChangeParams: - automatic: true - containerNames: - - mys2itest - from: - kind: ImageStreamTag - name: mys2istream:latest - type: ImageChange - - type: ConfigChange \ No newline at end of file diff --git a/test/extended/testdata/cmd/test/cmd/deployments.sh b/test/extended/testdata/cmd/test/cmd/deployments.sh index 83a0d26ea21c..5c0ad3041817 100755 --- a/test/extended/testdata/cmd/test/cmd/deployments.sh +++ b/test/extended/testdata/cmd/test/cmd/deployments.sh @@ -81,7 +81,7 @@ os::cmd::expect_success 'oc delete all --all' sleep 1 os::cmd::expect_success 'oc delete all --all' -os::cmd::expect_success 'oc process -f ${TEST_DATA}/application-template-dockerbuild.json -l app=dockerbuild | oc create -f -' +os::cmd::expect_success 'oc process -f ${TEST_DATA}/application-template-dockerbuild-dc.json -l app=dockerbuild | oc create -f -' os::cmd::try_until_success 'oc get rc/database-1' os::test::junit::declare_suite_start "cmd/deployments/get" diff --git a/test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild-dc.json b/test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild-dc.json new file mode 100644 index 000000000000..459282bfa57b --- /dev/null +++ b/test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild-dc.json @@ -0,0 +1,443 @@ +{ + "kind": "Template", + "apiVersion": "template.openshift.io/v1", + "metadata": { + "name": "ruby-helloworld-sample", + "annotations": { + "description": "This example shows how to create a simple ruby application in openshift origin v3", + "iconClass": "icon-ruby", + "tags": "instant-app,ruby,mysql" + } + }, + "objects": [ + { + "kind": "Secret", + "apiVersion": "v1", + "metadata": { + "name": "dbsecret" + }, + "stringData" : { + "mysql-user" : "${MYSQL_USER}", + "mysql-password" : "${MYSQL_PASSWORD}" + } + }, + { + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "frontend" + }, + "spec": { + "ports": [ + { + "name": "web", + "protocol": "TCP", + "port": 5432, + "targetPort": 8080, + "nodePort": 0 + } + ], + "selector": { + "name": "frontend" + }, + "type": "ClusterIP", + "sessionAffinity": "None" + }, + "status": { + "loadBalancer": {} + } + }, + { + "kind": "Route", + "apiVersion": "route.openshift.io/v1", + "metadata": { + "name": "route-edge", + "annotations": { + "template.openshift.io/expose-uri": "http://{.spec.host}{.spec.path}" + } + }, + "spec": { + "host": "www.example.com", + "to": { + "kind": "Service", + "name": "frontend" + }, + "tls": { + "termination": "edge" + } + }, + "status": {} + }, + { + "kind": "ImageStream", + "apiVersion": "image.openshift.io/v1", + "metadata": { + "name": "origin-ruby-sample" + }, + "spec": {}, + "status": { + "dockerImageRepository": "" + } + }, + { + "kind": "ImageStream", + "apiVersion": "image.openshift.io/v1", + "metadata": { + "name": "ruby-27-centos7" + }, + "spec": { + "tags": [ + { + "from": { + "kind": "DockerImage", + "name": "registry.redhat.io/ubi8/ruby-30:latest" + }, + "name": "latest" + } + ] + } + }, + { + "kind": "BuildConfig", + "apiVersion": "build.openshift.io/v1", + "metadata": { + "name": "ruby-sample-build", + "labels": { + "name": "ruby-sample-build" + }, + "annotations": { + "template.alpha.openshift.io/wait-for-ready": "true" + } + }, + "spec": { + "triggers": [ + { + "type": "GitHub", + "github": { + "secret": "secret101" + } + }, + { + "type": "Generic", + "generic": { + "secret": "secret101", + "allowEnv": true + } + }, + { + "type": "ImageChange", + "imageChange": {} + }, + { + "type": "ConfigChange" + } + ], + "source": { + "type": "Git", + "git": { + "uri": "https://github.com/openshift/ruby-hello-world.git" + } + }, + "strategy": { + "type": "Docker", + "dockerStrategy": { + "from": { + "kind": "ImageStreamTag", + "name": "ruby-27-centos7:latest" + }, + "env": [ + { + "name": "EXAMPLE", + "value": "sample-app" + } + ] + } + }, + "output": { + "to": { + "kind": "ImageStreamTag", + "name": "origin-ruby-sample:latest" + } + }, + "postCommit": { + "script": "bundle exec rake test" + }, + "resources": {} + }, + "status": { + "lastVersion": 0 + } + }, + { + "kind": "DeploymentConfig", + "apiVersion": "apps.openshift.io/v1", + "metadata": { + "name": "frontend", + "annotations": { + "template.alpha.openshift.io/wait-for-ready": "true" + } + }, + "spec": { + "strategy": { + "type": "Rolling", + "rollingParams": { + "updatePeriodSeconds": 1, + "intervalSeconds": 1, + "timeoutSeconds": 120, + "pre": { + "failurePolicy": "Abort", + "execNewPod": { + "command": [ + "/bin/true" + ], + "env": [ + { + "name": "CUSTOM_VAR1", + "value": "custom_value1" + } + ], + "containerName": "ruby-helloworld" + } + }, + "post": { + "failurePolicy": "Ignore", + "execNewPod": { + "command": [ + "/bin/true" + ], + "env": [ + { + "name": "CUSTOM_VAR2", + "value": "custom_value2" + } + ], + "containerName": "ruby-helloworld" + } + } + }, + "resources": {} + }, + "triggers": [ + { + "type": "ImageChange", + "imageChangeParams": { + "automatic": true, + "containerNames": [ + "ruby-helloworld" + ], + "from": { + "kind": "ImageStreamTag", + "name": "origin-ruby-sample:latest" + } + } + }, + { + "type": "ConfigChange" + } + ], + "replicas": 2, + "selector": { + "name": "frontend" + }, + "template": { + "metadata": { + "labels": { + "name": "frontend" + } + }, + "spec": { + "containers": [ + { + "name": "ruby-helloworld", + "image": "origin-ruby-sample", + "ports": [ + { + "containerPort": 8080, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "MYSQL_USER", + "valueFrom": { + "secretKeyRef" : { + "name" : "dbsecret", + "key" : "mysql-user" + } + } + }, + { + "name": "MYSQL_PASSWORD", + "valueFrom": { + "secretKeyRef" : { + "name" : "dbsecret", + "key" : "mysql-password" + } + } + }, + { + "name": "MYSQL_DATABASE", + "value": "${MYSQL_DATABASE}" + } + ], + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent", + "securityContext": { + "capabilities": {}, + "privileged": false + } + } + ], + "restartPolicy": "Always", + "dnsPolicy": "ClusterFirst" + } + } + } + }, + { + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "database" + }, + "spec": { + "ports": [ + { + "name": "db", + "protocol": "TCP", + "port": 5434, + "targetPort": 3306, + "nodePort": 0 + } + ], + "selector": { + "name": "database" + }, + "type": "ClusterIP", + "sessionAffinity": "None" + }, + "status": { + "loadBalancer": {} + } + }, + { + "kind": "DeploymentConfig", + "apiVersion": "apps.openshift.io/v1", + "metadata": { + "name": "database", + "annotations": { + "template.alpha.openshift.io/wait-for-ready": "true" + } + }, + "spec": { + "strategy": { + "type": "Recreate", + "resources": {} + }, + "triggers": [ + { + "type": "ConfigChange" + } + ], + "replicas": 1, + "selector": { + "name": "database" + }, + "template": { + "metadata": { + "labels": { + "name": "database" + } + }, + "spec": { + "containers": [ + { + "name": "ruby-helloworld-database", + "image": "registry.redhat.io/rhel8/mysql-80:latest", + "ports": [ + { + "containerPort": 3306, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "MYSQL_USER", + "valueFrom": { + "secretKeyRef" : { + "name" : "dbsecret", + "key" : "mysql-user" + } + } + }, + { + "name": "MYSQL_PASSWORD", + "valueFrom": { + "secretKeyRef" : { + "name" : "dbsecret", + "key" : "mysql-password" + } + } + }, + { + "name": "MYSQL_DATABASE", + "value": "${MYSQL_DATABASE}" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "ruby-helloworld-data", + "mountPath": "/var/lib/mysql/data" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "Always", + "securityContext": { + "capabilities": {}, + "privileged": false + } + } + ], + "volumes": [ + { + "name": "ruby-helloworld-data", + "emptyDir": { + "medium": "" + } + } + ], + "restartPolicy": "Always", + "dnsPolicy": "ClusterFirst" + } + } + } + } + ], + "parameters": [ + { + "name": "MYSQL_USER", + "description": "database username", + "generate": "expression", + "from": "user[A-Z0-9]{3}", + "required": true + }, + { + "name": "MYSQL_PASSWORD", + "description": "database password", + "generate": "expression", + "from": "[a-zA-Z0-9]{8}", + "required": true + }, + { + "name": "MYSQL_DATABASE", + "description": "database name", + "value": "root", + "required": true + } + ], + "labels": { + "template": "application-template-dockerbuild" + } +} diff --git a/test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild.json b/test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild.json index 459282bfa57b..70a3695bb604 100644 --- a/test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild.json +++ b/test/extended/testdata/cmd/test/cmd/testdata/application-template-dockerbuild.json @@ -169,75 +169,24 @@ } }, { - "kind": "DeploymentConfig", - "apiVersion": "apps.openshift.io/v1", + "kind": "Deployment", + "apiVersion": "apps/v1", "metadata": { "name": "frontend", "annotations": { - "template.alpha.openshift.io/wait-for-ready": "true" + "template.alpha.openshift.io/wait-for-ready": "true", + "image.openshift.io/triggers": "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"origin-ruby-sample:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" } }, "spec": { "strategy": { - "type": "Rolling", - "rollingParams": { - "updatePeriodSeconds": 1, - "intervalSeconds": 1, - "timeoutSeconds": 120, - "pre": { - "failurePolicy": "Abort", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR1", - "value": "custom_value1" - } - ], - "containerName": "ruby-helloworld" - } - }, - "post": { - "failurePolicy": "Ignore", - "execNewPod": { - "command": [ - "/bin/true" - ], - "env": [ - { - "name": "CUSTOM_VAR2", - "value": "custom_value2" - } - ], - "containerName": "ruby-helloworld" - } - } - }, - "resources": {} + "type": "RollingUpdate" }, - "triggers": [ - { - "type": "ImageChange", - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "ruby-helloworld" - ], - "from": { - "kind": "ImageStreamTag", - "name": "origin-ruby-sample:latest" - } - } - }, - { - "type": "ConfigChange" - } - ], "replicas": 2, "selector": { - "name": "frontend" + "matchLabels": { + "name": "frontend" + } }, "template": { "metadata": { @@ -322,8 +271,8 @@ } }, { - "kind": "DeploymentConfig", - "apiVersion": "apps.openshift.io/v1", + "kind": "Deployment", + "apiVersion": "apps/v1", "metadata": { "name": "database", "annotations": { @@ -335,14 +284,11 @@ "type": "Recreate", "resources": {} }, - "triggers": [ - { - "type": "ConfigChange" - } - ], "replicas": 1, "selector": { - "name": "database" + "matchLabels": { + "name": "database" + } }, "template": { "metadata": { diff --git a/test/extended/testdata/image_ecosystem/perl-hotdeploy/perl.json b/test/extended/testdata/image_ecosystem/perl-hotdeploy/perl.json index 0c4bd702e33c..00fc6d1f0630 100644 --- a/test/extended/testdata/image_ecosystem/perl-hotdeploy/perl.json +++ b/test/extended/testdata/image_ecosystem/perl-hotdeploy/perl.json @@ -60,36 +60,23 @@ } }, { - "kind": "DeploymentConfig", - "apiVersion": "apps.openshift.io/v1", + "kind": "Deployment", + "apiVersion": "apps/v1", "metadata": { - "name": "${NAME}" + "name": "${NAME}", + "annotations": { + "image.openshift.io/triggers": "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"${NAME}:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" + } }, "spec": { "strategy": { - "type": "Rolling" + "type": "RollingUpdate" }, - "triggers": [ - { - "type": "ImageChange", - "imageChangeParams": { - "automatic": true, - "containerNames": [ - "perl" - ], - "from": { - "kind": "ImageStreamTag", - "name": "${NAME}:latest" - } - } - }, - { - "type": "ConfigChange" - } - ], "replicas": 1, "selector": { - "name": "${NAME}" + "matchLabels": { + "name": "${NAME}" + } }, "template": { "metadata": { diff --git a/test/extended/testdata/templates/templateinstance_readiness.yaml b/test/extended/testdata/templates/templateinstance_readiness.yaml index fe700eb749d9..5a99036316bb 100644 --- a/test/extended/testdata/templates/templateinstance_readiness.yaml +++ b/test/extended/testdata/templates/templateinstance_readiness.yaml @@ -56,29 +56,21 @@ objects: name: "${NAME}:latest" triggers: - type: ConfigChange -- kind: DeploymentConfig - apiVersion: apps.openshift.io/v1 +- kind: Deployment + apiVersion: apps/v1 metadata: name: "${NAME}" annotations: description: Defines how to deploy the application server template.alpha.openshift.io/wait-for-ready: 'true' + image.openshift.io/triggers: "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"${NAME}:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" spec: strategy: - type: Rolling - triggers: - - type: ImageChange - imageChangeParams: - automatic: true - containerNames: - - simple-example - from: - kind: ImageStreamTag - name: "${NAME}:latest" - - type: ConfigChange + type: RollingUpdate replicas: 1 selector: - name: "${NAME}" + matchLabels: + name: "${NAME}" template: metadata: name: "${NAME}" diff --git a/test/extended/testdata/test-cli-debug.yaml b/test/extended/testdata/test-cli-debug.yaml index dd2a73305b9d..f07967aa2e9b 100644 --- a/test/extended/testdata/test-cli-debug.yaml +++ b/test/extended/testdata/test-cli-debug.yaml @@ -23,91 +23,83 @@ items: triggers: - type: ConfigChange -- kind: DeploymentConfig - apiVersion: apps.openshift.io/v1 +- kind: Deployment + apiVersion: apps/v1 metadata: name: local-busybox1 + annotations: + "image.openshift.io/triggers": "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"local-busybox:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" spec: replicas: 0 selector: - deploymentconfig: local-busybox1 + matchLabels: + deployment: local-busybox1 template: metadata: labels: - deploymentconfig: local-busybox1 + deployment: local-busybox1 spec: containers: - name: local-busybox - triggers: - - type: ImageChange - imageChangeParams: - automatic: true - containerNames: - - local-busybox - from: - kind: ImageStreamTag - name: local-busybox:latest + image: " " -- kind: DeploymentConfig - apiVersion: apps.openshift.io/v1 +- kind: Deployment + apiVersion: apps/v1 metadata: name: local-busybox2 + annotations: + "image.openshift.io/triggers": "[{\"from\":{\"kind\":\"ImageStreamTag\",\"name\":\"local-busybox:latest\"},\"fieldPath\": \"spec.template.spec.containers[0].image\"}]" spec: replicas: 0 selector: - deploymentconfig: local-busybox2 + matchLabels: + deployment: local-busybox2 template: metadata: labels: - deploymentconfig: local-busybox2 + deployment: local-busybox2 spec: containers: - name: local-busybox + image: " " command: - foo - bar args: - baz - qux - triggers: - - type: ImageChange - imageChangeParams: - automatic: true - containerNames: - - local-busybox - from: - kind: ImageStreamTag - name: local-busybox:latest -- kind: DeploymentConfig - apiVersion: apps.openshift.io/v1 +- kind: Deployment + apiVersion: apps/v1 metadata: name: busybox1 spec: replicas: 0 selector: - deploymentconfig: busybox1 + matchLabels: + deployment: busybox1 template: metadata: labels: - deploymentconfig: busybox1 + deployment: busybox1 spec: containers: - name: busybox image: image-registry.openshift-image-registry.svc:5000/openshift/tools:latest -- kind: DeploymentConfig - apiVersion: apps.openshift.io/v1 +- kind: Deployment + apiVersion: apps/v1 metadata: name: busybox2 spec: replicas: 0 selector: - deploymentconfig: busybox2 + matchLabels: + deployment: busybox2 template: metadata: labels: - deploymentconfig: busybox2 + deployment: busybox2 spec: containers: - name: busybox diff --git a/test/extended/util/annotate/generated/zz_generated.annotations.go b/test/extended/util/annotate/generated/zz_generated.annotations.go index 6922c041b735..7c896071d31e 100644 --- a/test/extended/util/annotate/generated/zz_generated.annotations.go +++ b/test/extended/util/annotate/generated/zz_generated.annotations.go @@ -19,7 +19,7 @@ var Annotations = map[string]string{ "[Conformance][sig-sno][Serial] Cluster should allow a fast rollout of kube-apiserver with no pods restarts during API disruption [apigroup:config.openshift.io][apigroup:operator.openshift.io]": " [Suite:openshift/conformance/serial/minimal]", - "[Serial] [sig-auth][Feature:OAuthServer] [RequestHeaders] [IdP] test RequestHeaders IdP [apigroup:config.openshift.io][apigroup:user.openshift.io][apigroup:apps.openshift.io]": " [Suite:openshift/conformance/serial]", + "[Serial] [sig-auth][Feature:OAuthServer] [RequestHeaders] [IdP] test RequestHeaders IdP [apigroup:config.openshift.io][apigroup:user.openshift.io]": " [Suite:openshift/conformance/serial]", "[sig-api-machinery] API data in etcd should be stored at the correct location and version for all resources [Serial]": " [Suite:openshift/conformance/serial]", @@ -635,9 +635,9 @@ var Annotations = map[string]string{ "[sig-builds][Feature:Builds][valueFrom] process valueFrom in build strategy environment variables should successfully resolve valueFrom in s2i build environment variables [apigroup:build.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", - "[sig-builds][Feature:Builds][volumes] build volumes should mount given secrets and configmaps into the build pod for docker strategy builds [apigroup:image.openshift.io][apigroup:build.openshift.io][apigroup:apps.openshift.io]": " [Suite:openshift/conformance/parallel]", + "[sig-builds][Feature:Builds][volumes] build volumes should mount given secrets and configmaps into the build pod for docker strategy builds [apigroup:image.openshift.io][apigroup:build.openshift.io]": " [Suite:openshift/conformance/parallel]", - "[sig-builds][Feature:Builds][volumes] build volumes should mount given secrets and configmaps into the build pod for source strategy builds [apigroup:image.openshift.io][apigroup:build.openshift.io][apigroup:apps.openshift.io]": " [Suite:openshift/conformance/parallel]", + "[sig-builds][Feature:Builds][volumes] build volumes should mount given secrets and configmaps into the build pod for source strategy builds [apigroup:image.openshift.io][apigroup:build.openshift.io]": " [Suite:openshift/conformance/parallel]", "[sig-builds][Feature:Builds][webhook] TestWebhook [apigroup:build.openshift.io][apigroup:image.openshift.io]": " [Suite:openshift/conformance/parallel]", @@ -663,7 +663,7 @@ var Annotations = map[string]string{ "[sig-cli] oc --request-timeout works as expected for deployment": " [Suite:openshift/conformance/parallel]", - "[sig-cli] oc adm build-chain [apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:project.openshift.io][apigroup:apps.openshift.io]": " [Suite:openshift/conformance/parallel]", + "[sig-cli] oc adm build-chain [apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:project.openshift.io]": " [Suite:openshift/conformance/parallel]", "[sig-cli] oc adm cluster-role-reapers [Serial][apigroup:authorization.openshift.io][apigroup:user.openshift.io]": " [Suite:openshift/conformance/serial]", @@ -737,9 +737,9 @@ var Annotations = map[string]string{ "[sig-cli] oc basics can show correct whoami result": " [Suite:openshift/conformance/parallel]", - "[sig-cli] oc builds complex build start-build [apigroup:build.openshift.io][apigroup:apps.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", + "[sig-cli] oc builds complex build start-build [apigroup:build.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", - "[sig-cli] oc builds complex build webhooks CRUD [apigroup:build.openshift.io][apigroup:apps.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", + "[sig-cli] oc builds complex build webhooks CRUD [apigroup:build.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", "[sig-cli] oc builds get buildconfig [apigroup:build.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", @@ -755,7 +755,7 @@ var Annotations = map[string]string{ "[sig-cli] oc completion returns expected help messages": " [Suite:openshift/conformance/parallel]", - "[sig-cli] oc debug deployment configs from a build [apigroup:image.openshift.io][apigroup:apps.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", + "[sig-cli] oc debug deployment from a build [apigroup:image.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", "[sig-cli] oc debug dissect deployment config debug [apigroup:apps.openshift.io]": " [Suite:openshift/conformance/parallel]", @@ -765,6 +765,8 @@ var Annotations = map[string]string{ "[sig-cli] oc debug ensure debug does not depend on a container actually existing for the selected resource [apigroup:apps.openshift.io]": " [Suite:openshift/conformance/parallel]", + "[sig-cli] oc debug ensure debug does not depend on a container actually existing for the selected resource for deployment": " [Suite:openshift/conformance/parallel]", + "[sig-cli] oc debug ensure it works with image streams [apigroup:image.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", "[sig-cli] oc env can set environment variables [apigroup:apps.openshift.io][apigroup:image.openshift.io][apigroup:build.openshift.io]": " [Suite:openshift/conformance/parallel]", @@ -871,13 +873,13 @@ var Annotations = map[string]string{ "[sig-cli] oc status can show correct status after switching between projects [apigroup:project.openshift.io][apigroup:image.openshift.io][Serial]": " [Suite:openshift/conformance/serial]", - "[sig-cli] oc status returns expected help messages [apigroup:project.openshift.io][apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:apps.openshift.io][apigroup:route.openshift.io]": " [Suite:openshift/conformance/parallel]", + "[sig-cli] oc status returns expected help messages [apigroup:project.openshift.io][apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:route.openshift.io]": " [Suite:openshift/conformance/parallel]", "[sig-cli] policy scc-subject-review, scc-review [apigroup:authorization.openshift.io][apigroup:user.openshift.io]": " [Suite:openshift/conformance/parallel]", "[sig-cli] templates different namespaces [apigroup:user.openshift.io][apigroup:project.openshift.io][apigroup:template.openshift.io][apigroup:authorization.openshift.io][Skipped:Disconnected]": " [Suite:openshift/conformance/parallel]", - "[sig-cli] templates process [apigroup:apps.openshift.io][apigroup:template.openshift.io][Skipped:Disconnected]": " [Suite:openshift/conformance/parallel]", + "[sig-cli] templates process [apigroup:template.openshift.io][Skipped:Disconnected]": " [Suite:openshift/conformance/parallel]", "[sig-cli][Feature:LegacyCommandTests][Disruptive][Serial] test-cmd: test/cmd/authentication.sh [apigroup:image.openshift.io]": "", @@ -1075,7 +1077,7 @@ var Annotations = map[string]string{ "[sig-devex][Feature:ImageEcosystem][mysql][Slow] openshift mysql image Creating from a template should instantiate the template [apigroup:apps.openshift.io]": " [Disabled:Broken]", - "[sig-devex][Feature:ImageEcosystem][perl][Slow] hot deploy for openshift perl image hot deploy test should work [apigroup:image.openshift.io][apigroup:operator.openshift.io][apigroup:config.openshift.io][apigroup:build.openshift.io][apigroup:apps.openshift.io]": "", + "[sig-devex][Feature:ImageEcosystem][perl][Slow] hot deploy for openshift perl image hot deploy test should work [apigroup:image.openshift.io][apigroup:operator.openshift.io][apigroup:config.openshift.io][apigroup:build.openshift.io]": "", "[sig-devex][Feature:ImageEcosystem][php][Slow] hot deploy for openshift php image CakePHP example should work with hot deploy [apigroup:image.openshift.io][apigroup:operator.openshift.io][apigroup:config.openshift.io][apigroup:build.openshift.io]": "", @@ -1103,9 +1105,9 @@ var Annotations = map[string]string{ "[sig-devex][Feature:Templates] templateinstance object kinds test should create and delete objects from varying API groups [apigroup:template.openshift.io][apigroup:route.openshift.io]": " [Suite:openshift/conformance/parallel]", - "[sig-devex][Feature:Templates] templateinstance readiness test should report failed soon after an annotated objects has failed [apigroup:template.openshift.io][apigroup:build.openshift.io][apigroup:apps.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", + "[sig-devex][Feature:Templates] templateinstance readiness test should report failed soon after an annotated objects has failed [apigroup:template.openshift.io][apigroup:build.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", - "[sig-devex][Feature:Templates] templateinstance readiness test should report ready soon after all annotated objects are ready [apigroup:template.openshift.io][apigroup:build.openshift.io][apigroup:apps.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", + "[sig-devex][Feature:Templates] templateinstance readiness test should report ready soon after all annotated objects are ready [apigroup:template.openshift.io][apigroup:build.openshift.io]": " [Skipped:Disconnected] [Suite:openshift/conformance/parallel]", "[sig-devex][Feature:Templates] templateinstance security tests [apigroup:authorization.openshift.io][apigroup:template.openshift.io] should pass security tests [apigroup:route.openshift.io]": " [Suite:openshift/conformance/parallel]", @@ -1685,7 +1687,7 @@ var Annotations = map[string]string{ "[sig-scheduling][Early] The HAProxy router pods [apigroup:route.openshift.io] should be scheduled on different nodes": " [Skipped:SingleReplicaTopology] [Suite:openshift/conformance/parallel]", - "[sig-scheduling][Early] The openshift-apiserver pods [apigroup:apps.openshift.io][apigroup:authorization.openshift.io][apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:project.openshift.io][apigroup:quota.openshift.io][apigroup:route.openshift.io][apigroup:security.openshift.io][apigroup:template.openshift.io] should be scheduled on different nodes": " [Skipped:SingleReplicaTopology] [Suite:openshift/conformance/parallel]", + "[sig-scheduling][Early] The openshift-apiserver pods [apigroup:authorization.openshift.io][apigroup:build.openshift.io][apigroup:image.openshift.io][apigroup:project.openshift.io][apigroup:quota.openshift.io][apigroup:route.openshift.io][apigroup:security.openshift.io][apigroup:template.openshift.io] should be scheduled on different nodes": " [Skipped:SingleReplicaTopology] [Suite:openshift/conformance/parallel]", "[sig-scheduling][Early] The openshift-authentication pods [apigroup:oauth.openshift.io] should be scheduled on different nodes": " [Skipped:SingleReplicaTopology] [Suite:openshift/conformance/parallel]", diff --git a/test/extended/util/annotate/rules.go b/test/extended/util/annotate/rules.go index c4c530f5ac86..91676e22ae51 100644 --- a/test/extended/util/annotate/rules.go +++ b/test/extended/util/annotate/rules.go @@ -175,6 +175,7 @@ var ( `\[sig-builds\]\[Feature:Builds\]\[pullsearch\] docker build where the registry is not specified Building from a Dockerfile whose FROM image ref does not specify the image registry should create a docker build that has buildah search from our predefined list of image registries and succeed`, `\[sig-cli\] CLI can run inside of a busybox container`, `\[sig-cli\] oc debug deployment configs from a build`, + `\[sig-cli\] oc debug deployment from a build`, `\[sig-cli\] oc rsh specific flags should work well when access to a remote shell`, `\[sig-cli\] oc builds get buildconfig`, `\[sig-cli\] oc builds patch buildconfig`, diff --git a/test/extended/util/deployment.go b/test/extended/util/deployment.go index 0d74d635e5dd..4a6fedb192fd 100644 --- a/test/extended/util/deployment.go +++ b/test/extended/util/deployment.go @@ -30,13 +30,32 @@ func GetDeploymentTemplateAnnotations(oc *CLI, deployName, namespace string) map return deployment.Spec.Template.Annotations } +func GetDeploymentRSPodTemplateHash(oc *CLI, deployName, namespace string, revision int64) (string, error) { + rsList, err := oc.AdminKubeClient().AppsV1().ReplicaSets(namespace).List(context.Background(), metav1.ListOptions{LabelSelector: ParseLabelsOrDie(fmt.Sprintf("name=%s", deployName)).String()}) + if err != nil { + return "", err + } + var rsObj *v1.ReplicaSet + for _, rs := range rsList.Items { + if rs.Annotations["deployment.kubernetes.io/revision"] == fmt.Sprintf("%d", revision) { + item := rs + rsObj = &item + } + } + if rsObj == nil { + return "", fmt.Errorf("Unable to find replicat set with 'deployment.kubernetes.io/revision=%v' annotation", revision) + } + + return rsObj.Labels["pod-template-hash"], nil +} + // WaitForDeploymentReady waits for the deployment become ready -func WaitForDeploymentReady(oc *CLI, deployName, namespace string) error { - return WaitForDeploymentReadyWithTimeout(oc, deployName, namespace, defaultMaxWaitingTime) +func WaitForDeploymentReady(oc *CLI, deployName, namespace string, revision int64) error { + return WaitForDeploymentReadyWithTimeout(oc, deployName, namespace, revision, defaultMaxWaitingTime) } // WaitForDeploymentReadyWithTimeout waits for the deployment become ready with defined timeout -func WaitForDeploymentReadyWithTimeout(oc *CLI, deployName, namespace string, timeout time.Duration) error { +func WaitForDeploymentReadyWithTimeout(oc *CLI, deployName, namespace string, revision int64, timeout time.Duration) error { var ( deployment *v1.Deployment labelSelector string @@ -58,7 +77,11 @@ func WaitForDeploymentReadyWithTimeout(oc *CLI, deployName, namespace string, ti } return true, nil } - e2e.Logf("Deployment %q is still unready, available replicas %d/%d", deployName, deployment.Status.AvailableReplicas, *deployment.Spec.Replicas) + if revision >= 0 && deployment.Status.ObservedGeneration != revision { + e2e.Logf("Unexpected observed generation: %d, expected %d", deployment.Status.ObservedGeneration, revision) + return false, nil + } + e2e.Logf("Deployment %q is still unready, available replicas %d/%d, observed generation %d", deployName, deployment.Status.AvailableReplicas, *deployment.Spec.Replicas, deployment.Status.ObservedGeneration) return false, nil })