func runPortForward(ns, podName string, port int) *portForwardCommand { cmd := framework.KubectlCmd("port-forward", fmt.Sprintf("--namespace=%v", ns), podName, fmt.Sprintf(":%d", port)) // This is somewhat ugly but is the only way to retrieve the port that was picked // by the port-forward command. We don't want to hard code the port as we have no // way of guaranteeing we can pick one that isn't in use, particularly on Jenkins. framework.Logf("starting port-forward command and streaming output") _, stderr, err := framework.StartCmdAndStreamOutput(cmd) if err != nil { framework.Failf("Failed to start port-forward command: %v", err) } buf := make([]byte, 128) var n int framework.Logf("reading from `kubectl port-forward` command's stderr") if n, err = stderr.Read(buf); err != nil { framework.Failf("Failed to read from kubectl port-forward stderr: %v", err) } portForwardOutput := string(buf[:n]) match := portForwardRegexp.FindStringSubmatch(portForwardOutput) if len(match) != 2 { framework.Failf("Failed to parse kubectl port-forward output: %s", portForwardOutput) } listenPort, err := strconv.Atoi(match[1]) if err != nil { framework.Failf("Error converting %s to an int: %v", match[1], err) } return &portForwardCommand{ cmd: cmd, port: listenPort, } }
func runPortForward(ns, podName string, port int) *portForwardCommand { cmd := framework.KubectlCmd("port-forward", fmt.Sprintf("--namespace=%v", ns), podName, fmt.Sprintf(":%d", port)) // This is somewhat ugly but is the only way to retrieve the port that was picked // by the port-forward command. We don't want to hard code the port as we have no // way of guaranteeing we can pick one that isn't in use, particularly on Jenkins. framework.Logf("starting port-forward command and streaming output") stdout, stderr, err := framework.StartCmdAndStreamOutput(cmd) if err != nil { framework.Failf("Failed to start port-forward command: %v", err) } buf := make([]byte, 128) // After v1.3.0-alpha.4 (#17030), kubectl port-forward outputs port // info to stdout, not stderr, so for version-skewed tests, look there // instead. var portOutput io.ReadCloser if useStdOut, err := framework.KubectlVersionGTE(portForwardPortToStdOutV); err != nil { framework.Failf("Failed to get kubectl version: %v", err) } else if useStdOut { portOutput = stdout } else { portOutput = stderr } var n int framework.Logf("reading from `kubectl port-forward` command's stdout") if n, err = portOutput.Read(buf); err != nil { framework.Failf("Failed to read from kubectl port-forward stdout: %v", err) } portForwardOutput := string(buf[:n]) match := portForwardRegexp.FindStringSubmatch(portForwardOutput) if len(match) != 2 { framework.Failf("Failed to parse kubectl port-forward output: %s", portForwardOutput) } listenPort, err := strconv.Atoi(match[1]) if err != nil { framework.Failf("Error converting %s to an int: %v", match[1], err) } return &portForwardCommand{ cmd: cmd, port: listenPort, } }
func (config *KubeletManagedHostConfig) getEtcHostsContent(podName, containerName string) string { cmd := framework.KubectlCmd("exec", fmt.Sprintf("--namespace=%v", config.f.Namespace.Name), podName, "-c", containerName, "cat", "/etc/hosts") stdout, stderr, err := framework.StartCmdAndStreamOutput(cmd) if err != nil { framework.Failf("Failed to retrieve /etc/hosts, err: %q", err) } defer stdout.Close() defer stderr.Close() buf := make([]byte, 1000) var n int framework.Logf("reading from `kubectl exec` command's stdout") if n, err = stdout.Read(buf); err != nil { framework.Failf("Failed to read from kubectl exec stdout: %v", err) } return string(buf[:n]) }
framework.Failf("Failed to observe pod creation: %v", event) } case <-time.After(framework.PodStartTimeout): Fail("Timeout while waiting for pod creation") } // We need to wait for the pod to be running, otherwise the deletion // may be carried out immediately rather than gracefully. framework.ExpectNoError(f.WaitForPodRunning(pod.Name)) // save the running pod pod, err = podClient.Get(pod.Name, metav1.GetOptions{}) Expect(err).NotTo(HaveOccurred(), "failed to GET scheduled pod") // start local proxy, so we can send graceful deletion over query string, rather than body parameter cmd := framework.KubectlCmd("proxy", "-p", "0") stdout, stderr, err := framework.StartCmdAndStreamOutput(cmd) Expect(err).NotTo(HaveOccurred(), "failed to start up proxy") defer stdout.Close() defer stderr.Close() defer framework.TryKill(cmd) buf := make([]byte, 128) var n int n, err = stdout.Read(buf) Expect(err).NotTo(HaveOccurred(), "failed to read from kubectl proxy stdout") output := string(buf[:n]) proxyRegexp := regexp.MustCompile("Starting to serve on 127.0.0.1:([0-9]+)") match := proxyRegexp.FindStringSubmatch(output) Expect(len(match)).To(Equal(2)) port, err := strconv.Atoi(match[1]) Expect(err).NotTo(HaveOccurred(), "failed to convert port into string")