diff --git a/pkg/kube/wait.go b/pkg/kube/wait.go index b040f2d26..7d1640c96 100644 --- a/pkg/kube/wait.go +++ b/pkg/kube/wait.go @@ -27,6 +27,7 @@ import ( batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" extensionsv1beta1 "k8s.io/api/extensions/v1beta1" + storagev1 "k8s.io/api/storage/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" @@ -114,6 +115,14 @@ func (w *waiter) waitForResources(created ResourceList) error { if !w.deploymentReady(newReplicaSet, currentDeployment) { return false, nil } + case *storagev1.StorageClass: + sc, err := w.c.StorageV1().StorageClasses().Get(value.Name, metav1.GetOptions{}) + if err != nil { + return false, err + } + if !w.storageClassReady(sc) { + return false, nil + } case *corev1.PersistentVolumeClaim: claim, err := w.c.CoreV1().PersistentVolumeClaims(value.Namespace).Get(value.Name, metav1.GetOptions{}) if err != nil { @@ -155,6 +164,7 @@ func (w *waiter) waitForResources(created ResourceList) error { ok, err = w.podsReadyForObject(value.Namespace, value) case *appsv1.ReplicaSet: ok, err = w.podsReadyForObject(value.Namespace, value) + } if !ok || err != nil { return false, err @@ -221,6 +231,14 @@ func (w *waiter) volumeReady(v *corev1.PersistentVolumeClaim) bool { return true } +func (w *waiter) storageClassReady(sc *storagev1.StorageClass) bool { + if len(sc.Provisioner) <= 0 { + w.log("Provisioner is not allocated: %s/%s", sc.GetNamespace(), sc.GetName()) + return false + } + return true +} + func (w *waiter) deploymentReady(rs *appsv1.ReplicaSet, dep *appsv1.Deployment) bool { expectedReady := *dep.Spec.Replicas - deploymentutil.MaxUnavailable(*dep) if !(rs.Status.ReadyReplicas >= expectedReady) {