@@ -43,7 +43,6 @@ import (
4343 kubernetesclient "github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/kubernetes/client"
4444 kubectx "github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/kubernetes/context"
4545 "github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/output/log"
46- k8s "github.com/GoogleContainerTools/skaffold/v2/pkg/webhook/kubernetes"
4746)
4847
4948type TestType int
@@ -396,16 +395,26 @@ func (k *NSKubernetesClient) logs(entity string, names []string) {
396395 }
397396}
398397
399- // ExternalIP waits for the external IP aof a given service.
398+ // ExternalIP waits for the external IP of a given service.
400399func (k * NSKubernetesClient ) ExternalIP (serviceName string ) string {
401- svc , err := k .Services ().Get (context .Background (), serviceName , metav1.GetOptions {})
402- if err != nil {
403- k .t .Fatalf ("error getting registry service: %v" , err )
404- }
400+ var ip string
401+ // wait.PollImmediate returns an error if it times out or the function returns an error.
402+ err := wait .PollImmediate (time .Second * 5 , time .Minute * 5 , func () (bool , error ) {
403+ svc , err := k .Services ().Get (context .Background (), serviceName , metav1.GetOptions {})
404+ if err != nil {
405+ // Return false, nil to keep polling if the service isn't found yet
406+ return false , nil
407+ }
408+ if len (svc .Status .LoadBalancer .Ingress ) > 0 {
409+ ip = svc .Status .LoadBalancer .Ingress [0 ].IP
410+ // Return true once we have an IP to stop polling
411+ return ip != "" , nil
412+ }
413+ return false , nil
414+ })
405415
406- ip , err := k8s .GetExternalIP (svc )
407416 if err != nil {
408- k .t .Fatalf ("error getting external ip : %v" , err )
417+ k .t .Fatalf ("error waiting for external IP for service %s : %v" , serviceName , err )
409418 }
410419
411420 return ip
0 commit comments