Skip to content

Commit

Permalink
keep polling for additional ports to forward
Browse files Browse the repository at this point in the history
  • Loading branch information
divolgin committed Oct 29, 2019
1 parent 81bc3c1 commit a5dec06
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions pkg/k8sutil/portforward.go
Expand Up @@ -139,28 +139,36 @@ func PortForward(kubeContext string, localPort int, remotePort int, namespace st
forwardedAdditionalPorts := map[AdditionalPort]chan struct{}{}

uri := fmt.Sprintf("http://localhost:%d/api/v1/kots/ports", localPort)
sleepTime := time.Second * 1
go func() error {
for {
time.Sleep(sleepTime)
sleepTime = time.Second * 5

req, err := http.NewRequest("GET", uri, nil)
if err != nil {
return errors.Wrap(err, "failed to create request")
runtime.HandleError(errors.Wrap(err, "failed to create request"))
continue
}
req.Header.Set("Accept", "application/json")

resp, err := http.DefaultClient.Do(req)
if err != nil {
return errors.Wrap(err, "failed to get ports")
runtime.HandleError(errors.Wrap(err, "failed to get ports"))
continue
}

defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
return errors.Wrap(err, "failed to parse response")
runtime.HandleError(errors.Wrap(err, "failed to parse response"))
continue
}

desiredAdditionalPorts := []AdditionalPort{}
if err := json.Unmarshal(b, &desiredAdditionalPorts); err != nil {
return errors.Wrap(err, "failed to decode response")
runtime.HandleError(errors.Wrap(err, "failed to decode response"))
continue
}

for _, desiredAdditionalPort := range desiredAdditionalPorts {
Expand All @@ -179,19 +187,20 @@ func PortForward(kubeContext string, localPort int, remotePort int, namespace st

serviceStopCh, err := ServiceForward(kubeContext, desiredAdditionalPort.LocalPort, desiredAdditionalPort.ServicePort, namespace, desiredAdditionalPort.ServiceName)
if err != nil {
runtime.HandleError(errors.Wrap(err, "failed to forward port"))
continue // try again
}
if serviceStopCh == nil {
// we didn't do the port forwarding, probably because the pod isn't ready.
// try again next loop
runtime.HandleError(errors.New("failed to forward port; pod not ready?"))
continue // try again
}

forwardedAdditionalPorts[desiredAdditionalPort] = serviceStopCh
log := logger.NewLogger()
log.Info("Go to http://localhost:%d to access the application", desiredAdditionalPort.LocalPort)
}
time.Sleep(time.Second * 5)
}
}()
}
Expand Down

0 comments on commit a5dec06

Please sign in to comment.