We need a separate API for handing the exit status and deletion of Exec'd processes to make sure they are properly cleaned up within the shim and daemon. Fixes #973 Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
		
			
				
	
	
		
			177 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
syntax = "proto3";
 | 
						|
 | 
						|
package containerd.v1.services.execution;
 | 
						|
 | 
						|
import "google/protobuf/empty.proto";
 | 
						|
import "google/protobuf/any.proto";
 | 
						|
import "gogoproto/gogo.proto";
 | 
						|
import "github.com/containerd/containerd/api/types/mount/mount.proto";
 | 
						|
import "github.com/containerd/containerd/api/types/descriptor/descriptor.proto";
 | 
						|
import "github.com/containerd/containerd/api/types/task/task.proto";
 | 
						|
import "google/protobuf/timestamp.proto";
 | 
						|
 | 
						|
service Tasks {
 | 
						|
	rpc Create(CreateRequest) returns (CreateResponse);
 | 
						|
	rpc Start(StartRequest) returns (google.protobuf.Empty);
 | 
						|
	rpc Delete(DeleteRequest) returns (DeleteResponse);
 | 
						|
	rpc DeleteProcess(DeleteProcessRequest) returns (DeleteResponse);
 | 
						|
	rpc Info(InfoRequest) returns (InfoResponse);
 | 
						|
	rpc List(ListRequest) returns (ListResponse);
 | 
						|
	rpc Kill(KillRequest) returns (google.protobuf.Empty);
 | 
						|
	rpc Events(EventsRequest) returns (stream containerd.v1.types.Event);
 | 
						|
	rpc Exec(ExecRequest) returns (ExecResponse);
 | 
						|
	rpc Pty(PtyRequest) returns (google.protobuf.Empty);
 | 
						|
	rpc CloseStdin(CloseStdinRequest) returns (google.protobuf.Empty);
 | 
						|
	rpc Pause(PauseRequest) returns (google.protobuf.Empty);
 | 
						|
	rpc Resume(ResumeRequest) returns (google.protobuf.Empty);
 | 
						|
	rpc Processes(ProcessesRequest) returns (ProcessesResponse);
 | 
						|
	rpc Checkpoint(CheckpointRequest) returns (CheckpointResponse);
 | 
						|
}
 | 
						|
 | 
						|
message CreateRequest {
 | 
						|
	// ContainerID specifies the container to use for creating this task.
 | 
						|
	//
 | 
						|
	// The spec from the provided container id will be used to create the
 | 
						|
	// task associated with this container. Only one task can be run at a time
 | 
						|
	// per container.
 | 
						|
	//
 | 
						|
	// This should be created using the Containers service.
 | 
						|
	string container_id = 2;
 | 
						|
 | 
						|
	// RootFS provides the pre-chroot mounts to perform in the shim before
 | 
						|
	// executing the container task.
 | 
						|
	//
 | 
						|
	// These are for mounts that cannot be performed in the user namespace.
 | 
						|
	// Typically, these mounts should be resolved from snapshots specified on
 | 
						|
	// the container object.
 | 
						|
	repeated containerd.v1.types.Mount rootfs = 3;
 | 
						|
 | 
						|
	string stdin = 5;
 | 
						|
	string stdout = 6;
 | 
						|
	string stderr = 7;
 | 
						|
	bool terminal = 8;
 | 
						|
 | 
						|
	types.Descriptor checkpoint = 9;
 | 
						|
}
 | 
						|
 | 
						|
message CreateResponse {
 | 
						|
	// TODO(stevvooe): We no longer have an id for a task since they are bound
 | 
						|
	// to a single container. Although, we should represent each new task with
 | 
						|
	// an ID so one can differentiate between each instance of a container
 | 
						|
	// running.
 | 
						|
	//
 | 
						|
	// Hence, we are leaving this here and reserving the field number in case
 | 
						|
	// we need to move in this direction.
 | 
						|
	// string id = 1;
 | 
						|
 | 
						|
	string container_id = 2;
 | 
						|
	uint32 pid = 3;
 | 
						|
}
 | 
						|
 | 
						|
message StartRequest {
 | 
						|
	string container_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message DeleteRequest {
 | 
						|
	string container_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message DeleteResponse {
 | 
						|
	string container_id = 1;
 | 
						|
	uint32 exit_status = 2;
 | 
						|
	google.protobuf.Timestamp exited_at = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
 | 
						|
}
 | 
						|
 | 
						|
message DeleteProcessRequest {
 | 
						|
	string container_id = 1;
 | 
						|
	uint32 pid = 2;
 | 
						|
}
 | 
						|
 | 
						|
message InfoRequest {
 | 
						|
	string container_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message InfoResponse {
 | 
						|
	types.Task task = 1;
 | 
						|
}
 | 
						|
 | 
						|
message ListRequest {
 | 
						|
}
 | 
						|
 | 
						|
message ListResponse {
 | 
						|
	repeated containerd.v1.types.Task tasks = 1;
 | 
						|
}
 | 
						|
 | 
						|
message KillRequest {
 | 
						|
	string container_id = 1;
 | 
						|
	uint32 signal = 2;
 | 
						|
	oneof pid_or_all {
 | 
						|
	    bool all = 3;
 | 
						|
	    uint32 pid = 4;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
message EventsRequest {
 | 
						|
}
 | 
						|
 | 
						|
message ExecRequest {
 | 
						|
	// ContainerID specifies the container in which to exec the process.
 | 
						|
	string container_id = 1;
 | 
						|
	bool terminal = 2;
 | 
						|
	string stdin = 3;
 | 
						|
	string stdout = 4;
 | 
						|
	string stderr = 5;
 | 
						|
 | 
						|
	// Spec for starting a process in the target container.
 | 
						|
	//
 | 
						|
	// For runc, this is a process spec, for example.
 | 
						|
	google.protobuf.Any spec = 6;
 | 
						|
}
 | 
						|
 | 
						|
message ExecResponse {
 | 
						|
	uint32 pid = 1;
 | 
						|
}
 | 
						|
 | 
						|
message PtyRequest {
 | 
						|
	string container_id = 1;
 | 
						|
	uint32 pid = 2;
 | 
						|
	uint32 width = 3;
 | 
						|
	uint32 height = 4;
 | 
						|
}
 | 
						|
 | 
						|
message CloseStdinRequest {
 | 
						|
	string container_id = 1;
 | 
						|
	uint32 pid = 2;
 | 
						|
}
 | 
						|
 | 
						|
message PauseRequest {
 | 
						|
	string container_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message ResumeRequest {
 | 
						|
	string container_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message ProcessesRequest {
 | 
						|
	string container_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message ProcessesResponse{
 | 
						|
	repeated containerd.v1.types.Process processes = 1;
 | 
						|
}
 | 
						|
 | 
						|
message CheckpointRequest {
 | 
						|
	string container_id = 1;
 | 
						|
	bool allow_tcp = 2;
 | 
						|
	bool allow_unix_sockets = 3;
 | 
						|
	bool allow_terminal = 4;
 | 
						|
	bool file_locks = 5;
 | 
						|
	repeated string empty_namespaces = 6;
 | 
						|
	string parent_checkpoint = 7 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false];
 | 
						|
	bool exit = 8;
 | 
						|
}
 | 
						|
 | 
						|
message CheckpointResponse {
 | 
						|
	repeated types.Descriptor descriptors = 1;
 | 
						|
}
 |