Skip to content

Commit 4a61c4c

Browse files
authored
Merge pull request #343 from Random-Liu/cherrypick-#341
Cherrypick #341
2 parents 07d8993 + fbbc312 commit 4a61c4c

26 files changed

+1891
-26
lines changed

cmd/crictl/attach.go

+1-18
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,11 @@ package main
1919
import (
2020
"fmt"
2121
"net/url"
22-
"os"
2322
"strings"
2423

2524
"github.com/sirupsen/logrus"
2625
"github.com/urfave/cli"
2726
"golang.org/x/net/context"
28-
restclient "k8s.io/client-go/rest"
29-
remoteclient "k8s.io/client-go/tools/remotecommand"
3027
pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2"
3128
)
3229

@@ -101,19 +98,5 @@ func Attach(client pb.RuntimeServiceClient, opts attachOptions) error {
10198
return err
10299
}
103100
logrus.Debugf("Attach URL: %v", URL)
104-
attach, err := remoteclient.NewSPDYExecutor(&restclient.Config{TLSClientConfig: restclient.TLSClientConfig{Insecure: true}}, "POST", URL)
105-
if err != nil {
106-
return err
107-
}
108-
109-
streamOptions := remoteclient.StreamOptions{
110-
Stdout: os.Stdout,
111-
Stderr: os.Stderr,
112-
Tty: opts.tty,
113-
}
114-
if opts.stdin {
115-
streamOptions.Stdin = os.Stdin
116-
}
117-
logrus.Debugf("StreamOptions: %v", streamOptions)
118-
return attach.Stream(streamOptions)
101+
return stream(opts.stdin, opts.tty, URL)
119102
}

cmd/crictl/exec.go

+30-8
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@ package main
1919
import (
2020
"fmt"
2121
"net/url"
22-
"os"
2322
"strings"
2423

24+
dockerterm "github.com/docker/docker/pkg/term"
2525
"github.com/sirupsen/logrus"
2626
"github.com/urfave/cli"
2727
"golang.org/x/net/context"
2828
restclient "k8s.io/client-go/rest"
2929
remoteclient "k8s.io/client-go/tools/remotecommand"
30+
"k8s.io/kubernetes/pkg/kubectl/util/term"
3031
pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2"
3132
)
3233

@@ -125,6 +126,7 @@ func Exec(client pb.RuntimeServiceClient, opts execOptions) error {
125126
Stdout: true,
126127
Stderr: !opts.tty,
127128
}
129+
128130
logrus.Debugf("ExecRequest: %v", request)
129131
r, err := client.Exec(context.Background(), request)
130132
logrus.Debugf("ExecResponse: %v", r)
@@ -143,19 +145,39 @@ func Exec(client pb.RuntimeServiceClient, opts execOptions) error {
143145
}
144146

145147
logrus.Debugf("Exec URL: %v", URL)
146-
exec, err := remoteclient.NewSPDYExecutor(&restclient.Config{TLSClientConfig: restclient.TLSClientConfig{Insecure: true}}, "POST", URL)
148+
return stream(opts.stdin, opts.tty, URL)
149+
}
150+
151+
func stream(in, tty bool, url *url.URL) error {
152+
executor, err := remoteclient.NewSPDYExecutor(&restclient.Config{TLSClientConfig: restclient.TLSClientConfig{Insecure: true}}, "POST", url)
147153
if err != nil {
148154
return err
149155
}
150156

157+
stdin, stdout, stderr := dockerterm.StdStreams()
151158
streamOptions := remoteclient.StreamOptions{
152-
Stdout: os.Stdout,
153-
Stderr: os.Stderr,
154-
Tty: opts.tty,
159+
Stdout: stdout,
160+
Stderr: stderr,
161+
Tty: tty,
155162
}
156-
if opts.stdin {
157-
streamOptions.Stdin = os.Stdin
163+
if in {
164+
streamOptions.Stdin = stdin
158165
}
159166
logrus.Debugf("StreamOptions: %v", streamOptions)
160-
return exec.Stream(streamOptions)
167+
if !tty {
168+
return executor.Stream(streamOptions)
169+
}
170+
if !in {
171+
return fmt.Errorf("tty=true must be specified with interactive=true")
172+
}
173+
t := term.TTY{
174+
In: stdin,
175+
Out: stdout,
176+
Raw: true,
177+
}
178+
if !t.IsTerminalIn() {
179+
return fmt.Errorf("input is not a terminal")
180+
}
181+
streamOptions.TerminalSizeQueue = t.MonitorSize(t.GetSize())
182+
return t.Safe(func() error { return executor.Stream(streamOptions) })
161183
}

vendor.conf

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ github.com/golang/glog 44145f04b68cf362d9c4df2182967c2275eaefed
88
github.com/golang/protobuf b4deda0973fb4c70b50d226b1af49f3da59f5265
99
github.com/google/gofuzz 44d81051d367757e1c7c6a5a86423ece9afcf63c
1010
github.com/json-iterator/go f2b4162afba35581b6d4a50d3b8f34e33c144682
11+
github.com/mitchellh/go-wordwrap ad45545899c7b13c020ea92b2072220eefad42b8
1112
github.com/modern-go/concurrent bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94
1213
github.com/modern-go/reflect2 05fbef0ca5da472bbf96c9322b84a53edc03c9fd
1314
github.com/onsi/ginkgo 67b9df7f55fe1165fd9ad49aca7754cce01a42b8

vendor/github.com/docker/docker/pkg/term/ascii.go

+66
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/docker/docker/pkg/term/proxy.go

+74
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/docker/docker/pkg/term/tc.go

+21
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/docker/docker/pkg/term/tc_solaris_cgo.go

+65
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)