mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-09 20:17:41 +00:00
Fix race condition in kubectl run --attach
This commit is contained in:
parent
c317020922
commit
4dc9df91d8
@ -156,12 +156,6 @@ func (p *AttachOptions) Run() error {
|
|||||||
return fmt.Errorf("pod %s is not running and cannot be attached to; current phase is %s", p.PodName, pod.Status.Phase)
|
return fmt.Errorf("pod %s is not running and cannot be attached to; current phase is %s", p.PodName, pod.Status.Phase)
|
||||||
}
|
}
|
||||||
|
|
||||||
containerName := p.ContainerName
|
|
||||||
if len(containerName) == 0 {
|
|
||||||
glog.V(4).Infof("defaulting container name to %s", pod.Spec.Containers[0].Name)
|
|
||||||
containerName = pod.Spec.Containers[0].Name
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: refactor with terminal helpers from the edit utility once that is merged
|
// TODO: refactor with terminal helpers from the edit utility once that is merged
|
||||||
var stdin io.Reader
|
var stdin io.Reader
|
||||||
tty := p.TTY
|
tty := p.TTY
|
||||||
@ -205,7 +199,17 @@ func (p *AttachOptions) Run() error {
|
|||||||
Name(pod.Name).
|
Name(pod.Name).
|
||||||
Namespace(pod.Namespace).
|
Namespace(pod.Namespace).
|
||||||
SubResource("attach").
|
SubResource("attach").
|
||||||
Param("container", containerName)
|
Param("container", p.GetContainerName(pod))
|
||||||
|
|
||||||
return p.Attach.Attach(req, p.Config, stdin, p.Out, p.Err, tty)
|
return p.Attach.Attach(req, p.Config, stdin, p.Out, p.Err, tty)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetContainerName returns the name of the container to attach to, with a fallback.
|
||||||
|
func (p *AttachOptions) GetContainerName(pod *api.Pod) string {
|
||||||
|
if len(p.ContainerName) > 0 {
|
||||||
|
return p.ContainerName
|
||||||
|
}
|
||||||
|
|
||||||
|
glog.V(4).Infof("defaulting container name to %s", pod.Spec.Containers[0].Name)
|
||||||
|
return pod.Spec.Containers[0].Name
|
||||||
|
}
|
||||||
|
@ -291,12 +291,16 @@ func handleAttachPod(c *client.Client, pod *api.Pod, opts *AttachOptions) error
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if status == api.PodSucceeded || status == api.PodFailed {
|
if status == api.PodSucceeded || status == api.PodFailed {
|
||||||
return handleLog(c, pod.Namespace, pod.Name, &api.PodLogOptions{Container: pod.Spec.Containers[0].Name}, opts.Out)
|
return handleLog(c, pod.Namespace, pod.Name, &api.PodLogOptions{Container: opts.GetContainerName(pod)}, opts.Out)
|
||||||
}
|
}
|
||||||
opts.Client = c
|
opts.Client = c
|
||||||
opts.PodName = pod.Name
|
opts.PodName = pod.Name
|
||||||
opts.Namespace = pod.Namespace
|
opts.Namespace = pod.Namespace
|
||||||
return opts.Run()
|
if err := opts.Run(); err != nil {
|
||||||
|
fmt.Fprintf(opts.Out, "Error attaching, falling back to logs: %v\n", err)
|
||||||
|
return handleLog(c, pod.Namespace, pod.Name, &api.PodLogOptions{Container: opts.GetContainerName(pod)}, opts.Out)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRestartPolicy(cmd *cobra.Command, interactive bool) (api.RestartPolicy, error) {
|
func getRestartPolicy(cmd *cobra.Command, interactive bool) (api.RestartPolicy, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user