@ -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 ( ) )