...
1
16
17 package replicaset
18
19 import (
20 "context"
21 "fmt"
22 "time"
23
24 appsv1 "k8s.io/api/apps/v1"
25 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26 "k8s.io/apimachinery/pkg/util/wait"
27 clientset "k8s.io/client-go/kubernetes"
28 "k8s.io/kubernetes/test/e2e/framework"
29 )
30
31
32 func WaitForReadyReplicaSet(ctx context.Context, c clientset.Interface, ns, name string) error {
33 err := wait.PollWithContext(ctx, framework.Poll, framework.PodStartTimeout, func(ctx context.Context) (bool, error) {
34 rs, err := c.AppsV1().ReplicaSets(ns).Get(ctx, name, metav1.GetOptions{})
35 if err != nil {
36 return false, err
37 }
38 return *(rs.Spec.Replicas) == rs.Status.Replicas && *(rs.Spec.Replicas) == rs.Status.ReadyReplicas, nil
39 })
40 if wait.Interrupted(err) {
41 err = fmt.Errorf("replicaset %q never became ready", name)
42 }
43 return err
44 }
45
46
47 func WaitForReplicaSetTargetAvailableReplicas(ctx context.Context, c clientset.Interface, replicaSet *appsv1.ReplicaSet, targetReplicaNum int32) error {
48 return WaitForReplicaSetTargetAvailableReplicasWithTimeout(ctx, c, replicaSet, targetReplicaNum, framework.PodStartTimeout)
49 }
50
51
52
53 func WaitForReplicaSetTargetAvailableReplicasWithTimeout(ctx context.Context, c clientset.Interface, replicaSet *appsv1.ReplicaSet, targetReplicaNum int32, timeout time.Duration) error {
54 desiredGeneration := replicaSet.Generation
55 err := wait.PollUntilContextTimeout(ctx, framework.Poll, timeout, true, func(ctx context.Context) (bool, error) {
56 rs, err := c.AppsV1().ReplicaSets(replicaSet.Namespace).Get(ctx, replicaSet.Name, metav1.GetOptions{})
57 if err != nil {
58 return false, err
59 }
60 return rs.Status.ObservedGeneration >= desiredGeneration && rs.Status.AvailableReplicas == targetReplicaNum, nil
61 })
62 if wait.Interrupted(err) {
63 err = fmt.Errorf("replicaset %q never had desired number of .status.availableReplicas", replicaSet.Name)
64 }
65 return err
66 }
67
View as plain text