diff --git a/pkg/kube/wait.go b/pkg/kube/wait.go index c51512bcf..03160df92 100644 --- a/pkg/kube/wait.go +++ b/pkg/kube/wait.go @@ -47,9 +47,12 @@ func (w *waiter) waitForResources(created Result) error { w.log("beginning wait for %d resources with timeout of %v", len(created), w.timeout) return wait.Poll(2*time.Second, w.timeout, func() (bool, error) { - for _, v := range created[:0] { + for _, v := range created { var ( - ok bool + // This defaults to true, otherwise we get to a point where + // things will always return false unless one of the objects + // that manages pods has been hit + ok = true err error ) switch value := asVersioned(v).(type) { @@ -128,6 +131,10 @@ func (w *waiter) waitForResources(created Result) error { } case *corev1.ReplicationController: ok, err = w.podsReadyForObject(value.Namespace, value) + // TODO(Taylor): This works, but ends up with a possible race + // condition if some pods have not been scheduled yet. This logic + // should be refactored to do similar checks to what is done for + // Deployments case *extensionsv1beta1.DaemonSet: ok, err = w.podsReadyForObject(value.Namespace, value) case *appsv1.DaemonSet: @@ -193,22 +200,17 @@ func (w *waiter) serviceReady(s *corev1.Service) bool { if s.Spec.Type == corev1.ServiceTypeExternalName { return true } + // Make sure the service is not explicitly set to "None" before checking the IP - if s.Spec.ClusterIP != corev1.ClusterIPNone && !isServiceIPSet(s) || + if (s.Spec.ClusterIP != corev1.ClusterIPNone && s.Spec.ClusterIP == "") || // This checks if the service has a LoadBalancer and that balancer has an Ingress defined - s.Spec.Type == corev1.ServiceTypeLoadBalancer && s.Status.LoadBalancer.Ingress == nil { + (s.Spec.Type == corev1.ServiceTypeLoadBalancer && s.Status.LoadBalancer.Ingress == nil) { w.log("Service is not ready: %s/%s", s.GetNamespace(), s.GetName()) return false } return true } -// isServiceIPSet aims to check if the service's ClusterIP is set or not -// the objective is not to perform validation here -func isServiceIPSet(service *corev1.Service) bool { - return service.Spec.ClusterIP != corev1.ClusterIPNone && service.Spec.ClusterIP != "" -} - func (w *waiter) volumeReady(v *corev1.PersistentVolumeClaim) bool { if v.Status.Phase != corev1.ClaimBound { w.log("PersistentVolumeClaim is not ready: %s/%s", v.GetNamespace(), v.GetName())