From 158e48861c06abb9d6da6d5a6e38e397c03b2503 Mon Sep 17 00:00:00 2001 From: Random-Liu Date: Fri, 4 Nov 2016 17:04:05 -0700 Subject: [PATCH] Add remote streaming implementation. --- pkg/kubelet/dockershim/remote/BUILD | 1 + pkg/kubelet/dockershim/remote/docker_service.go | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/dockershim/remote/BUILD b/pkg/kubelet/dockershim/remote/BUILD index 0089d774354..c4185b4de58 100644 --- a/pkg/kubelet/dockershim/remote/BUILD +++ b/pkg/kubelet/dockershim/remote/BUILD @@ -21,6 +21,7 @@ go_library( "//pkg/kubelet/api:go_default_library", "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", "//pkg/kubelet/dockershim:go_default_library", + "//pkg/util/exec:go_default_library", "//pkg/util/interrupt:go_default_library", "//vendor:github.com/golang/glog", "//vendor:golang.org/x/net/context", diff --git a/pkg/kubelet/dockershim/remote/docker_service.go b/pkg/kubelet/dockershim/remote/docker_service.go index 03ce2ff796e..340842841e5 100644 --- a/pkg/kubelet/dockershim/remote/docker_service.go +++ b/pkg/kubelet/dockershim/remote/docker_service.go @@ -18,12 +18,14 @@ package remote import ( "fmt" + "time" "golang.org/x/net/context" internalApi "k8s.io/kubernetes/pkg/kubelet/api" runtimeApi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" "k8s.io/kubernetes/pkg/kubelet/dockershim" + utilexec "k8s.io/kubernetes/pkg/util/exec" ) // DockerService is the interface implement CRI remote service server. @@ -138,7 +140,20 @@ func (d *dockerService) ContainerStatus(ctx context.Context, r *runtimeApi.Conta } func (d *dockerService) ExecSync(ctx context.Context, r *runtimeApi.ExecSyncRequest) (*runtimeApi.ExecSyncResponse, error) { - return nil, fmt.Errorf("not implemented") + stdout, stderr, err := d.runtimeService.ExecSync(r.GetContainerId(), r.GetCmd(), time.Duration(r.GetTimeout())*time.Second) + var exitCode int32 + if err != nil { + exitError, ok := err.(utilexec.ExitError) + if !ok { + return nil, err + } + exitCode = int32(exitError.ExitStatus()) + } + return &runtimeApi.ExecSyncResponse{ + Stdout: stdout, + Stderr: stderr, + ExitCode: &exitCode, + }, nil } func (d *dockerService) Exec(ctx context.Context, r *runtimeApi.ExecRequest) (*runtimeApi.ExecResponse, error) {