api: begin to define the containerkit api
This commit cuts out the structure for defining grpc services for this project. To provide compatibility with go package generation and support reuse, we use a single protobuf file per package and make the import paths relative to the GOPATH. This first pass attempts to position the Mount type as the lingua franca of ContainerKit. The Images service will provide paths prepared for use as a set of mounts of the container service. We'll need to merge the container service in place with new file defined here. Signed-off-by: Stephen J Day <stephen.day@docker.com>
This commit is contained in:
parent
40003e7085
commit
32a25d5523
10 changed files with 690 additions and 0 deletions
136
api/container/container.pb.go
Normal file
136
api/container/container.pb.go
Normal file
|
@ -0,0 +1,136 @@
|
|||
// Code generated by protoc-gen-gogo.
|
||||
// source: container.proto
|
||||
// DO NOT EDIT!
|
||||
|
||||
/*
|
||||
Package container is a generated protocol buffer package.
|
||||
|
||||
It is generated from these files:
|
||||
container.proto
|
||||
|
||||
It has these top-level messages:
|
||||
Container
|
||||
ContainerSpec
|
||||
*/
|
||||
package container
|
||||
|
||||
import proto "github.com/gogo/protobuf/proto"
|
||||
import fmt "fmt"
|
||||
import math "math"
|
||||
import _ "github.com/gogo/protobuf/gogoproto"
|
||||
import docker_containerkit_types "github.com/docker/containerkit/api/types/mount"
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
const _ = proto.GoGoProtoPackageIsVersion1
|
||||
|
||||
type Container struct {
|
||||
Container *ContainerSpec `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"`
|
||||
}
|
||||
|
||||
func (m *Container) Reset() { *m = Container{} }
|
||||
func (m *Container) String() string { return proto.CompactTextString(m) }
|
||||
func (*Container) ProtoMessage() {}
|
||||
func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{0} }
|
||||
|
||||
func (m *Container) GetContainer() *ContainerSpec {
|
||||
if m != nil {
|
||||
return m.Container
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Container specifies runtime parameters for a container.
|
||||
type ContainerSpec struct {
|
||||
// name must be a unique name to identify the container.
|
||||
//
|
||||
// This can be used as a system identifier external to ContainerKit services.
|
||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
|
||||
// Labels defines labels to be added to the container at creation time. If
|
||||
// collisions with system labels occur, these labels will be overridden.
|
||||
//
|
||||
// This field *must* remain compatible with the Labels field of
|
||||
// Annotations.
|
||||
Labels map[string]string `protobuf:"bytes,2,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||
Mounts []docker_containerkit_types.Mount `protobuf:"bytes,3,rep,name=mounts" json:"mounts"`
|
||||
// Command to run the the container. The first element is a path to the
|
||||
// executable and the following elements are treated as arguments.
|
||||
//
|
||||
// If command is empty, execution will fall back to the image's entrypoint.
|
||||
//
|
||||
// Command should only be used when overriding entrypoint.
|
||||
Command []string `protobuf:"bytes,4,rep,name=command" json:"command,omitempty"`
|
||||
// Args specifies arguments provided to the image's entrypoint.
|
||||
//
|
||||
// If Command and Args are provided, Args will be appended to Command.
|
||||
Args []string `protobuf:"bytes,5,rep,name=args" json:"args,omitempty"`
|
||||
// Env specifies the environment variables for the container in NAME=VALUE
|
||||
// format. These must be compliant with [IEEE Std
|
||||
// 1003.1-2001](http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html).
|
||||
Env []string `protobuf:"bytes,6,rep,name=env" json:"env,omitempty"`
|
||||
// Dir defines the working directory to set for the container process.
|
||||
Dir string `protobuf:"bytes,7,opt,name=dir,proto3" json:"dir,omitempty"`
|
||||
// User specifies the user that should be employed to run the container.
|
||||
//
|
||||
// Note that the primary group may be specified by appending the group name
|
||||
// or id to the user name, separated by a `:`. This syntax is
|
||||
// `<user>:<group>`.
|
||||
User string `protobuf:"bytes,8,opt,name=user,proto3" json:"user,omitempty"`
|
||||
// Groups specifies supplementary groups available to the user.
|
||||
Groups []string `protobuf:"bytes,9,rep,name=groups" json:"groups,omitempty"`
|
||||
}
|
||||
|
||||
func (m *ContainerSpec) Reset() { *m = ContainerSpec{} }
|
||||
func (m *ContainerSpec) String() string { return proto.CompactTextString(m) }
|
||||
func (*ContainerSpec) ProtoMessage() {}
|
||||
func (*ContainerSpec) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{1} }
|
||||
|
||||
func (m *ContainerSpec) GetLabels() map[string]string {
|
||||
if m != nil {
|
||||
return m.Labels
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ContainerSpec) GetMounts() []docker_containerkit_types.Mount {
|
||||
if m != nil {
|
||||
return m.Mounts
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*Container)(nil), "docker.containerkit.v1.Container")
|
||||
proto.RegisterType((*ContainerSpec)(nil), "docker.containerkit.v1.ContainerSpec")
|
||||
}
|
||||
|
||||
var fileDescriptorContainer = []byte{
|
||||
// 344 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x91, 0xc1, 0x4a, 0xf3, 0x40,
|
||||
0x14, 0x85, 0xff, 0x26, 0x6d, 0xfa, 0xe7, 0x16, 0x51, 0x06, 0x29, 0x43, 0x37, 0x86, 0x82, 0xd0,
|
||||
0x8d, 0x13, 0x5a, 0x37, 0xda, 0x85, 0x0b, 0x8b, 0x0b, 0x41, 0x41, 0xe2, 0x13, 0x4c, 0xd2, 0x31,
|
||||
0x86, 0x36, 0x33, 0x61, 0x32, 0x29, 0xf4, 0x0d, 0x7d, 0x0a, 0xb7, 0xbe, 0x86, 0xcc, 0x9d, 0xb4,
|
||||
0x56, 0xe8, 0xc2, 0x4d, 0x38, 0xe7, 0xe4, 0x9e, 0x2f, 0x73, 0x27, 0x70, 0x9a, 0x29, 0x69, 0x78,
|
||||
0x21, 0x85, 0x66, 0x95, 0x56, 0x46, 0x91, 0xe1, 0x52, 0x65, 0x2b, 0xa1, 0xd9, 0x3e, 0x5f, 0x15,
|
||||
0x86, 0x6d, 0xa6, 0xa3, 0xab, 0xbc, 0x30, 0xef, 0x4d, 0xca, 0x32, 0x55, 0xc6, 0xb9, 0xca, 0x55,
|
||||
0x8c, 0xe3, 0x69, 0xf3, 0x86, 0x0e, 0x0d, 0x2a, 0x87, 0x19, 0xcd, 0x0f, 0xc6, 0x1d, 0x31, 0x3e,
|
||||
0x24, 0xc6, 0xbc, 0x2a, 0x62, 0xb3, 0xad, 0x44, 0x1d, 0x97, 0xaa, 0x91, 0xc6, 0x3d, 0x5d, 0x77,
|
||||
0xfc, 0x02, 0xe1, 0x62, 0x37, 0x4b, 0x16, 0x10, 0xee, 0x8b, 0xb4, 0x13, 0x75, 0x26, 0x83, 0xd9,
|
||||
0x25, 0x3b, 0x7e, 0x46, 0xb6, 0x6f, 0xbd, 0x56, 0x22, 0x4b, 0x7e, 0x7a, 0xe3, 0x2f, 0x0f, 0x4e,
|
||||
0x7e, 0xbd, 0x24, 0x04, 0xba, 0x92, 0x97, 0x02, 0x89, 0x61, 0x82, 0x9a, 0x3c, 0x42, 0xb0, 0xe6,
|
||||
0xa9, 0x58, 0xd7, 0xd4, 0x8b, 0xfc, 0xc9, 0x60, 0x36, 0xfd, 0xd3, 0x77, 0xd8, 0x13, 0x76, 0x1e,
|
||||
0xa4, 0xd1, 0xdb, 0xa4, 0x05, 0x90, 0x3b, 0x08, 0x70, 0xa3, 0x9a, 0xfa, 0x88, 0x8a, 0x8e, 0xa2,
|
||||
0xf0, 0x02, 0xd8, 0xb3, 0x1d, 0xbc, 0xef, 0x7e, 0x7c, 0x5e, 0xfc, 0x4b, 0xda, 0x16, 0xa1, 0xd0,
|
||||
0xcf, 0x54, 0x59, 0x72, 0xb9, 0xa4, 0xdd, 0xc8, 0x9f, 0x84, 0xc9, 0xce, 0xda, 0x83, 0x73, 0x9d,
|
||||
0xd7, 0xb4, 0x87, 0x31, 0x6a, 0x72, 0x06, 0xbe, 0x90, 0x1b, 0x1a, 0x60, 0x64, 0xa5, 0x4d, 0x96,
|
||||
0x85, 0xa6, 0x7d, 0xdc, 0xce, 0x4a, 0xdb, 0x6b, 0x6a, 0xa1, 0xe9, 0x7f, 0xb7, 0xb0, 0xd5, 0x64,
|
||||
0x08, 0x41, 0xae, 0x55, 0x53, 0xd5, 0x34, 0xc4, 0x6a, 0xeb, 0x46, 0xb7, 0x30, 0x38, 0x58, 0xca,
|
||||
0xc2, 0x56, 0x62, 0xdb, 0x5e, 0x95, 0x95, 0xe4, 0x1c, 0x7a, 0x1b, 0xbe, 0x6e, 0x04, 0xf5, 0x30,
|
||||
0x73, 0x66, 0xee, 0xdd, 0x74, 0xd2, 0x00, 0x7f, 0xe1, 0xf5, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff,
|
||||
0x4a, 0x36, 0x9c, 0x33, 0x58, 0x02, 0x00, 0x00,
|
||||
}
|
65
api/container/container.proto
Normal file
65
api/container/container.proto
Normal file
|
@ -0,0 +1,65 @@
|
|||
syntax = "proto3";
|
||||
|
||||
package docker.containerkit.v1;
|
||||
|
||||
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
|
||||
import "github.com/docker/containerkit/api/types/mount/mount.proto";
|
||||
|
||||
// TODO(stevvooe): Merge this with the other container.proto. Most of this is
|
||||
// scraped from swarmkit.
|
||||
|
||||
message Container {
|
||||
ContainerSpec container = 1;
|
||||
|
||||
// Runtime properties go here.
|
||||
}
|
||||
|
||||
// Container specifies runtime parameters for a container.
|
||||
message ContainerSpec {
|
||||
// name must be a unique name to identify the container.
|
||||
//
|
||||
// This can be used as a system identifier external to ContainerKit services.
|
||||
string name = 1;
|
||||
|
||||
// Labels defines labels to be added to the container at creation time. If
|
||||
// collisions with system labels occur, these labels will be overridden.
|
||||
//
|
||||
// This field *must* remain compatible with the Labels field of
|
||||
// Annotations.
|
||||
map<string, string> labels = 2;
|
||||
|
||||
repeated types.Mount mounts = 3 [(gogoproto.nullable) = false];
|
||||
|
||||
// Command to run the the container. The first element is a path to the
|
||||
// executable and the following elements are treated as arguments.
|
||||
//
|
||||
// If command is empty, execution will fall back to the image's entrypoint.
|
||||
//
|
||||
// Command should only be used when overriding entrypoint.
|
||||
repeated string command = 4;
|
||||
|
||||
// Args specifies arguments provided to the image's entrypoint.
|
||||
//
|
||||
// If Command and Args are provided, Args will be appended to Command.
|
||||
repeated string args = 5;
|
||||
|
||||
// Env specifies the environment variables for the container in NAME=VALUE
|
||||
// format. These must be compliant with [IEEE Std
|
||||
// 1003.1-2001](http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html).
|
||||
repeated string env = 6;
|
||||
|
||||
// Dir defines the working directory to set for the container process.
|
||||
string dir = 7;
|
||||
|
||||
// User specifies the user that should be employed to run the container.
|
||||
//
|
||||
// Note that the primary group may be specified by appending the group name
|
||||
// or id to the user name, separated by a `:`. This syntax is
|
||||
// `<user>:<group>`.
|
||||
string user = 8;
|
||||
|
||||
// Groups specifies supplementary groups available to the user.
|
||||
repeated string groups = 9;
|
||||
}
|
||||
|
||||
|
3
api/container/gen.go
Normal file
3
api/container/gen.go
Normal file
|
@ -0,0 +1,3 @@
|
|||
package container
|
||||
|
||||
//go:generate protoc -I .:../../..:$GOPATH/src --gogo_out=plugins=grpc,import_path=github.com/docker/containerkit/api/container:. container.proto
|
3
api/image/gen.go
Normal file
3
api/image/gen.go
Normal file
|
@ -0,0 +1,3 @@
|
|||
package image
|
||||
|
||||
//go:generate protoc -I .:../../..:$GOPATH/src --gogo_out=plugins=grpc,import_path=github.com/docker/containerkit/api/image:. image.proto
|
295
api/image/image.pb.go
Normal file
295
api/image/image.pb.go
Normal file
|
@ -0,0 +1,295 @@
|
|||
// Code generated by protoc-gen-gogo.
|
||||
// source: image.proto
|
||||
// DO NOT EDIT!
|
||||
|
||||
/*
|
||||
Package image is a generated protocol buffer package.
|
||||
|
||||
It is generated from these files:
|
||||
image.proto
|
||||
|
||||
It has these top-level messages:
|
||||
PrepareRequest
|
||||
PrepareResponse
|
||||
CleanupRequest
|
||||
CleanupResponse
|
||||
CommitRequest
|
||||
CommitResponse
|
||||
*/
|
||||
package image
|
||||
|
||||
import proto "github.com/gogo/protobuf/proto"
|
||||
import fmt "fmt"
|
||||
import math "math"
|
||||
import _ "github.com/gogo/protobuf/gogoproto"
|
||||
import docker_containerkit_types "github.com/docker/containerkit/api/types/mount"
|
||||
|
||||
import (
|
||||
context "golang.org/x/net/context"
|
||||
grpc "google.golang.org/grpc"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
const _ = proto.GoGoProtoPackageIsVersion1
|
||||
|
||||
type PrepareRequest struct {
|
||||
// Path specifies the filesystem path to target for the image preparation.
|
||||
//
|
||||
// These will influence the values of "target" in the emitted mounts. It
|
||||
// must be unique per usage of the prepared mount and can only be prepared
|
||||
// again after a call to cleanup.
|
||||
Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"`
|
||||
// name of the image to prepare.
|
||||
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
|
||||
}
|
||||
|
||||
func (m *PrepareRequest) Reset() { *m = PrepareRequest{} }
|
||||
func (m *PrepareRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*PrepareRequest) ProtoMessage() {}
|
||||
func (*PrepareRequest) Descriptor() ([]byte, []int) { return fileDescriptorImage, []int{0} }
|
||||
|
||||
type PrepareResponse struct {
|
||||
// Layers provides a list of mounts to use with container creation. The
|
||||
// layers will be mounted, in order, assembling the root filesystem.
|
||||
//
|
||||
// Typically, these can be augmented with other mounts from the volume
|
||||
// service, tmpfs, application-specific bind mounts or even mounts from
|
||||
// other containers.
|
||||
Layers []*docker_containerkit_types.Mount `protobuf:"bytes,1,rep,name=layers" json:"layers,omitempty"`
|
||||
}
|
||||
|
||||
func (m *PrepareResponse) Reset() { *m = PrepareResponse{} }
|
||||
func (m *PrepareResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*PrepareResponse) ProtoMessage() {}
|
||||
func (*PrepareResponse) Descriptor() ([]byte, []int) { return fileDescriptorImage, []int{1} }
|
||||
|
||||
func (m *PrepareResponse) GetLayers() []*docker_containerkit_types.Mount {
|
||||
if m != nil {
|
||||
return m.Layers
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type CleanupRequest struct {
|
||||
// Path cleans up the path used for the image.
|
||||
// ID identifies the prepared image to cleanup.
|
||||
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
|
||||
}
|
||||
|
||||
func (m *CleanupRequest) Reset() { *m = CleanupRequest{} }
|
||||
func (m *CleanupRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*CleanupRequest) ProtoMessage() {}
|
||||
func (*CleanupRequest) Descriptor() ([]byte, []int) { return fileDescriptorImage, []int{2} }
|
||||
|
||||
type CleanupResponse struct {
|
||||
}
|
||||
|
||||
func (m *CleanupResponse) Reset() { *m = CleanupResponse{} }
|
||||
func (m *CleanupResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*CleanupResponse) ProtoMessage() {}
|
||||
func (*CleanupResponse) Descriptor() ([]byte, []int) { return fileDescriptorImage, []int{3} }
|
||||
|
||||
// CommitRequest provides argument for the Commit RPC.
|
||||
type CommitRequest struct {
|
||||
// Path to a prepared image to capture changes.
|
||||
Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
|
||||
}
|
||||
|
||||
func (m *CommitRequest) Reset() { *m = CommitRequest{} }
|
||||
func (m *CommitRequest) String() string { return proto.CompactTextString(m) }
|
||||
func (*CommitRequest) ProtoMessage() {}
|
||||
func (*CommitRequest) Descriptor() ([]byte, []int) { return fileDescriptorImage, []int{4} }
|
||||
|
||||
type CommitResponse struct {
|
||||
// name identifies the entity created as part of the image.
|
||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
|
||||
}
|
||||
|
||||
func (m *CommitResponse) Reset() { *m = CommitResponse{} }
|
||||
func (m *CommitResponse) String() string { return proto.CompactTextString(m) }
|
||||
func (*CommitResponse) ProtoMessage() {}
|
||||
func (*CommitResponse) Descriptor() ([]byte, []int) { return fileDescriptorImage, []int{5} }
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*PrepareRequest)(nil), "docker.containerkit.types.PrepareRequest")
|
||||
proto.RegisterType((*PrepareResponse)(nil), "docker.containerkit.types.PrepareResponse")
|
||||
proto.RegisterType((*CleanupRequest)(nil), "docker.containerkit.types.CleanupRequest")
|
||||
proto.RegisterType((*CleanupResponse)(nil), "docker.containerkit.types.CleanupResponse")
|
||||
proto.RegisterType((*CommitRequest)(nil), "docker.containerkit.types.CommitRequest")
|
||||
proto.RegisterType((*CommitResponse)(nil), "docker.containerkit.types.CommitResponse")
|
||||
}
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ context.Context
|
||||
var _ grpc.ClientConn
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the grpc package it is being compiled against.
|
||||
const _ = grpc.SupportPackageIsVersion2
|
||||
|
||||
// Client API for Images service
|
||||
|
||||
type ImagesClient interface {
|
||||
// Prepare declares that an image is required for use. A prepared image,
|
||||
// complete with a set of mounts to use for the image will be provided.
|
||||
Prepare(ctx context.Context, in *PrepareRequest, opts ...grpc.CallOption) (*PrepareResponse, error)
|
||||
// Cleanup instructs the images service to cleanup resources for the image.
|
||||
Cleanup(ctx context.Context, in *CleanupRequest, opts ...grpc.CallOption) (*CleanupResponse, error)
|
||||
// Commit
|
||||
Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error)
|
||||
}
|
||||
|
||||
type imagesClient struct {
|
||||
cc *grpc.ClientConn
|
||||
}
|
||||
|
||||
func NewImagesClient(cc *grpc.ClientConn) ImagesClient {
|
||||
return &imagesClient{cc}
|
||||
}
|
||||
|
||||
func (c *imagesClient) Prepare(ctx context.Context, in *PrepareRequest, opts ...grpc.CallOption) (*PrepareResponse, error) {
|
||||
out := new(PrepareResponse)
|
||||
err := grpc.Invoke(ctx, "/docker.containerkit.types.Images/Prepare", in, out, c.cc, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *imagesClient) Cleanup(ctx context.Context, in *CleanupRequest, opts ...grpc.CallOption) (*CleanupResponse, error) {
|
||||
out := new(CleanupResponse)
|
||||
err := grpc.Invoke(ctx, "/docker.containerkit.types.Images/Cleanup", in, out, c.cc, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *imagesClient) Commit(ctx context.Context, in *CommitRequest, opts ...grpc.CallOption) (*CommitResponse, error) {
|
||||
out := new(CommitResponse)
|
||||
err := grpc.Invoke(ctx, "/docker.containerkit.types.Images/Commit", in, out, c.cc, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// Server API for Images service
|
||||
|
||||
type ImagesServer interface {
|
||||
// Prepare declares that an image is required for use. A prepared image,
|
||||
// complete with a set of mounts to use for the image will be provided.
|
||||
Prepare(context.Context, *PrepareRequest) (*PrepareResponse, error)
|
||||
// Cleanup instructs the images service to cleanup resources for the image.
|
||||
Cleanup(context.Context, *CleanupRequest) (*CleanupResponse, error)
|
||||
// Commit
|
||||
Commit(context.Context, *CommitRequest) (*CommitResponse, error)
|
||||
}
|
||||
|
||||
func RegisterImagesServer(s *grpc.Server, srv ImagesServer) {
|
||||
s.RegisterService(&_Images_serviceDesc, srv)
|
||||
}
|
||||
|
||||
func _Images_Prepare_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(PrepareRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(ImagesServer).Prepare(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/docker.containerkit.types.Images/Prepare",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(ImagesServer).Prepare(ctx, req.(*PrepareRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Images_Cleanup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(CleanupRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(ImagesServer).Cleanup(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/docker.containerkit.types.Images/Cleanup",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(ImagesServer).Cleanup(ctx, req.(*CleanupRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _Images_Commit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(CommitRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(ImagesServer).Commit(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/docker.containerkit.types.Images/Commit",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(ImagesServer).Commit(ctx, req.(*CommitRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
var _Images_serviceDesc = grpc.ServiceDesc{
|
||||
ServiceName: "docker.containerkit.types.Images",
|
||||
HandlerType: (*ImagesServer)(nil),
|
||||
Methods: []grpc.MethodDesc{
|
||||
{
|
||||
MethodName: "Prepare",
|
||||
Handler: _Images_Prepare_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "Cleanup",
|
||||
Handler: _Images_Cleanup_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "Commit",
|
||||
Handler: _Images_Commit_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
}
|
||||
|
||||
var fileDescriptorImage = []byte{
|
||||
// 314 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x52, 0x4f, 0x6b, 0x3a, 0x31,
|
||||
0x14, 0x64, 0xf5, 0xc7, 0xca, 0xef, 0x49, 0x95, 0xe6, 0x64, 0xf7, 0x24, 0xdb, 0x1e, 0xb4, 0xd0,
|
||||
0x0d, 0xd8, 0x8b, 0xf4, 0xea, 0xa9, 0x94, 0x42, 0xf1, 0x5e, 0x30, 0xda, 0xd7, 0x35, 0x68, 0xfe,
|
||||
0x34, 0xc9, 0x1e, 0xfc, 0x4c, 0xfd, 0x92, 0x65, 0x93, 0xd4, 0x7f, 0xd0, 0xc5, 0xcb, 0xf2, 0x12,
|
||||
0x66, 0xe6, 0xcd, 0xcc, 0x06, 0xba, 0x5c, 0xb0, 0x12, 0x0b, 0x6d, 0x94, 0x53, 0xe4, 0xe6, 0x43,
|
||||
0xad, 0x36, 0x68, 0x8a, 0x95, 0x92, 0x8e, 0x71, 0x89, 0x66, 0xc3, 0x5d, 0xe1, 0x76, 0x1a, 0x6d,
|
||||
0xf6, 0x50, 0x72, 0xb7, 0xae, 0x96, 0xc5, 0x4a, 0x09, 0x5a, 0xaa, 0x52, 0x51, 0xcf, 0x58, 0x56,
|
||||
0x9f, 0xfe, 0xe4, 0x0f, 0x7e, 0x0a, 0x4a, 0xd9, 0xd3, 0x11, 0x3c, 0x88, 0xd2, 0x63, 0x51, 0xca,
|
||||
0x34, 0xa7, 0x5e, 0x98, 0x0a, 0x55, 0x49, 0x17, 0xbe, 0x81, 0x9b, 0x4f, 0xa1, 0xf7, 0x66, 0x50,
|
||||
0x33, 0x83, 0x73, 0xfc, 0xaa, 0xd0, 0x3a, 0x42, 0xe0, 0x9f, 0x66, 0x6e, 0x3d, 0x68, 0x0f, 0x93,
|
||||
0xd1, 0xff, 0xb9, 0x9f, 0xeb, 0x3b, 0xc9, 0x04, 0x0e, 0x5a, 0xe1, 0xae, 0x9e, 0xf3, 0x17, 0xe8,
|
||||
0xef, 0x99, 0x56, 0x2b, 0x69, 0x91, 0x4c, 0x21, 0xdd, 0xb2, 0x1d, 0x1a, 0x3b, 0x48, 0x86, 0xed,
|
||||
0x51, 0x77, 0x32, 0x2c, 0xfe, 0xcc, 0x58, 0xbc, 0xd6, 0x26, 0xe6, 0x11, 0x9f, 0xdf, 0x41, 0x6f,
|
||||
0xb6, 0x45, 0x26, 0x2b, 0x7d, 0x6e, 0x23, 0x39, 0xd8, 0xc8, 0xaf, 0xa1, 0xbf, 0x47, 0x85, 0x95,
|
||||
0xf9, 0x2d, 0x5c, 0xcd, 0x94, 0x10, 0xdc, 0x35, 0xf1, 0x6a, 0xf5, 0x08, 0x8a, 0x4e, 0x7f, 0x03,
|
||||
0x25, 0x87, 0x40, 0x93, 0xef, 0x16, 0xa4, 0xcf, 0xf5, 0x0f, 0xb2, 0x64, 0x01, 0x9d, 0x98, 0x8d,
|
||||
0x8c, 0x1b, 0x32, 0x9c, 0x36, 0x97, 0xdd, 0x5f, 0x02, 0x8d, 0x06, 0x16, 0xd0, 0x89, 0x51, 0x1a,
|
||||
0x37, 0x9c, 0x96, 0xd2, 0xb8, 0xe1, 0xac, 0x19, 0xf2, 0x0e, 0x69, 0x08, 0x4d, 0x46, 0x4d, 0xac,
|
||||
0xe3, 0xf2, 0xb2, 0xf1, 0x05, 0xc8, 0x20, 0xbf, 0x4c, 0xfd, 0xfb, 0x79, 0xfc, 0x09, 0x00, 0x00,
|
||||
0xff, 0xff, 0x28, 0x48, 0xab, 0xcd, 0xd4, 0x02, 0x00, 0x00,
|
||||
}
|
83
api/image/image.proto
Normal file
83
api/image/image.proto
Normal file
|
@ -0,0 +1,83 @@
|
|||
syntax = "proto3";
|
||||
|
||||
package docker.containerkit.types;
|
||||
|
||||
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
|
||||
import "github.com/docker/containerkit/api/types/mount/mount.proto";
|
||||
|
||||
// Images abstracts the graph driver and image store.
|
||||
//
|
||||
// The interface is to be able to request and manage images. The output,
|
||||
// provided as part of the Prepare step, is to expose a set of mounts that can
|
||||
// be used at container startup to run the image.
|
||||
service Images {
|
||||
// Prepare declares that an image is required for use. A prepared image,
|
||||
// complete with a set of mounts to use for the image will be provided.
|
||||
rpc Prepare(PrepareRequest) returns (PrepareResponse);
|
||||
|
||||
// Cleanup instructs the images service to cleanup resources for the image.
|
||||
rpc Cleanup(CleanupRequest) returns (CleanupResponse);
|
||||
|
||||
// Commit
|
||||
rpc Commit(CommitRequest) returns (CommitResponse);
|
||||
|
||||
// NOTE(stevvooe): Placeholders for other operations here. Consider
|
||||
// splitting this into a graphdriver like service (Prepare/Cleanup) and an
|
||||
// image store service.
|
||||
//
|
||||
// Really, we want to separate image identification from CAS
|
||||
// identification, so placing push/pull here may cause too much coupling.
|
||||
// It might better to be able to import the layers here in the same way the
|
||||
// graphdriver works, then only use the image metadata to maintain the link
|
||||
// here.
|
||||
//
|
||||
// Basically, we want to avoid the tight coupling present between the image
|
||||
// store and graphdriver in docker today.
|
||||
//
|
||||
// rpc Push(PushRequest) returns (stream PullRequest);
|
||||
// rpc Pull(PullRequest) returns (stream PullResponse);
|
||||
}
|
||||
|
||||
message PrepareRequest {
|
||||
// Path specifies the filesystem path to target for the image preparation.
|
||||
//
|
||||
// These will influence the values of "target" in the emitted mounts. It
|
||||
// must be unique per usage of the prepared mount and can only be prepared
|
||||
// again after a call to cleanup.
|
||||
string path = 3;
|
||||
|
||||
// name of the image to prepare.
|
||||
string name = 2;
|
||||
}
|
||||
|
||||
message PrepareResponse {
|
||||
// Layers provides a list of mounts to use with container creation. The
|
||||
// layers will be mounted, in order, assembling the root filesystem.
|
||||
//
|
||||
// Typically, these can be augmented with other mounts from the volume
|
||||
// service, tmpfs, application-specific bind mounts or even mounts from
|
||||
// other containers.
|
||||
repeated types.Mount layers = 1;
|
||||
|
||||
// TODO(stevvooe): It is unclear whether or not we should integrate image
|
||||
// metadata with this part of the service.
|
||||
}
|
||||
|
||||
message CleanupRequest {
|
||||
// Path cleans up the path used for the image.
|
||||
// ID identifies the prepared image to cleanup.
|
||||
string path = 1;
|
||||
}
|
||||
|
||||
message CleanupResponse { }
|
||||
|
||||
// CommitRequest provides argument for the Commit RPC.
|
||||
message CommitRequest {
|
||||
// Path to a prepared image to capture changes.
|
||||
string path = 1;
|
||||
}
|
||||
|
||||
message CommitResponse {
|
||||
// name identifies the entity created as part of the image.
|
||||
string name = 1;
|
||||
}
|
5
api/types/mount/gen.go
Normal file
5
api/types/mount/gen.go
Normal file
|
@ -0,0 +1,5 @@
|
|||
package mount
|
||||
|
||||
//go:generate protoc -I .:../../..:$GOPATH/src --gogo_out=plugins=grpc,import_path=github.com/docker/containerkit/api/types/mount:. mount.proto
|
||||
|
||||
//+++go:generate protoc -I .:../../..:$GOPATH/src --gogo_out=plugins=grpc,import_path=github.com/docker/containerkit/api/types/mount,Mgogoproto/gogo.proto=github.com/gogo/protobuf/gogoproto:. mount.proto
|
71
api/types/mount/mount.pb.go
Normal file
71
api/types/mount/mount.pb.go
Normal file
|
@ -0,0 +1,71 @@
|
|||
// Code generated by protoc-gen-gogo.
|
||||
// source: mount.proto
|
||||
// DO NOT EDIT!
|
||||
|
||||
/*
|
||||
Package mount is a generated protocol buffer package.
|
||||
|
||||
It is generated from these files:
|
||||
mount.proto
|
||||
|
||||
It has these top-level messages:
|
||||
Mount
|
||||
*/
|
||||
package mount
|
||||
|
||||
import proto "github.com/gogo/protobuf/proto"
|
||||
import fmt "fmt"
|
||||
import math "math"
|
||||
import _ "github.com/gogo/protobuf/gogoproto"
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
const _ = proto.GoGoProtoPackageIsVersion1
|
||||
|
||||
// Mount describes mounts for a container.
|
||||
//
|
||||
// This type is the lingua franca of ContainerKit. All services provide mounts
|
||||
// to be used with the container at creation time.
|
||||
//
|
||||
// The Mount type follows the structure of the mount syscall, including a type,
|
||||
// source, target and options.
|
||||
type Mount struct {
|
||||
// Type defines the nature of the mount.
|
||||
Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
|
||||
// Source specifies the name of the mount. Depending on mount type, this
|
||||
// may be a volume name or a host path, or even ignored.
|
||||
Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"`
|
||||
// Target path in container
|
||||
Target string `protobuf:"bytes,3,opt,name=target,proto3" json:"target,omitempty"`
|
||||
// Options specifies zero or more fstab style mount options.
|
||||
Options []string `protobuf:"bytes,4,rep,name=options" json:"options,omitempty"`
|
||||
}
|
||||
|
||||
func (m *Mount) Reset() { *m = Mount{} }
|
||||
func (m *Mount) String() string { return proto.CompactTextString(m) }
|
||||
func (*Mount) ProtoMessage() {}
|
||||
func (*Mount) Descriptor() ([]byte, []int) { return fileDescriptorMount, []int{0} }
|
||||
|
||||
func init() {
|
||||
proto.RegisterType((*Mount)(nil), "docker.containerkit.types.Mount")
|
||||
}
|
||||
|
||||
var fileDescriptorMount = []byte{
|
||||
// 163 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x34, 0x8d, 0xb1, 0x0e, 0x82, 0x30,
|
||||
0x10, 0x86, 0x83, 0x20, 0x86, 0xba, 0x75, 0x30, 0xd5, 0x89, 0x38, 0xb1, 0x58, 0x06, 0x9f, 0xc3,
|
||||
0x85, 0x37, 0x80, 0x7a, 0xd6, 0x86, 0xd0, 0x23, 0xe5, 0x3a, 0xf8, 0xf6, 0xa6, 0x57, 0xdd, 0xfe,
|
||||
0xef, 0x4b, 0xee, 0x3b, 0x71, 0x5c, 0x30, 0x7a, 0xd2, 0x6b, 0x40, 0x42, 0x79, 0x7e, 0xa2, 0x99,
|
||||
0x21, 0x68, 0x83, 0x9e, 0x46, 0xe7, 0x21, 0xcc, 0x8e, 0x34, 0x7d, 0x56, 0xd8, 0x2e, 0x37, 0xeb,
|
||||
0xe8, 0x1d, 0x27, 0x6d, 0x70, 0xe9, 0x2d, 0x5a, 0xec, 0xf9, 0x62, 0x8a, 0x2f, 0x26, 0x06, 0x5e,
|
||||
0xb9, 0x74, 0x05, 0xb1, 0x7f, 0xa4, 0xb0, 0x94, 0xa2, 0x4a, 0x01, 0x55, 0xb4, 0x45, 0xd7, 0x0c,
|
||||
0xbc, 0xe5, 0x49, 0xd4, 0x1b, 0xc6, 0x60, 0x40, 0xed, 0xd8, 0xfe, 0x28, 0x79, 0x1a, 0x83, 0x05,
|
||||
0x52, 0x65, 0xf6, 0x99, 0xa4, 0x12, 0x07, 0x5c, 0xc9, 0xa1, 0xdf, 0x54, 0xd5, 0x96, 0x5d, 0x33,
|
||||
0xfc, 0x71, 0xaa, 0xf9, 0xdb, 0xfd, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x20, 0x78, 0xd5, 0x59, 0xc6,
|
||||
0x00, 0x00, 0x00,
|
||||
}
|
27
api/types/mount/mount.proto
Normal file
27
api/types/mount/mount.proto
Normal file
|
@ -0,0 +1,27 @@
|
|||
syntax = "proto3";
|
||||
|
||||
package docker.containerkit.types;
|
||||
|
||||
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
|
||||
|
||||
// Mount describes mounts for a container.
|
||||
//
|
||||
// This type is the lingua franca of ContainerKit. All services provide mounts
|
||||
// to be used with the container at creation time.
|
||||
//
|
||||
// The Mount type follows the structure of the mount syscall, including a type,
|
||||
// source, target and options.
|
||||
message Mount {
|
||||
// Type defines the nature of the mount.
|
||||
string type = 1;
|
||||
|
||||
// Source specifies the name of the mount. Depending on mount type, this
|
||||
// may be a volume name or a host path, or even ignored.
|
||||
string source = 2;
|
||||
|
||||
// Target path in container
|
||||
string target = 3;
|
||||
|
||||
// Options specifies zero or more fstab style mount options.
|
||||
repeated string options = 4;
|
||||
}
|
2
api/types/types.go
Normal file
2
api/types/types.go
Normal file
|
@ -0,0 +1,2 @@
|
|||
// Package types provides several types common to grpc services.
|
||||
package types
|
Loading…
Add table
Reference in a new issue