From 3e545ed808e5a707be7813a75e1cb4f324e05726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20J=2E=20=C5=81akis?= Date: Thu, 15 Dec 2016 12:58:45 +0100 Subject: [PATCH] container: add exec command prototype MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jacek J. Łakis --- server/container_exec.go | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/server/container_exec.go b/server/container_exec.go index 669df687..2255041d 100644 --- a/server/container_exec.go +++ b/server/container_exec.go @@ -1,11 +1,38 @@ package server import ( + "fmt" + + "github.com/Sirupsen/logrus" + "github.com/kubernetes-incubator/cri-o/oci" "golang.org/x/net/context" pb "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" ) // Exec prepares a streaming endpoint to execute a command in the container. func (s *Server) Exec(ctx context.Context, req *pb.ExecRequest) (*pb.ExecResponse, error) { - return &pb.ExecResponse{}, nil + logrus.Debugf("ExecRequest %+v", req) + c, err := s.getContainerFromRequest(req.ContainerId) + if err != nil { + return nil, err + } + + if err = s.runtime.UpdateStatus(c); err != nil { + return nil, err + } + + cState := s.runtime.ContainerStatus(c) + if !(cState.Status == oci.ContainerStateRunning || cState.Status == oci.ContainerStateCreated) { + return nil, fmt.Errorf("container is not created or running") + } + + if req.Cmd == nil { + return nil, fmt.Errorf("exec command cannot be empty") + } + + url := "url" + + return &pb.ExecResponse{ + Url: url, + }, nil }