mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Merge pull request #86767 from tanjunchen/move-functions
move functions from e2e/framework/deployment/ to e2e/apps/ and e2e/up…
This commit is contained in:
commit
9da4b00d40
@ -51,6 +51,7 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
poll = 2 * time.Second
|
poll = 2 * time.Second
|
||||||
|
pollLongTimeout = 5 * time.Minute
|
||||||
dRetryPeriod = 2 * time.Second
|
dRetryPeriod = 2 * time.Second
|
||||||
dRetryTimeout = 5 * time.Minute
|
dRetryTimeout = 5 * time.Minute
|
||||||
)
|
)
|
||||||
@ -448,7 +449,7 @@ func testRolloverDeployment(f *framework.Framework) {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
framework.Logf("Make sure deployment %q performs scaling operations", deploymentName)
|
framework.Logf("Make sure deployment %q performs scaling operations", deploymentName)
|
||||||
// Make sure the deployment starts to scale up and down replica sets by checking if its updated replicas >= 1
|
// Make sure the deployment starts to scale up and down replica sets by checking if its updated replicas >= 1
|
||||||
err = e2edeploy.WaitForDeploymentUpdatedReplicasGTE(c, ns, deploymentName, deploymentReplicas, deployment.Generation)
|
err = waitForDeploymentUpdatedReplicasGTE(c, ns, deploymentName, deploymentReplicas, deployment.Generation)
|
||||||
// Check if it's updated to revision 1 correctly
|
// Check if it's updated to revision 1 correctly
|
||||||
framework.Logf("Check revision of new replica set for deployment %q", deploymentName)
|
framework.Logf("Check revision of new replica set for deployment %q", deploymentName)
|
||||||
err = checkDeploymentRevisionAndImage(c, ns, deploymentName, "1", deploymentImage)
|
err = checkDeploymentRevisionAndImage(c, ns, deploymentName, "1", deploymentImage)
|
||||||
@ -473,7 +474,7 @@ func testRolloverDeployment(f *framework.Framework) {
|
|||||||
|
|
||||||
// Use observedGeneration to determine if the controller noticed the pod template update.
|
// Use observedGeneration to determine if the controller noticed the pod template update.
|
||||||
framework.Logf("Wait deployment %q to be observed by the deployment controller", deploymentName)
|
framework.Logf("Wait deployment %q to be observed by the deployment controller", deploymentName)
|
||||||
err = e2edeploy.WaitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
err = waitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
// Wait for it to be updated to revision 2
|
// Wait for it to be updated to revision 2
|
||||||
@ -482,7 +483,7 @@ func testRolloverDeployment(f *framework.Framework) {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
framework.Logf("Make sure deployment %q is complete", deploymentName)
|
framework.Logf("Make sure deployment %q is complete", deploymentName)
|
||||||
err = e2edeploy.WaitForDeploymentCompleteAndCheckRolling(c, deployment)
|
err = waitForDeploymentCompleteAndCheckRolling(c, deployment)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
framework.Logf("Ensure that both old replica sets have no replicas")
|
framework.Logf("Ensure that both old replica sets have no replicas")
|
||||||
@ -623,7 +624,7 @@ func testIterativeDeployments(f *framework.Framework) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
framework.Logf("Waiting for deployment %q to be observed by the controller", deploymentName)
|
framework.Logf("Waiting for deployment %q to be observed by the controller", deploymentName)
|
||||||
err = e2edeploy.WaitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
err = waitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
framework.Logf("Waiting for deployment %q status", deploymentName)
|
framework.Logf("Waiting for deployment %q status", deploymentName)
|
||||||
@ -631,7 +632,7 @@ func testIterativeDeployments(f *framework.Framework) {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
framework.Logf("Checking deployment %q for a complete condition", deploymentName)
|
framework.Logf("Checking deployment %q for a complete condition", deploymentName)
|
||||||
err = e2edeploy.WaitForDeploymentWithCondition(c, ns, deploymentName, deploymentutil.NewRSAvailableReason, appsv1.DeploymentProgressing)
|
err = waitForDeploymentWithCondition(c, ns, deploymentName, deploymentutil.NewRSAvailableReason, appsv1.DeploymentProgressing)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -710,7 +711,7 @@ func testProportionalScalingDeployment(f *framework.Framework) {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
framework.Logf("Waiting for observed generation %d", deployment.Generation)
|
framework.Logf("Waiting for observed generation %d", deployment.Generation)
|
||||||
err = e2edeploy.WaitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
err = waitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
// Verify that the required pods have come up.
|
// Verify that the required pods have come up.
|
||||||
@ -734,7 +735,7 @@ func testProportionalScalingDeployment(f *framework.Framework) {
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
framework.Logf("Waiting for observed generation %d", deployment.Generation)
|
framework.Logf("Waiting for observed generation %d", deployment.Generation)
|
||||||
err = e2edeploy.WaitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
err = waitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
// Checking state of first rollout's replicaset.
|
// Checking state of first rollout's replicaset.
|
||||||
@ -943,11 +944,11 @@ func testRollingUpdateDeploymentWithLocalTrafficLoadBalancer(f *framework.Framew
|
|||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
framework.Logf("Waiting for observed generation %d", deployment.Generation)
|
framework.Logf("Waiting for observed generation %d", deployment.Generation)
|
||||||
err = e2edeploy.WaitForObservedDeployment(c, ns, name, deployment.Generation)
|
err = waitForObservedDeployment(c, ns, name, deployment.Generation)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
|
|
||||||
framework.Logf("Make sure deployment %q is complete", name)
|
framework.Logf("Make sure deployment %q is complete", name)
|
||||||
err = e2edeploy.WaitForDeploymentCompleteAndCheckRolling(c, deployment)
|
err = waitForDeploymentCompleteAndCheckRolling(c, deployment)
|
||||||
framework.ExpectNoError(err)
|
framework.ExpectNoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1118,3 +1119,24 @@ func waitForReplicaSetTargetSpecReplicas(c clientset.Interface, replicaSet *apps
|
|||||||
func checkDeploymentRevisionAndImage(c clientset.Interface, ns, deploymentName, revision, image string) error {
|
func checkDeploymentRevisionAndImage(c clientset.Interface, ns, deploymentName, revision, image string) error {
|
||||||
return testutil.CheckDeploymentRevisionAndImage(c, ns, deploymentName, revision, image)
|
return testutil.CheckDeploymentRevisionAndImage(c, ns, deploymentName, revision, image)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// waitForObservedDeployment waits for the specified deployment generation.
|
||||||
|
func waitForObservedDeployment(c clientset.Interface, ns, deploymentName string, desiredGeneration int64) error {
|
||||||
|
return testutil.WaitForObservedDeployment(c, ns, deploymentName, desiredGeneration)
|
||||||
|
}
|
||||||
|
|
||||||
|
// waitForDeploymentWithCondition waits for the specified deployment condition.
|
||||||
|
func waitForDeploymentWithCondition(c clientset.Interface, ns, deploymentName, reason string, condType appsv1.DeploymentConditionType) error {
|
||||||
|
return testutil.WaitForDeploymentWithCondition(c, ns, deploymentName, reason, condType, framework.Logf, poll, pollLongTimeout)
|
||||||
|
}
|
||||||
|
|
||||||
|
// waitForDeploymentCompleteAndCheckRolling waits for the deployment to complete, and check rolling update strategy isn't broken at any times.
|
||||||
|
// Rolling update strategy should not be broken during a rolling update.
|
||||||
|
func waitForDeploymentCompleteAndCheckRolling(c clientset.Interface, d *appsv1.Deployment) error {
|
||||||
|
return testutil.WaitForDeploymentCompleteAndCheckRolling(c, d, framework.Logf, poll, pollLongTimeout)
|
||||||
|
}
|
||||||
|
|
||||||
|
// waitForDeploymentUpdatedReplicasGTE waits for given deployment to be observed by the controller and has at least a number of updatedReplicas
|
||||||
|
func waitForDeploymentUpdatedReplicasGTE(c clientset.Interface, ns, deploymentName string, minUpdatedReplicas int32, desiredGeneration int64) error {
|
||||||
|
return testutil.WaitForDeploymentUpdatedReplicasGTE(c, ns, deploymentName, minUpdatedReplicas, desiredGeneration, poll, pollLongTimeout)
|
||||||
|
}
|
||||||
|
@ -15,7 +15,6 @@ go_library(
|
|||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
|
||||||
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
|
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
"//test/e2e/framework:go_default_library",
|
"//test/e2e/framework:go_default_library",
|
||||||
"//test/utils:go_default_library",
|
"//test/utils:go_default_library",
|
||||||
|
@ -17,14 +17,10 @@ limitations under the License.
|
|||||||
package deployment
|
package deployment
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
|
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
testutils "k8s.io/kubernetes/test/utils"
|
testutils "k8s.io/kubernetes/test/utils"
|
||||||
)
|
)
|
||||||
@ -36,16 +32,6 @@ const (
|
|||||||
pollLongTimeout = 5 * time.Minute
|
pollLongTimeout = 5 * time.Minute
|
||||||
)
|
)
|
||||||
|
|
||||||
// WaitForObservedDeployment waits for the specified deployment generation.
|
|
||||||
func WaitForObservedDeployment(c clientset.Interface, ns, deploymentName string, desiredGeneration int64) error {
|
|
||||||
return testutils.WaitForObservedDeployment(c, ns, deploymentName, desiredGeneration)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WaitForDeploymentWithCondition waits for the specified deployment condition.
|
|
||||||
func WaitForDeploymentWithCondition(c clientset.Interface, ns, deploymentName, reason string, condType appsv1.DeploymentConditionType) error {
|
|
||||||
return testutils.WaitForDeploymentWithCondition(c, ns, deploymentName, reason, condType, framework.Logf, poll, pollLongTimeout)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WaitForDeploymentRevisionAndImage waits for the deployment's and its new RS's revision and container image to match the given revision and image.
|
// WaitForDeploymentRevisionAndImage waits for the deployment's and its new RS's revision and container image to match the given revision and image.
|
||||||
// Note that deployment revision and its new RS revision should be updated shortly most of the time, but an overwhelmed RS controller
|
// Note that deployment revision and its new RS revision should be updated shortly most of the time, but an overwhelmed RS controller
|
||||||
// may result in taking longer to relabel a RS.
|
// may result in taking longer to relabel a RS.
|
||||||
@ -59,36 +45,3 @@ func WaitForDeploymentRevisionAndImage(c clientset.Interface, ns, deploymentName
|
|||||||
func WaitForDeploymentComplete(c clientset.Interface, d *appsv1.Deployment) error {
|
func WaitForDeploymentComplete(c clientset.Interface, d *appsv1.Deployment) error {
|
||||||
return testutils.WaitForDeploymentComplete(c, d, framework.Logf, poll, pollLongTimeout)
|
return testutils.WaitForDeploymentComplete(c, d, framework.Logf, poll, pollLongTimeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WaitForDeploymentCompleteAndCheckRolling waits for the deployment to complete, and check rolling update strategy isn't broken at any times.
|
|
||||||
// Rolling update strategy should not be broken during a rolling update.
|
|
||||||
func WaitForDeploymentCompleteAndCheckRolling(c clientset.Interface, d *appsv1.Deployment) error {
|
|
||||||
return testutils.WaitForDeploymentCompleteAndCheckRolling(c, d, framework.Logf, poll, pollLongTimeout)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WaitForDeploymentUpdatedReplicasGTE waits for given deployment to be observed by the controller and has at least a number of updatedReplicas
|
|
||||||
func WaitForDeploymentUpdatedReplicasGTE(c clientset.Interface, ns, deploymentName string, minUpdatedReplicas int32, desiredGeneration int64) error {
|
|
||||||
return testutils.WaitForDeploymentUpdatedReplicasGTE(c, ns, deploymentName, minUpdatedReplicas, desiredGeneration, poll, pollLongTimeout)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WaitForDeploymentRollbackCleared waits for given deployment either started rolling back or doesn't need to rollback.
|
|
||||||
// Note that rollback should be cleared shortly, so we only wait for 1 minute here to fail early.
|
|
||||||
func WaitForDeploymentRollbackCleared(c clientset.Interface, ns, deploymentName string) error {
|
|
||||||
return testutils.WaitForDeploymentRollbackCleared(c, ns, deploymentName, poll, pollShortTimeout)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WaitForDeploymentRevision waits for becoming the target revision of a delopyment.
|
|
||||||
func WaitForDeploymentRevision(c clientset.Interface, d *appsv1.Deployment, targetRevision string) error {
|
|
||||||
err := wait.PollImmediate(poll, pollLongTimeout, func() (bool, error) {
|
|
||||||
deployment, err := c.AppsV1().Deployments(d.Namespace).Get(d.Name, metav1.GetOptions{})
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
revision := deployment.Annotations[deploymentutil.RevisionAnnotation]
|
|
||||||
return revision == targetRevision, nil
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error waiting for revision to become %q for deployment %q: %v", targetRevision, d.Name, err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
@ -18,10 +18,13 @@ package upgrades
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
|
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
e2edeploy "k8s.io/kubernetes/test/e2e/framework/deployment"
|
e2edeploy "k8s.io/kubernetes/test/e2e/framework/deployment"
|
||||||
@ -33,6 +36,9 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
deploymentName = "dp"
|
deploymentName = "dp"
|
||||||
|
// poll is how often to poll pods, nodes and claims.
|
||||||
|
poll = 2 * time.Second
|
||||||
|
pollLongTimeout = 5 * time.Minute
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: Test that the deployment stays available during master (and maybe
|
// TODO: Test that the deployment stays available during master (and maybe
|
||||||
@ -78,7 +84,7 @@ func (t *DeploymentUpgradeTest) Setup(f *framework.Framework) {
|
|||||||
t.oldRSUID = rss[0].UID
|
t.oldRSUID = rss[0].UID
|
||||||
|
|
||||||
ginkgo.By(fmt.Sprintf("Waiting for revision of the deployment %q to become 1", deploymentName))
|
ginkgo.By(fmt.Sprintf("Waiting for revision of the deployment %q to become 1", deploymentName))
|
||||||
framework.ExpectNoError(e2edeploy.WaitForDeploymentRevision(c, deployment, "1"))
|
framework.ExpectNoError(waitForDeploymentRevision(c, deployment, "1"))
|
||||||
|
|
||||||
// Trigger a new rollout so that we have some history.
|
// Trigger a new rollout so that we have some history.
|
||||||
ginkgo.By(fmt.Sprintf("Triggering a new rollout for deployment %q", deploymentName))
|
ginkgo.By(fmt.Sprintf("Triggering a new rollout for deployment %q", deploymentName))
|
||||||
@ -109,7 +115,7 @@ func (t *DeploymentUpgradeTest) Setup(f *framework.Framework) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ginkgo.By(fmt.Sprintf("Waiting for revision of the deployment %q to become 2", deploymentName))
|
ginkgo.By(fmt.Sprintf("Waiting for revision of the deployment %q to become 2", deploymentName))
|
||||||
framework.ExpectNoError(e2edeploy.WaitForDeploymentRevision(c, deployment, "2"))
|
framework.ExpectNoError(waitForDeploymentRevision(c, deployment, "2"))
|
||||||
|
|
||||||
t.oldDeploymentUID = deployment.UID
|
t.oldDeploymentUID = deployment.UID
|
||||||
}
|
}
|
||||||
@ -171,3 +177,19 @@ func (t *DeploymentUpgradeTest) Test(f *framework.Framework, done <-chan struct{
|
|||||||
func (t *DeploymentUpgradeTest) Teardown(f *framework.Framework) {
|
func (t *DeploymentUpgradeTest) Teardown(f *framework.Framework) {
|
||||||
// rely on the namespace deletion to clean up everything
|
// rely on the namespace deletion to clean up everything
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// waitForDeploymentRevision waits for becoming the target revision of a delopyment.
|
||||||
|
func waitForDeploymentRevision(c clientset.Interface, d *appsv1.Deployment, targetRevision string) error {
|
||||||
|
err := wait.PollImmediate(poll, pollLongTimeout, func() (bool, error) {
|
||||||
|
deployment, err := c.AppsV1().Deployments(d.Namespace).Get(d.Name, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
revision := deployment.Annotations[deploymentutil.RevisionAnnotation]
|
||||||
|
return revision == targetRevision, nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error waiting for revision to become %q for deployment %q: %v", targetRevision, d.Name, err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user