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:
Kubernetes Prow Robot 2020-01-07 14:08:31 -08:00 committed by GitHub
commit 9da4b00d40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 58 additions and 62 deletions

View File

@ -50,9 +50,10 @@ import (
)
const (
poll = 2 * time.Second
dRetryPeriod = 2 * time.Second
dRetryTimeout = 5 * time.Minute
poll = 2 * time.Second
pollLongTimeout = 5 * time.Minute
dRetryPeriod = 2 * time.Second
dRetryTimeout = 5 * time.Minute
)
var (
@ -448,7 +449,7 @@ func testRolloverDeployment(f *framework.Framework) {
framework.ExpectNoError(err)
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
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
framework.Logf("Check revision of new replica set for deployment %q", deploymentName)
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.
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)
// Wait for it to be updated to revision 2
@ -482,7 +483,7 @@ func testRolloverDeployment(f *framework.Framework) {
framework.ExpectNoError(err)
framework.Logf("Make sure deployment %q is complete", deploymentName)
err = e2edeploy.WaitForDeploymentCompleteAndCheckRolling(c, deployment)
err = waitForDeploymentCompleteAndCheckRolling(c, deployment)
framework.ExpectNoError(err)
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)
err = e2edeploy.WaitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
err = waitForObservedDeployment(c, ns, deploymentName, deployment.Generation)
framework.ExpectNoError(err)
framework.Logf("Waiting for deployment %q status", deploymentName)
@ -631,7 +632,7 @@ func testIterativeDeployments(f *framework.Framework) {
framework.ExpectNoError(err)
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)
}
@ -710,7 +711,7 @@ func testProportionalScalingDeployment(f *framework.Framework) {
framework.ExpectNoError(err)
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)
// Verify that the required pods have come up.
@ -734,7 +735,7 @@ func testProportionalScalingDeployment(f *framework.Framework) {
framework.ExpectNoError(err)
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)
// Checking state of first rollout's replicaset.
@ -943,11 +944,11 @@ func testRollingUpdateDeploymentWithLocalTrafficLoadBalancer(f *framework.Framew
framework.ExpectNoError(err)
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.Logf("Make sure deployment %q is complete", name)
err = e2edeploy.WaitForDeploymentCompleteAndCheckRolling(c, deployment)
err = waitForDeploymentCompleteAndCheckRolling(c, deployment)
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 {
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)
}

View File

@ -15,7 +15,6 @@ go_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/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",
"//test/e2e/framework:go_default_library",
"//test/utils:go_default_library",

View File

@ -17,14 +17,10 @@ limitations under the License.
package deployment
import (
"fmt"
"time"
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"
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
"k8s.io/kubernetes/test/e2e/framework"
testutils "k8s.io/kubernetes/test/utils"
)
@ -36,16 +32,6 @@ const (
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.
// 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.
@ -59,36 +45,3 @@ func WaitForDeploymentRevisionAndImage(c clientset.Interface, ns, deploymentName
func WaitForDeploymentComplete(c clientset.Interface, d *appsv1.Deployment) error {
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
}

View File

@ -18,10 +18,13 @@ package upgrades
import (
"fmt"
"time"
appsv1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"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"
"k8s.io/kubernetes/test/e2e/framework"
e2edeploy "k8s.io/kubernetes/test/e2e/framework/deployment"
@ -33,6 +36,9 @@ import (
const (
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
@ -78,7 +84,7 @@ func (t *DeploymentUpgradeTest) Setup(f *framework.Framework) {
t.oldRSUID = rss[0].UID
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.
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))
framework.ExpectNoError(e2edeploy.WaitForDeploymentRevision(c, deployment, "2"))
framework.ExpectNoError(waitForDeploymentRevision(c, deployment, "2"))
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) {
// 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
}