@@ -86,6 +86,8 @@ func (c *KubeCluster) Deploy(dep *Deployment, update bool) error {
8686 }
8787 }
8888
89+ printLoadBalancers (c .client , dep .services )
90+
8991 // deployed successfully
9092 return nil
9193}
@@ -285,3 +287,48 @@ func copyImmutables(src, dst KubeObject) {
285287 dst .Spec .ClusterIP = src .Spec .ClusterIP
286288 }
287289}
290+
291+ func printLoadBalancers (client * kubecli.Client , services []* kube.Service ) {
292+ if len (services ) == 0 {
293+ return
294+ }
295+
296+ first := true
297+ completed := map [string ]bool {}
298+
299+ // checks when we've seen every service
300+ done := func () bool {
301+ for _ , s := range services {
302+ if s .Spec .Type == kube .ServiceTypeLoadBalancer && ! completed [s .Name ] {
303+ return false
304+ }
305+ }
306+ return true
307+ }
308+
309+ for {
310+ if done () {
311+ return
312+ }
313+
314+ if first {
315+ fmt .Println ("Waiting for load balancer deployment..." )
316+ first = false
317+ }
318+
319+ for _ , s := range services {
320+ if s .Spec .Type == kube .ServiceTypeLoadBalancer && ! completed [s .Name ] {
321+ clusterVers , err := client .Services (s .Namespace ).Get (s .Name )
322+ if err != nil {
323+ fmt .Printf ("Error getting service `%s`: %v\n " , s .Name , err )
324+ }
325+
326+ loadBalancers := clusterVers .Status .LoadBalancer .Ingress
327+ if len (loadBalancers ) == 1 {
328+ completed [s .Name ] = true
329+ fmt .Printf ("Service '%s/%s' available at: \t %s\n " , s .Namespace , s .Name ,loadBalancers [0 ].IP )
330+ }
331+ }
332+ }
333+ }
334+ }
0 commit comments