syntax = "proto3";

package containerd.v1.services;

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/container/container.proto";

service ContainerService {
	rpc Create(CreateRequest) returns (CreateResponse);
	rpc Start(StartRequest) returns (google.protobuf.Empty);
	rpc Delete(DeleteRequest) returns (DeleteResponse);
	rpc Info(InfoRequest) returns (containerd.v1.types.Container);
	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);
}

message CreateRequest {
	string id = 1 [(gogoproto.customname) = "ID"];
	google.protobuf.Any spec = 2;	
	repeated containerd.v1.types.Mount rootfs = 3;
	string runtime = 4;
	string stdin = 5;
	string stdout = 6;
	string stderr = 7;
	bool terminal = 8;
}

message CreateResponse {
	string id = 1 [(gogoproto.customname) = "ID"];
	uint32 pid = 2;
}

message StartRequest {
	string id = 1 [(gogoproto.customname) = "ID"];
}

message DeleteRequest {
	string id = 1 [(gogoproto.customname) = "ID"];
}

message DeleteResponse {
	string id = 1 [(gogoproto.customname) = "ID"];
	uint32 exit_status = 2;
}

message InfoRequest {
	string id = 1 [(gogoproto.customname) = "ID"];
}

message ListRequest {
}

message ListResponse {
	repeated containerd.v1.types.Container containers = 1;
}

message KillRequest {
	string id = 1 [(gogoproto.customname) = "ID"];
	uint32 signal = 2;
	bool all = 3;
}

message EventsRequest {
}

message ExecRequest {
	string id = 1 [(gogoproto.customname) = "ID"];
	bool terminal = 2;
	string stdin = 3;
	string stdout = 4;
	string stderr = 5;
	google.protobuf.Any spec = 6;
}

message ExecResponse {
	uint32 pid = 1;
}

message PtyRequest {
	string id = 1 [(gogoproto.customname) = "ID"];
	uint32 pid = 2;
	uint32 width = 3;
	uint32 height = 4;
}

message CloseStdinRequest {
	string id = 1 [(gogoproto.customname) = "ID"];
	uint32 pid = 2;
}