containerized-data-importer/tests/utils/deployments.go
Michael Henriksen 75f4fd6f2f
update k8s deps to 18.6 and controller runtime to 0.6.2 (#1330)
* update k8s deps to 1.18.6 and controller runtime to 0.6.2

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>

* remove building code generators from docker image.  This way the k8s ligray version only has to be updated in go.mod

Do more stuff in the bazel container.  Faster and better interop

Fix unit tests

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>

* make format

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>

* remove unnecessary rsync

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>

* redo code generator dep management

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>

* builder uses go modules

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>
2020-08-07 14:09:52 +02:00

41 lines
1.4 KiB
Go

package utils
import (
"context"
"github.com/pkg/errors"
apierrs "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/kubernetes"
"k8s.io/klog"
)
// WaitForDeploymentReplicasReadyOrDie adds the ability to fatal out if the replicas don't become ready
func WaitForDeploymentReplicasReadyOrDie(c *kubernetes.Clientset, namespace, name string) {
if err := WaitForDeploymentReplicasReady(c, namespace, name); err != nil {
klog.Fatal(errors.Wrapf(err, "Failed waiting for deployment \"%s/%s\" replicas to become Ready", namespace, name))
}
}
// WaitForDeploymentReplicasReady will wait for replicase to become ready and return an error if they do not
func WaitForDeploymentReplicasReady(c *kubernetes.Clientset, namespace, name string) error {
return wait.PollImmediate(defaultPollInterval, defaultPollPeriod, func() (done bool, err error) {
dep, err := c.AppsV1().Deployments(namespace).Get(context.TODO(), name, metav1.GetOptions{})
// Fail if deployment not found, ignore other (possibly intermittent) API errors
if apierrs.IsNotFound(err) {
return true, err
}
// Log non-fatal errors
if err != nil {
klog.Error(errors.Wrapf(err, "Error getting deployment \"%s/%s\"", namespace, name))
}
// All replicas not ready, continue wait
if dep.Status.ReadyReplicas != *dep.Spec.Replicas {
return false, nil
}
// Replicas ready, done
return true, nil
})
}