// getPortForward handles a new restful port forward request. It determines the // pod name and uid and then calls ServePortForward. func (s *Server) getPortForward(request *restful.Request, response *restful.Response) { params := getRequestParams(request) pod, ok := s.host.GetPodByName(params.podNamespace, params.podName) if !ok { response.WriteError(http.StatusNotFound, fmt.Errorf("pod does not exist")) return } if len(params.podUID) > 0 && pod.UID != params.podUID { response.WriteError(http.StatusNotFound, fmt.Errorf("pod not found")) return } redirect, err := s.host.GetPortForward(pod.Name, pod.Namespace, pod.UID) if err != nil { streaming.WriteError(err, response.ResponseWriter) return } if redirect != nil { http.Redirect(response.ResponseWriter, request.Request, redirect.String(), http.StatusFound) return } portforward.ServePortForward(response.ResponseWriter, request.Request, s.host, kubecontainer.GetPodFullName(pod), params.podUID, s.host.StreamingConnectionIdleTimeout(), remotecommand.DefaultStreamCreationTimeout) }
// getExec handles requests to run a command inside a container. func (s *Server) getExec(request *restful.Request, response *restful.Response) { params := getRequestParams(request) streamOpts, err := remotecommand.NewOptions(request.Request) if err != nil { utilruntime.HandleError(err) response.WriteError(http.StatusBadRequest, err) return } pod, ok := s.host.GetPodByName(params.podNamespace, params.podName) if !ok { response.WriteError(http.StatusNotFound, fmt.Errorf("pod does not exist")) return } podFullName := kubecontainer.GetPodFullName(pod) redirect, err := s.host.GetExec(podFullName, params.podUID, params.containerName, params.cmd, *streamOpts) if err != nil { streaming.WriteError(err, response.ResponseWriter) return } if redirect != nil { http.Redirect(response.ResponseWriter, request.Request, redirect.String(), http.StatusFound) return } remotecommand.ServeExec(response.ResponseWriter, request.Request, s.host, podFullName, params.podUID, params.containerName, params.cmd, streamOpts, s.host.StreamingConnectionIdleTimeout(), remotecommand.DefaultStreamCreationTimeout, remotecommand.SupportedStreamingProtocols) }