From 682c68c2fb865efd60b5086af55219e557db4149 Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Tue, 1 Sep 2015 20:54:10 -0700 Subject: [PATCH] Address comments, and fix some bugs in kubectl. --- pkg/kubectl/cmd/log.go | 4 ++++ pkg/kubectl/cmd/run.go | 20 ++++++++++++++------ test/e2e/kubectl.go | 8 +++----- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/pkg/kubectl/cmd/log.go b/pkg/kubectl/cmd/log.go index bb58e5d9b4..ac56f40d80 100644 --- a/pkg/kubectl/cmd/log.go +++ b/pkg/kubectl/cmd/log.go @@ -25,6 +25,7 @@ import ( "github.com/spf13/cobra" "k8s.io/kubernetes/pkg/api" + client "k8s.io/kubernetes/pkg/client/unversioned" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" libutil "k8s.io/kubernetes/pkg/util" ) @@ -145,7 +146,10 @@ func RunLog(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string if cmdutil.GetFlagBool(cmd, "previous") { previous = true } + return handleLog(client, namespace, podID, container, follow, previous, out) +} +func handleLog(client *client.Client, namespace, podID, container string, follow, previous bool, out io.Writer) error { readCloser, err := client.RESTClient.Get(). Namespace(namespace). Name(podID). diff --git a/pkg/kubectl/cmd/run.go b/pkg/kubectl/cmd/run.go index 5d2730967e..fa48996e12 100644 --- a/pkg/kubectl/cmd/run.go +++ b/pkg/kubectl/cmd/run.go @@ -239,14 +239,15 @@ func Run(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *cob return nil } -func waitForPodRunning(c *client.Client, pod *api.Pod, out io.Writer) error { +func waitForPodRunning(c *client.Client, pod *api.Pod, out io.Writer) (status api.PodPhase, err error) { for { pod, err := c.Pods(pod.Namespace).Get(pod.Name) if err != nil { - return err + return api.PodUnknown, err } + ready := false if pod.Status.Phase == api.PodRunning { - ready := true + ready = true for _, status := range pod.Status.ContainerStatuses { if !status.Ready { ready = false @@ -254,10 +255,13 @@ func waitForPodRunning(c *client.Client, pod *api.Pod, out io.Writer) error { } } if ready { - return nil + return api.PodRunning, nil } } - fmt.Fprintf(out, "Waiting for pod %s/%s to be running\n", pod.Namespace, pod.Name) + if pod.Status.Phase == api.PodSucceeded || pod.Status.Phase == api.PodFailed { + return pod.Status.Phase, nil + } + fmt.Fprintf(out, "Waiting for pod %s/%s to be running, status is %s, pod ready: %v\n", pod.Namespace, pod.Name, pod.Status.Phase, ready) time.Sleep(2 * time.Second) continue } @@ -280,9 +284,13 @@ func handleAttachReplicationController(c *client.Client, controller *api.Replica } func handleAttachPod(c *client.Client, pod *api.Pod, opts *AttachOptions) error { - if err := waitForPodRunning(c, pod, opts.Out); err != nil { + status, err := waitForPodRunning(c, pod, opts.Out) + if err != nil { return err } + if status == api.PodSucceeded || status == api.PodFailed { + return handleLog(c, pod.Namespace, pod.Name, pod.Spec.Containers[0].Name, false, false, opts.Out) + } opts.Client = c opts.PodName = pod.Name opts.Namespace = pod.Namespace diff --git a/test/e2e/kubectl.go b/test/e2e/kubectl.go index b5af50aa73..9733f75235 100644 --- a/test/e2e/kubectl.go +++ b/test/e2e/kubectl.go @@ -190,12 +190,10 @@ var _ = Describe("Kubectl client", func() { It("should support inline execution and attach", func() { By("executing a command with run and attach") - runOutput := runKubectl("run", fmt.Sprintf("--namespace=%v", ns), "run", "run-test", "--image=busybox", "--restart=Never", "--attach", "echo", "running", "in", "container") + runOutput := runKubectl(fmt.Sprintf("--namespace=%v", ns), "run", "run-test", "--image=busybox", "--restart=Never", "--attach=true", "echo", "running", "in", "container") expectedRunOutput := "running in container" - if runOutput != expectedRunOutput { - Failf("Unexpected kubectl exec output. Wanted '%s', got '%s'", runOutput, expectedRunOutput) - } - runKubectl("delete", "pods", "run-test") + Expect(runOutput).To(ContainSubstring(expectedRunOutput)) + // everything in the ns will be deleted at the end of the test }) It("should support port-forward", func() {