func (*defaultPortForwarder) ForwardPorts(req *client.Request, config *client.Config, ports []string, stopChan <-chan struct{}) error { fw, err := portforward.New(req, config, ports, stopChan) if err != nil { return err } return fw.ForwardPorts() }
func RunPortForward(f *Factory, cmd *cobra.Command, args []string) error { podName := util.GetFlagString(cmd, "pod") if len(podName) == 0 { return util.UsageError(cmd, "POD is required for exec") } if len(args) < 1 { return util.UsageError(cmd, "at least 1 PORT is required for port-forward") } namespace, err := f.DefaultNamespace() if err != nil { return err } client, err := f.Client() if err != nil { return err } pod, err := client.Pods(namespace).Get(podName) if err != nil { return err } if pod.Status.Phase != api.PodRunning { glog.Fatalf("Unable to execute command because pod is not running. Current status=%v", pod.Status.Phase) } config, err := f.ClientConfig() if err != nil { return err } signals := make(chan os.Signal, 1) signal.Notify(signals, os.Interrupt) defer signal.Stop(signals) stopCh := make(chan struct{}, 1) go func() { <-signals close(stopCh) }() req := client.RESTClient.Get(). Prefix("proxy"). Resource("minions"). Name(pod.Status.Host). Suffix("portForward", namespace, podName) pf, err := portforward.New(req, config, args, stopCh) if err != nil { return err } return pf.ForwardPorts() }