mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
Address comments, and fix some bugs in kubectl.
This commit is contained in:
parent
7f4bca80ba
commit
682c68c2fb
@ -25,6 +25,7 @@ import (
|
|||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
libutil "k8s.io/kubernetes/pkg/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") {
|
if cmdutil.GetFlagBool(cmd, "previous") {
|
||||||
previous = true
|
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().
|
readCloser, err := client.RESTClient.Get().
|
||||||
Namespace(namespace).
|
Namespace(namespace).
|
||||||
Name(podID).
|
Name(podID).
|
||||||
|
@ -239,14 +239,15 @@ func Run(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *cob
|
|||||||
return nil
|
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 {
|
for {
|
||||||
pod, err := c.Pods(pod.Namespace).Get(pod.Name)
|
pod, err := c.Pods(pod.Namespace).Get(pod.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return api.PodUnknown, err
|
||||||
}
|
}
|
||||||
|
ready := false
|
||||||
if pod.Status.Phase == api.PodRunning {
|
if pod.Status.Phase == api.PodRunning {
|
||||||
ready := true
|
ready = true
|
||||||
for _, status := range pod.Status.ContainerStatuses {
|
for _, status := range pod.Status.ContainerStatuses {
|
||||||
if !status.Ready {
|
if !status.Ready {
|
||||||
ready = false
|
ready = false
|
||||||
@ -254,10 +255,13 @@ func waitForPodRunning(c *client.Client, pod *api.Pod, out io.Writer) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ready {
|
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)
|
time.Sleep(2 * time.Second)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -280,9 +284,13 @@ func handleAttachReplicationController(c *client.Client, controller *api.Replica
|
|||||||
}
|
}
|
||||||
|
|
||||||
func handleAttachPod(c *client.Client, pod *api.Pod, opts *AttachOptions) error {
|
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
|
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.Client = c
|
||||||
opts.PodName = pod.Name
|
opts.PodName = pod.Name
|
||||||
opts.Namespace = pod.Namespace
|
opts.Namespace = pod.Namespace
|
||||||
|
@ -190,12 +190,10 @@ var _ = Describe("Kubectl client", func() {
|
|||||||
|
|
||||||
It("should support inline execution and attach", func() {
|
It("should support inline execution and attach", func() {
|
||||||
By("executing a command with run and attach")
|
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"
|
expectedRunOutput := "running in container"
|
||||||
if runOutput != expectedRunOutput {
|
Expect(runOutput).To(ContainSubstring(expectedRunOutput))
|
||||||
Failf("Unexpected kubectl exec output. Wanted '%s', got '%s'", runOutput, expectedRunOutput)
|
// everything in the ns will be deleted at the end of the test
|
||||||
}
|
|
||||||
runKubectl("delete", "pods", "run-test")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
It("should support port-forward", func() {
|
It("should support port-forward", func() {
|
||||||
|
Loading…
Reference in New Issue
Block a user