From a624b1d0650eaeb5a5efd2f9ea88de73c9910973 Mon Sep 17 00:00:00 2001 From: Starnop Date: Thu, 21 Jun 2018 10:38:18 +0800 Subject: [PATCH] extend cri apis for special needs Signed-off-by: Starnop --- .../runtime => cri/apis/v1alpha1}/BUILD | 0 .../runtime => cri/apis/v1alpha1}/api.pb.go | 3434 +++++++++++++---- cri/apis/v1alpha1/api.proto | 1209 ++++++ .../apis/v1alpha1}/constants.go | 2 +- .../cri/runtime => cri/apis}/v1alpha2/BUILD | 0 .../runtime => cri/apis}/v1alpha2/api.pb.go | 3144 +++++++++++---- cri/apis/v1alpha2/api.proto | 1281 ++++++ .../apis}/v1alpha2/constants.go | 0 cri/v1alpha1/cri.go | 22 +- cri/v1alpha1/cri_network.go | 2 +- cri/v1alpha1/cri_types.go | 2 +- cri/v1alpha1/cri_utils.go | 138 +- cri/v1alpha1/cri_utils_test.go | 287 +- cri/v1alpha1/cri_wrapper.go | 3 +- cri/v1alpha1/server.go | 2 +- cri/v1alpha1/service/cri.go | 2 +- cri/v1alpha2/cri.go | 22 +- cri/v1alpha2/cri_network.go | 2 +- cri/v1alpha2/cri_types.go | 2 +- cri/v1alpha2/cri_utils.go | 138 +- cri/v1alpha2/cri_utils_test.go | 287 +- cri/v1alpha2/cri_wrapper.go | 3 +- cri/v1alpha2/server.go | 2 +- cri/v1alpha2/service/cri.go | 2 +- daemon/containerio/cri_log_file.go | 2 +- hack/boilerplate/boilerplate.go.txt | 15 + hack/protoc.sh | 46 + vendor/k8s.io/kubernetes/LICENSE | 202 - .../apis/cri/runtime/v1alpha2/api.proto | 1227 ------ .../apis/cri/v1alpha1/runtime/api.proto | 1155 ------ vendor/vendor.json | 12 - 31 files changed, 8580 insertions(+), 4065 deletions(-) rename {vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime => cri/apis/v1alpha1}/BUILD (100%) rename {vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime => cri/apis/v1alpha1}/api.pb.go (87%) create mode 100644 cri/apis/v1alpha1/api.proto rename {vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime => cri/apis/v1alpha1}/constants.go (99%) rename {vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime => cri/apis}/v1alpha2/BUILD (100%) rename {vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime => cri/apis}/v1alpha2/api.pb.go (89%) create mode 100644 cri/apis/v1alpha2/api.proto rename {vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime => cri/apis}/v1alpha2/constants.go (100%) create mode 100644 hack/boilerplate/boilerplate.go.txt create mode 100644 hack/protoc.sh delete mode 100644 vendor/k8s.io/kubernetes/LICENSE delete mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto delete mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.proto diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/BUILD b/cri/apis/v1alpha1/BUILD similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/BUILD rename to cri/apis/v1alpha1/BUILD diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.pb.go b/cri/apis/v1alpha1/api.pb.go similarity index 87% rename from vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.pb.go rename to cri/apis/v1alpha1/api.pb.go index f0b41f00a5..70a75c319f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.pb.go +++ b/cri/apis/v1alpha1/api.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,13 +13,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ - // Code generated by protoc-gen-gogo. // source: api.proto // DO NOT EDIT! /* - Package runtime is a generated protocol buffer package. + Package v1alpha1 is a generated protocol buffer package. It is generated from these files: api.proto @@ -56,6 +55,9 @@ limitations under the License. ImageSpec KeyValue LinuxContainerResources + WeightDevice + ThrottleDevice + Ulimit SELinuxOption Capability LinuxContainerSecurityContext @@ -78,6 +80,7 @@ limitations under the License. ListContainersResponse ContainerStatusRequest ContainerStatus + Volume ContainerStatusResponse UpdateContainerResourcesRequest UpdateContainerResourcesResponse @@ -123,7 +126,7 @@ limitations under the License. CpuUsage MemoryUsage */ -package runtime +package v1alpha1 import proto "github.com/gogo/protobuf/proto" import fmt "fmt" @@ -349,7 +352,7 @@ func (m *DNSConfig) GetOptions() []string { // PortMapping specifies the port mapping configurations of a sandbox. type PortMapping struct { // Protocol of the port mapping. - Protocol Protocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=runtime.Protocol" json:"protocol,omitempty"` + Protocol Protocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=v1alpha1.Protocol" json:"protocol,omitempty"` // Port number within the container. Default: 0 (not specified). ContainerPort int32 `protobuf:"varint,2,opt,name=container_port,json=containerPort,proto3" json:"container_port,omitempty"` // Port number on the host. Default: 0 (not specified). @@ -401,7 +404,7 @@ type Mount struct { // If set, the mount needs SELinux relabeling. SelinuxRelabel bool `protobuf:"varint,4,opt,name=selinux_relabel,json=selinuxRelabel,proto3" json:"selinux_relabel,omitempty"` // Requested propagation mode. - Propagation MountPropagation `protobuf:"varint,5,opt,name=propagation,proto3,enum=runtime.MountPropagation" json:"propagation,omitempty"` + Propagation MountPropagation `protobuf:"varint,5,opt,name=propagation,proto3,enum=v1alpha1.MountPropagation" json:"propagation,omitempty"` } func (m *Mount) Reset() { *m = Mount{} } @@ -940,7 +943,7 @@ type PodSandboxStatus struct { // Metadata of the sandbox. Metadata *PodSandboxMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` // State of the sandbox. - State PodSandboxState `protobuf:"varint,3,opt,name=state,proto3,enum=runtime.PodSandboxState" json:"state,omitempty"` + State PodSandboxState `protobuf:"varint,3,opt,name=state,proto3,enum=v1alpha1.PodSandboxState" json:"state,omitempty"` // Creation timestamp of the sandbox in nanoseconds. Must be > 0. CreatedAt int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Network contains network status if network is handled by the runtime. @@ -1047,7 +1050,7 @@ func (m *PodSandboxStatusResponse) GetInfo() map[string]string { // PodSandboxStateValue is the wrapper of PodSandboxState. type PodSandboxStateValue struct { // State of the sandbox. - State PodSandboxState `protobuf:"varint,1,opt,name=state,proto3,enum=runtime.PodSandboxState" json:"state,omitempty"` + State PodSandboxState `protobuf:"varint,1,opt,name=state,proto3,enum=v1alpha1.PodSandboxState" json:"state,omitempty"` } func (m *PodSandboxStateValue) Reset() { *m = PodSandboxStateValue{} } @@ -1122,7 +1125,7 @@ type PodSandbox struct { // Metadata of the PodSandbox. Metadata *PodSandboxMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` // State of the PodSandbox. - State PodSandboxState `protobuf:"varint,3,opt,name=state,proto3,enum=runtime.PodSandboxState" json:"state,omitempty"` + State PodSandboxState `protobuf:"varint,3,opt,name=state,proto3,enum=v1alpha1.PodSandboxState" json:"state,omitempty"` // Creation timestamps of the PodSandbox in nanoseconds. Must be > 0. CreatedAt int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Labels of the PodSandbox. @@ -1256,6 +1259,23 @@ type LinuxContainerResources struct { CpusetCpus string `protobuf:"bytes,6,opt,name=cpuset_cpus,json=cpusetCpus,proto3" json:"cpuset_cpus,omitempty"` // CpusetMems constrains the allowed set of memory nodes. Default: "" (not specified). CpusetMems string `protobuf:"bytes,7,opt,name=cpuset_mems,json=cpusetMems,proto3" json:"cpuset_mems,omitempty"` + // DiskQuota constrains the disk + DiskQuota map[string]string `protobuf:"bytes,100,rep,name=disk_quota,json=diskQuota" json:"disk_quota,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Block IO weight (relative weight vs. other containers) + BlkioWeight uint32 `protobuf:"varint,101,opt,name=blkio_weight,json=blkioWeight,proto3" json:"blkio_weight,omitempty"` + BlkioWeightDevice []*WeightDevice `protobuf:"bytes,102,rep,name=blkio_weight_device,json=blkioWeightDevice" json:"blkio_weight_device,omitempty"` + BlkioDeviceReadBps []*ThrottleDevice `protobuf:"bytes,103,rep,name=blkio_device_read_bps,json=blkioDeviceReadBps" json:"blkio_device_read_bps,omitempty"` + BlkioDeviceWriteBps []*ThrottleDevice `protobuf:"bytes,104,rep,name=blkio_device_write_bps,json=blkioDeviceWriteBps" json:"blkio_device_write_bps,omitempty"` + BlkioDeviceRead_IOps []*ThrottleDevice `protobuf:"bytes,105,rep,name=blkio_device_read_IOps,json=blkioDeviceReadIOps" json:"blkio_device_read_IOps,omitempty"` + BlkioDeviceWrite_IOps []*ThrottleDevice `protobuf:"bytes,106,rep,name=blkio_device_write_IOps,json=blkioDeviceWriteIOps" json:"blkio_device_write_IOps,omitempty"` + // Kernel memory limit (in bytes) + KernelMemory int64 `protobuf:"varint,107,opt,name=kernel_memory,json=kernelMemory,proto3" json:"kernel_memory,omitempty"` + // Memory soft limit (in bytes) + MemoryReservation int64 `protobuf:"varint,108,opt,name=memory_reservation,json=memoryReservation,proto3" json:"memory_reservation,omitempty"` + // Tuning container memory swappiness behaviour + MemorySwappiness *Int64Value `protobuf:"bytes,109,opt,name=memory_swappiness,json=memorySwappiness" json:"memory_swappiness,omitempty"` + // List of ulimits to be set in the container + Ulimits []*Ulimit `protobuf:"bytes,110,rep,name=ulimits" json:"ulimits,omitempty"` } func (m *LinuxContainerResources) Reset() { *m = LinuxContainerResources{} } @@ -1311,6 +1331,170 @@ func (m *LinuxContainerResources) GetCpusetMems() string { return "" } +func (m *LinuxContainerResources) GetDiskQuota() map[string]string { + if m != nil { + return m.DiskQuota + } + return nil +} + +func (m *LinuxContainerResources) GetBlkioWeight() uint32 { + if m != nil { + return m.BlkioWeight + } + return 0 +} + +func (m *LinuxContainerResources) GetBlkioWeightDevice() []*WeightDevice { + if m != nil { + return m.BlkioWeightDevice + } + return nil +} + +func (m *LinuxContainerResources) GetBlkioDeviceReadBps() []*ThrottleDevice { + if m != nil { + return m.BlkioDeviceReadBps + } + return nil +} + +func (m *LinuxContainerResources) GetBlkioDeviceWriteBps() []*ThrottleDevice { + if m != nil { + return m.BlkioDeviceWriteBps + } + return nil +} + +func (m *LinuxContainerResources) GetBlkioDeviceRead_IOps() []*ThrottleDevice { + if m != nil { + return m.BlkioDeviceRead_IOps + } + return nil +} + +func (m *LinuxContainerResources) GetBlkioDeviceWrite_IOps() []*ThrottleDevice { + if m != nil { + return m.BlkioDeviceWrite_IOps + } + return nil +} + +func (m *LinuxContainerResources) GetKernelMemory() int64 { + if m != nil { + return m.KernelMemory + } + return 0 +} + +func (m *LinuxContainerResources) GetMemoryReservation() int64 { + if m != nil { + return m.MemoryReservation + } + return 0 +} + +func (m *LinuxContainerResources) GetMemorySwappiness() *Int64Value { + if m != nil { + return m.MemorySwappiness + } + return nil +} + +func (m *LinuxContainerResources) GetUlimits() []*Ulimit { + if m != nil { + return m.Ulimits + } + return nil +} + +// WeightDevice is a structure that holds device:weight pair +type WeightDevice struct { + // Path of weightdevice. + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + // Weight of weightdevice. + Weight uint32 `protobuf:"varint,2,opt,name=Weight,proto3" json:"Weight,omitempty"` +} + +func (m *WeightDevice) Reset() { *m = WeightDevice{} } +func (*WeightDevice) ProtoMessage() {} +func (*WeightDevice) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{31} } + +func (m *WeightDevice) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *WeightDevice) GetWeight() uint32 { + if m != nil { + return m.Weight + } + return 0 +} + +// ThrottleDevice is a structure that holds device:rate_per_second pair +type ThrottleDevice struct { + // Path of throttledevice. + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + // Rate of throttledevice. + Rate uint64 `protobuf:"varint,2,opt,name=rate,proto3" json:"rate,omitempty"` +} + +func (m *ThrottleDevice) Reset() { *m = ThrottleDevice{} } +func (*ThrottleDevice) ProtoMessage() {} +func (*ThrottleDevice) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{32} } + +func (m *ThrottleDevice) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *ThrottleDevice) GetRate() uint64 { + if m != nil { + return m.Rate + } + return 0 +} + +// Ulimit is a human friendly version of Rlimit. +type Ulimit struct { + // Name of ulimit. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Hard limit of ulimit. + Hard int64 `protobuf:"varint,2,opt,name=hard,proto3" json:"hard,omitempty"` + // Soft limit of Ulimit. + Soft int64 `protobuf:"varint,3,opt,name=soft,proto3" json:"soft,omitempty"` +} + +func (m *Ulimit) Reset() { *m = Ulimit{} } +func (*Ulimit) ProtoMessage() {} +func (*Ulimit) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{33} } + +func (m *Ulimit) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Ulimit) GetHard() int64 { + if m != nil { + return m.Hard + } + return 0 +} + +func (m *Ulimit) GetSoft() int64 { + if m != nil { + return m.Soft + } + return 0 +} + // SELinuxOption are the labels to be applied to the container. type SELinuxOption struct { User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` @@ -1321,7 +1505,7 @@ type SELinuxOption struct { func (m *SELinuxOption) Reset() { *m = SELinuxOption{} } func (*SELinuxOption) ProtoMessage() {} -func (*SELinuxOption) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{31} } +func (*SELinuxOption) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{34} } func (m *SELinuxOption) GetUser() string { if m != nil { @@ -1361,7 +1545,7 @@ type Capability struct { func (m *Capability) Reset() { *m = Capability{} } func (*Capability) ProtoMessage() {} -func (*Capability) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{32} } +func (*Capability) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{35} } func (m *Capability) GetAddCapabilities() []string { if m != nil { @@ -1438,7 +1622,7 @@ type LinuxContainerSecurityContext struct { func (m *LinuxContainerSecurityContext) Reset() { *m = LinuxContainerSecurityContext{} } func (*LinuxContainerSecurityContext) ProtoMessage() {} func (*LinuxContainerSecurityContext) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{33} + return fileDescriptorApi, []int{36} } func (m *LinuxContainerSecurityContext) GetCapabilities() *Capability { @@ -1529,7 +1713,7 @@ type LinuxContainerConfig struct { func (m *LinuxContainerConfig) Reset() { *m = LinuxContainerConfig{} } func (*LinuxContainerConfig) ProtoMessage() {} -func (*LinuxContainerConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{34} } +func (*LinuxContainerConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{37} } func (m *LinuxContainerConfig) GetResources() *LinuxContainerResources { if m != nil { @@ -1559,7 +1743,7 @@ type ContainerMetadata struct { func (m *ContainerMetadata) Reset() { *m = ContainerMetadata{} } func (*ContainerMetadata) ProtoMessage() {} -func (*ContainerMetadata) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{35} } +func (*ContainerMetadata) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{38} } func (m *ContainerMetadata) GetName() string { if m != nil { @@ -1590,7 +1774,7 @@ type Device struct { func (m *Device) Reset() { *m = Device{} } func (*Device) ProtoMessage() {} -func (*Device) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{36} } +func (*Device) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{39} } func (m *Device) GetContainerPath() string { if m != nil { @@ -1673,11 +1857,13 @@ type ContainerConfig struct { Tty bool `protobuf:"varint,14,opt,name=tty,proto3" json:"tty,omitempty"` // Configuration specific to Linux containers. Linux *LinuxContainerConfig `protobuf:"bytes,15,opt,name=linux" json:"linux,omitempty"` + // NetPriority of the container + NetPriority int64 `protobuf:"varint,100,opt,name=net_priority,json=netPriority,proto3" json:"net_priority,omitempty"` } func (m *ContainerConfig) Reset() { *m = ContainerConfig{} } func (*ContainerConfig) ProtoMessage() {} -func (*ContainerConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{37} } +func (*ContainerConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{40} } func (m *ContainerConfig) GetMetadata() *ContainerMetadata { if m != nil { @@ -1784,6 +1970,13 @@ func (m *ContainerConfig) GetLinux() *LinuxContainerConfig { return nil } +func (m *ContainerConfig) GetNetPriority() int64 { + if m != nil { + return m.NetPriority + } + return 0 +} + type CreateContainerRequest struct { // ID of the PodSandbox in which the container should be created. PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` @@ -1798,7 +1991,7 @@ type CreateContainerRequest struct { func (m *CreateContainerRequest) Reset() { *m = CreateContainerRequest{} } func (*CreateContainerRequest) ProtoMessage() {} -func (*CreateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{38} } +func (*CreateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{41} } func (m *CreateContainerRequest) GetPodSandboxId() string { if m != nil { @@ -1828,7 +2021,7 @@ type CreateContainerResponse struct { func (m *CreateContainerResponse) Reset() { *m = CreateContainerResponse{} } func (*CreateContainerResponse) ProtoMessage() {} -func (*CreateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{39} } +func (*CreateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{42} } func (m *CreateContainerResponse) GetContainerId() string { if m != nil { @@ -1844,7 +2037,7 @@ type StartContainerRequest struct { func (m *StartContainerRequest) Reset() { *m = StartContainerRequest{} } func (*StartContainerRequest) ProtoMessage() {} -func (*StartContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{40} } +func (*StartContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{43} } func (m *StartContainerRequest) GetContainerId() string { if m != nil { @@ -1858,7 +2051,7 @@ type StartContainerResponse struct { func (m *StartContainerResponse) Reset() { *m = StartContainerResponse{} } func (*StartContainerResponse) ProtoMessage() {} -func (*StartContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{41} } +func (*StartContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{44} } type StopContainerRequest struct { // ID of the container to stop. @@ -1870,7 +2063,7 @@ type StopContainerRequest struct { func (m *StopContainerRequest) Reset() { *m = StopContainerRequest{} } func (*StopContainerRequest) ProtoMessage() {} -func (*StopContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{42} } +func (*StopContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{45} } func (m *StopContainerRequest) GetContainerId() string { if m != nil { @@ -1891,7 +2084,7 @@ type StopContainerResponse struct { func (m *StopContainerResponse) Reset() { *m = StopContainerResponse{} } func (*StopContainerResponse) ProtoMessage() {} -func (*StopContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{43} } +func (*StopContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{46} } type RemoveContainerRequest struct { // ID of the container to remove. @@ -1900,7 +2093,7 @@ type RemoveContainerRequest struct { func (m *RemoveContainerRequest) Reset() { *m = RemoveContainerRequest{} } func (*RemoveContainerRequest) ProtoMessage() {} -func (*RemoveContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{44} } +func (*RemoveContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{47} } func (m *RemoveContainerRequest) GetContainerId() string { if m != nil { @@ -1914,17 +2107,17 @@ type RemoveContainerResponse struct { func (m *RemoveContainerResponse) Reset() { *m = RemoveContainerResponse{} } func (*RemoveContainerResponse) ProtoMessage() {} -func (*RemoveContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{45} } +func (*RemoveContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{48} } // ContainerStateValue is the wrapper of ContainerState. type ContainerStateValue struct { // State of the container. - State ContainerState `protobuf:"varint,1,opt,name=state,proto3,enum=runtime.ContainerState" json:"state,omitempty"` + State ContainerState `protobuf:"varint,1,opt,name=state,proto3,enum=v1alpha1.ContainerState" json:"state,omitempty"` } func (m *ContainerStateValue) Reset() { *m = ContainerStateValue{} } func (*ContainerStateValue) ProtoMessage() {} -func (*ContainerStateValue) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{46} } +func (*ContainerStateValue) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{49} } func (m *ContainerStateValue) GetState() ContainerState { if m != nil { @@ -1950,7 +2143,7 @@ type ContainerFilter struct { func (m *ContainerFilter) Reset() { *m = ContainerFilter{} } func (*ContainerFilter) ProtoMessage() {} -func (*ContainerFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{47} } +func (*ContainerFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{50} } func (m *ContainerFilter) GetId() string { if m != nil { @@ -1986,7 +2179,7 @@ type ListContainersRequest struct { func (m *ListContainersRequest) Reset() { *m = ListContainersRequest{} } func (*ListContainersRequest) ProtoMessage() {} -func (*ListContainersRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{48} } +func (*ListContainersRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{51} } func (m *ListContainersRequest) GetFilter() *ContainerFilter { if m != nil { @@ -2011,7 +2204,7 @@ type Container struct { // image ID. ImageRef string `protobuf:"bytes,5,opt,name=image_ref,json=imageRef,proto3" json:"image_ref,omitempty"` // State of the container. - State ContainerState `protobuf:"varint,6,opt,name=state,proto3,enum=runtime.ContainerState" json:"state,omitempty"` + State ContainerState `protobuf:"varint,6,opt,name=state,proto3,enum=v1alpha1.ContainerState" json:"state,omitempty"` // Creation time of the container in nanoseconds. CreatedAt int64 `protobuf:"varint,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Key-value pairs that may be used to scope and select individual resources. @@ -2025,7 +2218,7 @@ type Container struct { func (m *Container) Reset() { *m = Container{} } func (*Container) ProtoMessage() {} -func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{49} } +func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{52} } func (m *Container) GetId() string { if m != nil { @@ -2097,7 +2290,7 @@ type ListContainersResponse struct { func (m *ListContainersResponse) Reset() { *m = ListContainersResponse{} } func (*ListContainersResponse) ProtoMessage() {} -func (*ListContainersResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{50} } +func (*ListContainersResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{53} } func (m *ListContainersResponse) GetContainers() []*Container { if m != nil { @@ -2115,7 +2308,7 @@ type ContainerStatusRequest struct { func (m *ContainerStatusRequest) Reset() { *m = ContainerStatusRequest{} } func (*ContainerStatusRequest) ProtoMessage() {} -func (*ContainerStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{51} } +func (*ContainerStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{54} } func (m *ContainerStatusRequest) GetContainerId() string { if m != nil { @@ -2138,7 +2331,7 @@ type ContainerStatus struct { // Metadata of the container. Metadata *ContainerMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` // Status of the container. - State ContainerState `protobuf:"varint,3,opt,name=state,proto3,enum=runtime.ContainerState" json:"state,omitempty"` + State ContainerState `protobuf:"varint,3,opt,name=state,proto3,enum=v1alpha1.ContainerState" json:"state,omitempty"` // Creation time of the container in nanoseconds. CreatedAt int64 `protobuf:"varint,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Start time of the container in nanoseconds. Default: 0 (not specified). @@ -2168,11 +2361,15 @@ type ContainerStatus struct { Mounts []*Mount `protobuf:"bytes,14,rep,name=mounts" json:"mounts,omitempty"` // Log path of container. LogPath string `protobuf:"bytes,15,opt,name=log_path,json=logPath,proto3" json:"log_path,omitempty"` + // Volumes of container + Volumes map[string]*Volume `protobuf:"bytes,100,rep,name=volumes" json:"volumes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + // Resources specification for the container + Resources *LinuxContainerResources `protobuf:"bytes,101,opt,name=resources" json:"resources,omitempty"` } func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } func (*ContainerStatus) ProtoMessage() {} -func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{52} } +func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{55} } func (m *ContainerStatus) GetId() string { if m != nil { @@ -2279,6 +2476,27 @@ func (m *ContainerStatus) GetLogPath() string { return "" } +func (m *ContainerStatus) GetVolumes() map[string]*Volume { + if m != nil { + return m.Volumes + } + return nil +} + +func (m *ContainerStatus) GetResources() *LinuxContainerResources { + if m != nil { + return m.Resources + } + return nil +} + +type Volume struct { +} + +func (m *Volume) Reset() { *m = Volume{} } +func (*Volume) ProtoMessage() {} +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{56} } + type ContainerStatusResponse struct { // Status of the container. Status *ContainerStatus `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` @@ -2291,7 +2509,7 @@ type ContainerStatusResponse struct { func (m *ContainerStatusResponse) Reset() { *m = ContainerStatusResponse{} } func (*ContainerStatusResponse) ProtoMessage() {} -func (*ContainerStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{53} } +func (*ContainerStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{57} } func (m *ContainerStatusResponse) GetStatus() *ContainerStatus { if m != nil { @@ -2317,7 +2535,7 @@ type UpdateContainerResourcesRequest struct { func (m *UpdateContainerResourcesRequest) Reset() { *m = UpdateContainerResourcesRequest{} } func (*UpdateContainerResourcesRequest) ProtoMessage() {} func (*UpdateContainerResourcesRequest) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{54} + return fileDescriptorApi, []int{58} } func (m *UpdateContainerResourcesRequest) GetContainerId() string { @@ -2340,7 +2558,7 @@ type UpdateContainerResourcesResponse struct { func (m *UpdateContainerResourcesResponse) Reset() { *m = UpdateContainerResourcesResponse{} } func (*UpdateContainerResourcesResponse) ProtoMessage() {} func (*UpdateContainerResourcesResponse) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{55} + return fileDescriptorApi, []int{59} } type ExecSyncRequest struct { @@ -2354,7 +2572,7 @@ type ExecSyncRequest struct { func (m *ExecSyncRequest) Reset() { *m = ExecSyncRequest{} } func (*ExecSyncRequest) ProtoMessage() {} -func (*ExecSyncRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{56} } +func (*ExecSyncRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{60} } func (m *ExecSyncRequest) GetContainerId() string { if m != nil { @@ -2388,7 +2606,7 @@ type ExecSyncResponse struct { func (m *ExecSyncResponse) Reset() { *m = ExecSyncResponse{} } func (*ExecSyncResponse) ProtoMessage() {} -func (*ExecSyncResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{57} } +func (*ExecSyncResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{61} } func (m *ExecSyncResponse) GetStdout() []byte { if m != nil { @@ -2434,7 +2652,7 @@ type ExecRequest struct { func (m *ExecRequest) Reset() { *m = ExecRequest{} } func (*ExecRequest) ProtoMessage() {} -func (*ExecRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{58} } +func (*ExecRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{62} } func (m *ExecRequest) GetContainerId() string { if m != nil { @@ -2485,7 +2703,7 @@ type ExecResponse struct { func (m *ExecResponse) Reset() { *m = ExecResponse{} } func (*ExecResponse) ProtoMessage() {} -func (*ExecResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{59} } +func (*ExecResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{63} } func (m *ExecResponse) GetUrl() string { if m != nil { @@ -2516,7 +2734,7 @@ type AttachRequest struct { func (m *AttachRequest) Reset() { *m = AttachRequest{} } func (*AttachRequest) ProtoMessage() {} -func (*AttachRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{60} } +func (*AttachRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{64} } func (m *AttachRequest) GetContainerId() string { if m != nil { @@ -2560,7 +2778,7 @@ type AttachResponse struct { func (m *AttachResponse) Reset() { *m = AttachResponse{} } func (*AttachResponse) ProtoMessage() {} -func (*AttachResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{61} } +func (*AttachResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{65} } func (m *AttachResponse) GetUrl() string { if m != nil { @@ -2578,7 +2796,7 @@ type PortForwardRequest struct { func (m *PortForwardRequest) Reset() { *m = PortForwardRequest{} } func (*PortForwardRequest) ProtoMessage() {} -func (*PortForwardRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{62} } +func (*PortForwardRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66} } func (m *PortForwardRequest) GetPodSandboxId() string { if m != nil { @@ -2601,7 +2819,7 @@ type PortForwardResponse struct { func (m *PortForwardResponse) Reset() { *m = PortForwardResponse{} } func (*PortForwardResponse) ProtoMessage() {} -func (*PortForwardResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{63} } +func (*PortForwardResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{67} } func (m *PortForwardResponse) GetUrl() string { if m != nil { @@ -2617,7 +2835,7 @@ type ImageFilter struct { func (m *ImageFilter) Reset() { *m = ImageFilter{} } func (*ImageFilter) ProtoMessage() {} -func (*ImageFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{64} } +func (*ImageFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68} } func (m *ImageFilter) GetImage() *ImageSpec { if m != nil { @@ -2633,7 +2851,7 @@ type ListImagesRequest struct { func (m *ListImagesRequest) Reset() { *m = ListImagesRequest{} } func (*ListImagesRequest) ProtoMessage() {} -func (*ListImagesRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{65} } +func (*ListImagesRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{69} } func (m *ListImagesRequest) GetFilter() *ImageFilter { if m != nil { @@ -2659,11 +2877,13 @@ type Image struct { // User name that will run the command(s). This is used if UID is not set // and no user is specified when creating container. Username string `protobuf:"bytes,6,opt,name=username,proto3" json:"username,omitempty"` + // Volumes of image + Volumes map[string]*Volume `protobuf:"bytes,100,rep,name=volumes" json:"volumes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` } func (m *Image) Reset() { *m = Image{} } func (*Image) ProtoMessage() {} -func (*Image) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66} } +func (*Image) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{70} } func (m *Image) GetId() string { if m != nil { @@ -2707,6 +2927,13 @@ func (m *Image) GetUsername() string { return "" } +func (m *Image) GetVolumes() map[string]*Volume { + if m != nil { + return m.Volumes + } + return nil +} + type ListImagesResponse struct { // List of images. Images []*Image `protobuf:"bytes,1,rep,name=images" json:"images,omitempty"` @@ -2714,7 +2941,7 @@ type ListImagesResponse struct { func (m *ListImagesResponse) Reset() { *m = ListImagesResponse{} } func (*ListImagesResponse) ProtoMessage() {} -func (*ListImagesResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{67} } +func (*ListImagesResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{71} } func (m *ListImagesResponse) GetImages() []*Image { if m != nil { @@ -2732,7 +2959,7 @@ type ImageStatusRequest struct { func (m *ImageStatusRequest) Reset() { *m = ImageStatusRequest{} } func (*ImageStatusRequest) ProtoMessage() {} -func (*ImageStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68} } +func (*ImageStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72} } func (m *ImageStatusRequest) GetImage() *ImageSpec { if m != nil { @@ -2760,7 +2987,7 @@ type ImageStatusResponse struct { func (m *ImageStatusResponse) Reset() { *m = ImageStatusResponse{} } func (*ImageStatusResponse) ProtoMessage() {} -func (*ImageStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{69} } +func (*ImageStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73} } func (m *ImageStatusResponse) GetImage() *Image { if m != nil { @@ -2791,7 +3018,7 @@ type AuthConfig struct { func (m *AuthConfig) Reset() { *m = AuthConfig{} } func (*AuthConfig) ProtoMessage() {} -func (*AuthConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{70} } +func (*AuthConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74} } func (m *AuthConfig) GetUsername() string { if m != nil { @@ -2846,7 +3073,7 @@ type PullImageRequest struct { func (m *PullImageRequest) Reset() { *m = PullImageRequest{} } func (*PullImageRequest) ProtoMessage() {} -func (*PullImageRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{71} } +func (*PullImageRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{75} } func (m *PullImageRequest) GetImage() *ImageSpec { if m != nil { @@ -2877,7 +3104,7 @@ type PullImageResponse struct { func (m *PullImageResponse) Reset() { *m = PullImageResponse{} } func (*PullImageResponse) ProtoMessage() {} -func (*PullImageResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72} } +func (*PullImageResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{76} } func (m *PullImageResponse) GetImageRef() string { if m != nil { @@ -2893,7 +3120,7 @@ type RemoveImageRequest struct { func (m *RemoveImageRequest) Reset() { *m = RemoveImageRequest{} } func (*RemoveImageRequest) ProtoMessage() {} -func (*RemoveImageRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73} } +func (*RemoveImageRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{77} } func (m *RemoveImageRequest) GetImage() *ImageSpec { if m != nil { @@ -2907,7 +3134,7 @@ type RemoveImageResponse struct { func (m *RemoveImageResponse) Reset() { *m = RemoveImageResponse{} } func (*RemoveImageResponse) ProtoMessage() {} -func (*RemoveImageResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74} } +func (*RemoveImageResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{78} } type NetworkConfig struct { // CIDR to use for pod IP addresses. @@ -2916,7 +3143,7 @@ type NetworkConfig struct { func (m *NetworkConfig) Reset() { *m = NetworkConfig{} } func (*NetworkConfig) ProtoMessage() {} -func (*NetworkConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{75} } +func (*NetworkConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{79} } func (m *NetworkConfig) GetPodCidr() string { if m != nil { @@ -2931,7 +3158,7 @@ type RuntimeConfig struct { func (m *RuntimeConfig) Reset() { *m = RuntimeConfig{} } func (*RuntimeConfig) ProtoMessage() {} -func (*RuntimeConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{76} } +func (*RuntimeConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{80} } func (m *RuntimeConfig) GetNetworkConfig() *NetworkConfig { if m != nil { @@ -2946,7 +3173,7 @@ type UpdateRuntimeConfigRequest struct { func (m *UpdateRuntimeConfigRequest) Reset() { *m = UpdateRuntimeConfigRequest{} } func (*UpdateRuntimeConfigRequest) ProtoMessage() {} -func (*UpdateRuntimeConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{77} } +func (*UpdateRuntimeConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{81} } func (m *UpdateRuntimeConfigRequest) GetRuntimeConfig() *RuntimeConfig { if m != nil { @@ -2960,7 +3187,7 @@ type UpdateRuntimeConfigResponse struct { func (m *UpdateRuntimeConfigResponse) Reset() { *m = UpdateRuntimeConfigResponse{} } func (*UpdateRuntimeConfigResponse) ProtoMessage() {} -func (*UpdateRuntimeConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{78} } +func (*UpdateRuntimeConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{82} } // RuntimeCondition contains condition information for the runtime. // There are 2 kinds of runtime conditions: @@ -2988,7 +3215,7 @@ type RuntimeCondition struct { func (m *RuntimeCondition) Reset() { *m = RuntimeCondition{} } func (*RuntimeCondition) ProtoMessage() {} -func (*RuntimeCondition) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{79} } +func (*RuntimeCondition) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{83} } func (m *RuntimeCondition) GetType() string { if m != nil { @@ -3026,7 +3253,7 @@ type RuntimeStatus struct { func (m *RuntimeStatus) Reset() { *m = RuntimeStatus{} } func (*RuntimeStatus) ProtoMessage() {} -func (*RuntimeStatus) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{80} } +func (*RuntimeStatus) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{84} } func (m *RuntimeStatus) GetConditions() []*RuntimeCondition { if m != nil { @@ -3042,7 +3269,7 @@ type StatusRequest struct { func (m *StatusRequest) Reset() { *m = StatusRequest{} } func (*StatusRequest) ProtoMessage() {} -func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{81} } +func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{85} } func (m *StatusRequest) GetVerbose() bool { if m != nil { @@ -3063,7 +3290,7 @@ type StatusResponse struct { func (m *StatusResponse) Reset() { *m = StatusResponse{} } func (*StatusResponse) ProtoMessage() {} -func (*StatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{82} } +func (*StatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{86} } func (m *StatusResponse) GetStatus() *RuntimeStatus { if m != nil { @@ -3084,7 +3311,7 @@ type ImageFsInfoRequest struct { func (m *ImageFsInfoRequest) Reset() { *m = ImageFsInfoRequest{} } func (*ImageFsInfoRequest) ProtoMessage() {} -func (*ImageFsInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{83} } +func (*ImageFsInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{87} } // UInt64Value is the wrapper of uint64. type UInt64Value struct { @@ -3094,7 +3321,7 @@ type UInt64Value struct { func (m *UInt64Value) Reset() { *m = UInt64Value{} } func (*UInt64Value) ProtoMessage() {} -func (*UInt64Value) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{84} } +func (*UInt64Value) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{88} } func (m *UInt64Value) GetValue() uint64 { if m != nil { @@ -3111,7 +3338,7 @@ type StorageIdentifier struct { func (m *StorageIdentifier) Reset() { *m = StorageIdentifier{} } func (*StorageIdentifier) ProtoMessage() {} -func (*StorageIdentifier) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{85} } +func (*StorageIdentifier) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{89} } func (m *StorageIdentifier) GetUuid() string { if m != nil { @@ -3138,7 +3365,7 @@ type FilesystemUsage struct { func (m *FilesystemUsage) Reset() { *m = FilesystemUsage{} } func (*FilesystemUsage) ProtoMessage() {} -func (*FilesystemUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{86} } +func (*FilesystemUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{90} } func (m *FilesystemUsage) GetTimestamp() int64 { if m != nil { @@ -3175,7 +3402,7 @@ type ImageFsInfoResponse struct { func (m *ImageFsInfoResponse) Reset() { *m = ImageFsInfoResponse{} } func (*ImageFsInfoResponse) ProtoMessage() {} -func (*ImageFsInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{87} } +func (*ImageFsInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{91} } func (m *ImageFsInfoResponse) GetImageFilesystems() []*FilesystemUsage { if m != nil { @@ -3191,7 +3418,7 @@ type ContainerStatsRequest struct { func (m *ContainerStatsRequest) Reset() { *m = ContainerStatsRequest{} } func (*ContainerStatsRequest) ProtoMessage() {} -func (*ContainerStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{88} } +func (*ContainerStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{92} } func (m *ContainerStatsRequest) GetContainerId() string { if m != nil { @@ -3207,7 +3434,7 @@ type ContainerStatsResponse struct { func (m *ContainerStatsResponse) Reset() { *m = ContainerStatsResponse{} } func (*ContainerStatsResponse) ProtoMessage() {} -func (*ContainerStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{89} } +func (*ContainerStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{93} } func (m *ContainerStatsResponse) GetStats() *ContainerStats { if m != nil { @@ -3223,7 +3450,7 @@ type ListContainerStatsRequest struct { func (m *ListContainerStatsRequest) Reset() { *m = ListContainerStatsRequest{} } func (*ListContainerStatsRequest) ProtoMessage() {} -func (*ListContainerStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{90} } +func (*ListContainerStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{94} } func (m *ListContainerStatsRequest) GetFilter() *ContainerStatsFilter { if m != nil { @@ -3247,7 +3474,7 @@ type ContainerStatsFilter struct { func (m *ContainerStatsFilter) Reset() { *m = ContainerStatsFilter{} } func (*ContainerStatsFilter) ProtoMessage() {} -func (*ContainerStatsFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{91} } +func (*ContainerStatsFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{95} } func (m *ContainerStatsFilter) GetId() string { if m != nil { @@ -3277,7 +3504,7 @@ type ListContainerStatsResponse struct { func (m *ListContainerStatsResponse) Reset() { *m = ListContainerStatsResponse{} } func (*ListContainerStatsResponse) ProtoMessage() {} -func (*ListContainerStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{92} } +func (*ListContainerStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{96} } func (m *ListContainerStatsResponse) GetStats() []*ContainerStats { if m != nil { @@ -3303,7 +3530,7 @@ type ContainerAttributes struct { func (m *ContainerAttributes) Reset() { *m = ContainerAttributes{} } func (*ContainerAttributes) ProtoMessage() {} -func (*ContainerAttributes) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{93} } +func (*ContainerAttributes) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{97} } func (m *ContainerAttributes) GetId() string { if m != nil { @@ -3347,7 +3574,7 @@ type ContainerStats struct { func (m *ContainerStats) Reset() { *m = ContainerStats{} } func (*ContainerStats) ProtoMessage() {} -func (*ContainerStats) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{94} } +func (*ContainerStats) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{98} } func (m *ContainerStats) GetAttributes() *ContainerAttributes { if m != nil { @@ -3387,7 +3614,7 @@ type CpuUsage struct { func (m *CpuUsage) Reset() { *m = CpuUsage{} } func (*CpuUsage) ProtoMessage() {} -func (*CpuUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{95} } +func (*CpuUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{99} } func (m *CpuUsage) GetTimestamp() int64 { if m != nil { @@ -3413,7 +3640,7 @@ type MemoryUsage struct { func (m *MemoryUsage) Reset() { *m = MemoryUsage{} } func (*MemoryUsage) ProtoMessage() {} -func (*MemoryUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{96} } +func (*MemoryUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{100} } func (m *MemoryUsage) GetTimestamp() int64 { if m != nil { @@ -3430,107 +3657,111 @@ func (m *MemoryUsage) GetWorkingSetBytes() *UInt64Value { } func init() { - proto.RegisterType((*VersionRequest)(nil), "runtime.VersionRequest") - proto.RegisterType((*VersionResponse)(nil), "runtime.VersionResponse") - proto.RegisterType((*DNSConfig)(nil), "runtime.DNSConfig") - proto.RegisterType((*PortMapping)(nil), "runtime.PortMapping") - proto.RegisterType((*Mount)(nil), "runtime.Mount") - proto.RegisterType((*NamespaceOption)(nil), "runtime.NamespaceOption") - proto.RegisterType((*Int64Value)(nil), "runtime.Int64Value") - proto.RegisterType((*LinuxSandboxSecurityContext)(nil), "runtime.LinuxSandboxSecurityContext") - proto.RegisterType((*LinuxPodSandboxConfig)(nil), "runtime.LinuxPodSandboxConfig") - proto.RegisterType((*PodSandboxMetadata)(nil), "runtime.PodSandboxMetadata") - proto.RegisterType((*PodSandboxConfig)(nil), "runtime.PodSandboxConfig") - proto.RegisterType((*RunPodSandboxRequest)(nil), "runtime.RunPodSandboxRequest") - proto.RegisterType((*RunPodSandboxResponse)(nil), "runtime.RunPodSandboxResponse") - proto.RegisterType((*StopPodSandboxRequest)(nil), "runtime.StopPodSandboxRequest") - proto.RegisterType((*StopPodSandboxResponse)(nil), "runtime.StopPodSandboxResponse") - proto.RegisterType((*RemovePodSandboxRequest)(nil), "runtime.RemovePodSandboxRequest") - proto.RegisterType((*RemovePodSandboxResponse)(nil), "runtime.RemovePodSandboxResponse") - proto.RegisterType((*PodSandboxStatusRequest)(nil), "runtime.PodSandboxStatusRequest") - proto.RegisterType((*PodSandboxNetworkStatus)(nil), "runtime.PodSandboxNetworkStatus") - proto.RegisterType((*Namespace)(nil), "runtime.Namespace") - proto.RegisterType((*LinuxPodSandboxStatus)(nil), "runtime.LinuxPodSandboxStatus") - proto.RegisterType((*PodSandboxStatus)(nil), "runtime.PodSandboxStatus") - proto.RegisterType((*PodSandboxStatusResponse)(nil), "runtime.PodSandboxStatusResponse") - proto.RegisterType((*PodSandboxStateValue)(nil), "runtime.PodSandboxStateValue") - proto.RegisterType((*PodSandboxFilter)(nil), "runtime.PodSandboxFilter") - proto.RegisterType((*ListPodSandboxRequest)(nil), "runtime.ListPodSandboxRequest") - proto.RegisterType((*PodSandbox)(nil), "runtime.PodSandbox") - proto.RegisterType((*ListPodSandboxResponse)(nil), "runtime.ListPodSandboxResponse") - proto.RegisterType((*ImageSpec)(nil), "runtime.ImageSpec") - proto.RegisterType((*KeyValue)(nil), "runtime.KeyValue") - proto.RegisterType((*LinuxContainerResources)(nil), "runtime.LinuxContainerResources") - proto.RegisterType((*SELinuxOption)(nil), "runtime.SELinuxOption") - proto.RegisterType((*Capability)(nil), "runtime.Capability") - proto.RegisterType((*LinuxContainerSecurityContext)(nil), "runtime.LinuxContainerSecurityContext") - proto.RegisterType((*LinuxContainerConfig)(nil), "runtime.LinuxContainerConfig") - proto.RegisterType((*ContainerMetadata)(nil), "runtime.ContainerMetadata") - proto.RegisterType((*Device)(nil), "runtime.Device") - proto.RegisterType((*ContainerConfig)(nil), "runtime.ContainerConfig") - proto.RegisterType((*CreateContainerRequest)(nil), "runtime.CreateContainerRequest") - proto.RegisterType((*CreateContainerResponse)(nil), "runtime.CreateContainerResponse") - proto.RegisterType((*StartContainerRequest)(nil), "runtime.StartContainerRequest") - proto.RegisterType((*StartContainerResponse)(nil), "runtime.StartContainerResponse") - proto.RegisterType((*StopContainerRequest)(nil), "runtime.StopContainerRequest") - proto.RegisterType((*StopContainerResponse)(nil), "runtime.StopContainerResponse") - proto.RegisterType((*RemoveContainerRequest)(nil), "runtime.RemoveContainerRequest") - proto.RegisterType((*RemoveContainerResponse)(nil), "runtime.RemoveContainerResponse") - proto.RegisterType((*ContainerStateValue)(nil), "runtime.ContainerStateValue") - proto.RegisterType((*ContainerFilter)(nil), "runtime.ContainerFilter") - proto.RegisterType((*ListContainersRequest)(nil), "runtime.ListContainersRequest") - proto.RegisterType((*Container)(nil), "runtime.Container") - proto.RegisterType((*ListContainersResponse)(nil), "runtime.ListContainersResponse") - proto.RegisterType((*ContainerStatusRequest)(nil), "runtime.ContainerStatusRequest") - proto.RegisterType((*ContainerStatus)(nil), "runtime.ContainerStatus") - proto.RegisterType((*ContainerStatusResponse)(nil), "runtime.ContainerStatusResponse") - proto.RegisterType((*UpdateContainerResourcesRequest)(nil), "runtime.UpdateContainerResourcesRequest") - proto.RegisterType((*UpdateContainerResourcesResponse)(nil), "runtime.UpdateContainerResourcesResponse") - proto.RegisterType((*ExecSyncRequest)(nil), "runtime.ExecSyncRequest") - proto.RegisterType((*ExecSyncResponse)(nil), "runtime.ExecSyncResponse") - proto.RegisterType((*ExecRequest)(nil), "runtime.ExecRequest") - proto.RegisterType((*ExecResponse)(nil), "runtime.ExecResponse") - proto.RegisterType((*AttachRequest)(nil), "runtime.AttachRequest") - proto.RegisterType((*AttachResponse)(nil), "runtime.AttachResponse") - proto.RegisterType((*PortForwardRequest)(nil), "runtime.PortForwardRequest") - proto.RegisterType((*PortForwardResponse)(nil), "runtime.PortForwardResponse") - proto.RegisterType((*ImageFilter)(nil), "runtime.ImageFilter") - proto.RegisterType((*ListImagesRequest)(nil), "runtime.ListImagesRequest") - proto.RegisterType((*Image)(nil), "runtime.Image") - proto.RegisterType((*ListImagesResponse)(nil), "runtime.ListImagesResponse") - proto.RegisterType((*ImageStatusRequest)(nil), "runtime.ImageStatusRequest") - proto.RegisterType((*ImageStatusResponse)(nil), "runtime.ImageStatusResponse") - proto.RegisterType((*AuthConfig)(nil), "runtime.AuthConfig") - proto.RegisterType((*PullImageRequest)(nil), "runtime.PullImageRequest") - proto.RegisterType((*PullImageResponse)(nil), "runtime.PullImageResponse") - proto.RegisterType((*RemoveImageRequest)(nil), "runtime.RemoveImageRequest") - proto.RegisterType((*RemoveImageResponse)(nil), "runtime.RemoveImageResponse") - proto.RegisterType((*NetworkConfig)(nil), "runtime.NetworkConfig") - proto.RegisterType((*RuntimeConfig)(nil), "runtime.RuntimeConfig") - proto.RegisterType((*UpdateRuntimeConfigRequest)(nil), "runtime.UpdateRuntimeConfigRequest") - proto.RegisterType((*UpdateRuntimeConfigResponse)(nil), "runtime.UpdateRuntimeConfigResponse") - proto.RegisterType((*RuntimeCondition)(nil), "runtime.RuntimeCondition") - proto.RegisterType((*RuntimeStatus)(nil), "runtime.RuntimeStatus") - proto.RegisterType((*StatusRequest)(nil), "runtime.StatusRequest") - proto.RegisterType((*StatusResponse)(nil), "runtime.StatusResponse") - proto.RegisterType((*ImageFsInfoRequest)(nil), "runtime.ImageFsInfoRequest") - proto.RegisterType((*UInt64Value)(nil), "runtime.UInt64Value") - proto.RegisterType((*StorageIdentifier)(nil), "runtime.StorageIdentifier") - proto.RegisterType((*FilesystemUsage)(nil), "runtime.FilesystemUsage") - proto.RegisterType((*ImageFsInfoResponse)(nil), "runtime.ImageFsInfoResponse") - proto.RegisterType((*ContainerStatsRequest)(nil), "runtime.ContainerStatsRequest") - proto.RegisterType((*ContainerStatsResponse)(nil), "runtime.ContainerStatsResponse") - proto.RegisterType((*ListContainerStatsRequest)(nil), "runtime.ListContainerStatsRequest") - proto.RegisterType((*ContainerStatsFilter)(nil), "runtime.ContainerStatsFilter") - proto.RegisterType((*ListContainerStatsResponse)(nil), "runtime.ListContainerStatsResponse") - proto.RegisterType((*ContainerAttributes)(nil), "runtime.ContainerAttributes") - proto.RegisterType((*ContainerStats)(nil), "runtime.ContainerStats") - proto.RegisterType((*CpuUsage)(nil), "runtime.CpuUsage") - proto.RegisterType((*MemoryUsage)(nil), "runtime.MemoryUsage") - proto.RegisterEnum("runtime.Protocol", Protocol_name, Protocol_value) - proto.RegisterEnum("runtime.MountPropagation", MountPropagation_name, MountPropagation_value) - proto.RegisterEnum("runtime.PodSandboxState", PodSandboxState_name, PodSandboxState_value) - proto.RegisterEnum("runtime.ContainerState", ContainerState_name, ContainerState_value) + proto.RegisterType((*VersionRequest)(nil), "v1alpha1.VersionRequest") + proto.RegisterType((*VersionResponse)(nil), "v1alpha1.VersionResponse") + proto.RegisterType((*DNSConfig)(nil), "v1alpha1.DNSConfig") + proto.RegisterType((*PortMapping)(nil), "v1alpha1.PortMapping") + proto.RegisterType((*Mount)(nil), "v1alpha1.Mount") + proto.RegisterType((*NamespaceOption)(nil), "v1alpha1.NamespaceOption") + proto.RegisterType((*Int64Value)(nil), "v1alpha1.Int64Value") + proto.RegisterType((*LinuxSandboxSecurityContext)(nil), "v1alpha1.LinuxSandboxSecurityContext") + proto.RegisterType((*LinuxPodSandboxConfig)(nil), "v1alpha1.LinuxPodSandboxConfig") + proto.RegisterType((*PodSandboxMetadata)(nil), "v1alpha1.PodSandboxMetadata") + proto.RegisterType((*PodSandboxConfig)(nil), "v1alpha1.PodSandboxConfig") + proto.RegisterType((*RunPodSandboxRequest)(nil), "v1alpha1.RunPodSandboxRequest") + proto.RegisterType((*RunPodSandboxResponse)(nil), "v1alpha1.RunPodSandboxResponse") + proto.RegisterType((*StopPodSandboxRequest)(nil), "v1alpha1.StopPodSandboxRequest") + proto.RegisterType((*StopPodSandboxResponse)(nil), "v1alpha1.StopPodSandboxResponse") + proto.RegisterType((*RemovePodSandboxRequest)(nil), "v1alpha1.RemovePodSandboxRequest") + proto.RegisterType((*RemovePodSandboxResponse)(nil), "v1alpha1.RemovePodSandboxResponse") + proto.RegisterType((*PodSandboxStatusRequest)(nil), "v1alpha1.PodSandboxStatusRequest") + proto.RegisterType((*PodSandboxNetworkStatus)(nil), "v1alpha1.PodSandboxNetworkStatus") + proto.RegisterType((*Namespace)(nil), "v1alpha1.Namespace") + proto.RegisterType((*LinuxPodSandboxStatus)(nil), "v1alpha1.LinuxPodSandboxStatus") + proto.RegisterType((*PodSandboxStatus)(nil), "v1alpha1.PodSandboxStatus") + proto.RegisterType((*PodSandboxStatusResponse)(nil), "v1alpha1.PodSandboxStatusResponse") + proto.RegisterType((*PodSandboxStateValue)(nil), "v1alpha1.PodSandboxStateValue") + proto.RegisterType((*PodSandboxFilter)(nil), "v1alpha1.PodSandboxFilter") + proto.RegisterType((*ListPodSandboxRequest)(nil), "v1alpha1.ListPodSandboxRequest") + proto.RegisterType((*PodSandbox)(nil), "v1alpha1.PodSandbox") + proto.RegisterType((*ListPodSandboxResponse)(nil), "v1alpha1.ListPodSandboxResponse") + proto.RegisterType((*ImageSpec)(nil), "v1alpha1.ImageSpec") + proto.RegisterType((*KeyValue)(nil), "v1alpha1.KeyValue") + proto.RegisterType((*LinuxContainerResources)(nil), "v1alpha1.LinuxContainerResources") + proto.RegisterType((*WeightDevice)(nil), "v1alpha1.WeightDevice") + proto.RegisterType((*ThrottleDevice)(nil), "v1alpha1.ThrottleDevice") + proto.RegisterType((*Ulimit)(nil), "v1alpha1.Ulimit") + proto.RegisterType((*SELinuxOption)(nil), "v1alpha1.SELinuxOption") + proto.RegisterType((*Capability)(nil), "v1alpha1.Capability") + proto.RegisterType((*LinuxContainerSecurityContext)(nil), "v1alpha1.LinuxContainerSecurityContext") + proto.RegisterType((*LinuxContainerConfig)(nil), "v1alpha1.LinuxContainerConfig") + proto.RegisterType((*ContainerMetadata)(nil), "v1alpha1.ContainerMetadata") + proto.RegisterType((*Device)(nil), "v1alpha1.Device") + proto.RegisterType((*ContainerConfig)(nil), "v1alpha1.ContainerConfig") + proto.RegisterType((*CreateContainerRequest)(nil), "v1alpha1.CreateContainerRequest") + proto.RegisterType((*CreateContainerResponse)(nil), "v1alpha1.CreateContainerResponse") + proto.RegisterType((*StartContainerRequest)(nil), "v1alpha1.StartContainerRequest") + proto.RegisterType((*StartContainerResponse)(nil), "v1alpha1.StartContainerResponse") + proto.RegisterType((*StopContainerRequest)(nil), "v1alpha1.StopContainerRequest") + proto.RegisterType((*StopContainerResponse)(nil), "v1alpha1.StopContainerResponse") + proto.RegisterType((*RemoveContainerRequest)(nil), "v1alpha1.RemoveContainerRequest") + proto.RegisterType((*RemoveContainerResponse)(nil), "v1alpha1.RemoveContainerResponse") + proto.RegisterType((*ContainerStateValue)(nil), "v1alpha1.ContainerStateValue") + proto.RegisterType((*ContainerFilter)(nil), "v1alpha1.ContainerFilter") + proto.RegisterType((*ListContainersRequest)(nil), "v1alpha1.ListContainersRequest") + proto.RegisterType((*Container)(nil), "v1alpha1.Container") + proto.RegisterType((*ListContainersResponse)(nil), "v1alpha1.ListContainersResponse") + proto.RegisterType((*ContainerStatusRequest)(nil), "v1alpha1.ContainerStatusRequest") + proto.RegisterType((*ContainerStatus)(nil), "v1alpha1.ContainerStatus") + proto.RegisterType((*Volume)(nil), "v1alpha1.Volume") + proto.RegisterType((*ContainerStatusResponse)(nil), "v1alpha1.ContainerStatusResponse") + proto.RegisterType((*UpdateContainerResourcesRequest)(nil), "v1alpha1.UpdateContainerResourcesRequest") + proto.RegisterType((*UpdateContainerResourcesResponse)(nil), "v1alpha1.UpdateContainerResourcesResponse") + proto.RegisterType((*ExecSyncRequest)(nil), "v1alpha1.ExecSyncRequest") + proto.RegisterType((*ExecSyncResponse)(nil), "v1alpha1.ExecSyncResponse") + proto.RegisterType((*ExecRequest)(nil), "v1alpha1.ExecRequest") + proto.RegisterType((*ExecResponse)(nil), "v1alpha1.ExecResponse") + proto.RegisterType((*AttachRequest)(nil), "v1alpha1.AttachRequest") + proto.RegisterType((*AttachResponse)(nil), "v1alpha1.AttachResponse") + proto.RegisterType((*PortForwardRequest)(nil), "v1alpha1.PortForwardRequest") + proto.RegisterType((*PortForwardResponse)(nil), "v1alpha1.PortForwardResponse") + proto.RegisterType((*ImageFilter)(nil), "v1alpha1.ImageFilter") + proto.RegisterType((*ListImagesRequest)(nil), "v1alpha1.ListImagesRequest") + proto.RegisterType((*Image)(nil), "v1alpha1.Image") + proto.RegisterType((*ListImagesResponse)(nil), "v1alpha1.ListImagesResponse") + proto.RegisterType((*ImageStatusRequest)(nil), "v1alpha1.ImageStatusRequest") + proto.RegisterType((*ImageStatusResponse)(nil), "v1alpha1.ImageStatusResponse") + proto.RegisterType((*AuthConfig)(nil), "v1alpha1.AuthConfig") + proto.RegisterType((*PullImageRequest)(nil), "v1alpha1.PullImageRequest") + proto.RegisterType((*PullImageResponse)(nil), "v1alpha1.PullImageResponse") + proto.RegisterType((*RemoveImageRequest)(nil), "v1alpha1.RemoveImageRequest") + proto.RegisterType((*RemoveImageResponse)(nil), "v1alpha1.RemoveImageResponse") + proto.RegisterType((*NetworkConfig)(nil), "v1alpha1.NetworkConfig") + proto.RegisterType((*RuntimeConfig)(nil), "v1alpha1.RuntimeConfig") + proto.RegisterType((*UpdateRuntimeConfigRequest)(nil), "v1alpha1.UpdateRuntimeConfigRequest") + proto.RegisterType((*UpdateRuntimeConfigResponse)(nil), "v1alpha1.UpdateRuntimeConfigResponse") + proto.RegisterType((*RuntimeCondition)(nil), "v1alpha1.RuntimeCondition") + proto.RegisterType((*RuntimeStatus)(nil), "v1alpha1.RuntimeStatus") + proto.RegisterType((*StatusRequest)(nil), "v1alpha1.StatusRequest") + proto.RegisterType((*StatusResponse)(nil), "v1alpha1.StatusResponse") + proto.RegisterType((*ImageFsInfoRequest)(nil), "v1alpha1.ImageFsInfoRequest") + proto.RegisterType((*UInt64Value)(nil), "v1alpha1.UInt64Value") + proto.RegisterType((*StorageIdentifier)(nil), "v1alpha1.StorageIdentifier") + proto.RegisterType((*FilesystemUsage)(nil), "v1alpha1.FilesystemUsage") + proto.RegisterType((*ImageFsInfoResponse)(nil), "v1alpha1.ImageFsInfoResponse") + proto.RegisterType((*ContainerStatsRequest)(nil), "v1alpha1.ContainerStatsRequest") + proto.RegisterType((*ContainerStatsResponse)(nil), "v1alpha1.ContainerStatsResponse") + proto.RegisterType((*ListContainerStatsRequest)(nil), "v1alpha1.ListContainerStatsRequest") + proto.RegisterType((*ContainerStatsFilter)(nil), "v1alpha1.ContainerStatsFilter") + proto.RegisterType((*ListContainerStatsResponse)(nil), "v1alpha1.ListContainerStatsResponse") + proto.RegisterType((*ContainerAttributes)(nil), "v1alpha1.ContainerAttributes") + proto.RegisterType((*ContainerStats)(nil), "v1alpha1.ContainerStats") + proto.RegisterType((*CpuUsage)(nil), "v1alpha1.CpuUsage") + proto.RegisterType((*MemoryUsage)(nil), "v1alpha1.MemoryUsage") + proto.RegisterEnum("v1alpha1.Protocol", Protocol_name, Protocol_value) + proto.RegisterEnum("v1alpha1.MountPropagation", MountPropagation_name, MountPropagation_value) + proto.RegisterEnum("v1alpha1.PodSandboxState", PodSandboxState_name, PodSandboxState_value) + proto.RegisterEnum("v1alpha1.ContainerState", ContainerState_name, ContainerState_value) } // Reference imports to suppress errors if they are not otherwise used. @@ -3619,7 +3850,7 @@ func NewRuntimeServiceClient(cc *grpc.ClientConn) RuntimeServiceClient { func (c *runtimeServiceClient) Version(ctx context.Context, in *VersionRequest, opts ...grpc.CallOption) (*VersionResponse, error) { out := new(VersionResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/Version", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/Version", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3628,7 +3859,7 @@ func (c *runtimeServiceClient) Version(ctx context.Context, in *VersionRequest, func (c *runtimeServiceClient) RunPodSandbox(ctx context.Context, in *RunPodSandboxRequest, opts ...grpc.CallOption) (*RunPodSandboxResponse, error) { out := new(RunPodSandboxResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/RunPodSandbox", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/RunPodSandbox", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3637,7 +3868,7 @@ func (c *runtimeServiceClient) RunPodSandbox(ctx context.Context, in *RunPodSand func (c *runtimeServiceClient) StopPodSandbox(ctx context.Context, in *StopPodSandboxRequest, opts ...grpc.CallOption) (*StopPodSandboxResponse, error) { out := new(StopPodSandboxResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/StopPodSandbox", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/StopPodSandbox", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3646,7 +3877,7 @@ func (c *runtimeServiceClient) StopPodSandbox(ctx context.Context, in *StopPodSa func (c *runtimeServiceClient) RemovePodSandbox(ctx context.Context, in *RemovePodSandboxRequest, opts ...grpc.CallOption) (*RemovePodSandboxResponse, error) { out := new(RemovePodSandboxResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/RemovePodSandbox", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/RemovePodSandbox", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3655,7 +3886,7 @@ func (c *runtimeServiceClient) RemovePodSandbox(ctx context.Context, in *RemoveP func (c *runtimeServiceClient) PodSandboxStatus(ctx context.Context, in *PodSandboxStatusRequest, opts ...grpc.CallOption) (*PodSandboxStatusResponse, error) { out := new(PodSandboxStatusResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/PodSandboxStatus", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/PodSandboxStatus", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3664,7 +3895,7 @@ func (c *runtimeServiceClient) PodSandboxStatus(ctx context.Context, in *PodSand func (c *runtimeServiceClient) ListPodSandbox(ctx context.Context, in *ListPodSandboxRequest, opts ...grpc.CallOption) (*ListPodSandboxResponse, error) { out := new(ListPodSandboxResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/ListPodSandbox", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/ListPodSandbox", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3673,7 +3904,7 @@ func (c *runtimeServiceClient) ListPodSandbox(ctx context.Context, in *ListPodSa func (c *runtimeServiceClient) CreateContainer(ctx context.Context, in *CreateContainerRequest, opts ...grpc.CallOption) (*CreateContainerResponse, error) { out := new(CreateContainerResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/CreateContainer", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/CreateContainer", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3682,7 +3913,7 @@ func (c *runtimeServiceClient) CreateContainer(ctx context.Context, in *CreateCo func (c *runtimeServiceClient) StartContainer(ctx context.Context, in *StartContainerRequest, opts ...grpc.CallOption) (*StartContainerResponse, error) { out := new(StartContainerResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/StartContainer", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/StartContainer", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3691,7 +3922,7 @@ func (c *runtimeServiceClient) StartContainer(ctx context.Context, in *StartCont func (c *runtimeServiceClient) StopContainer(ctx context.Context, in *StopContainerRequest, opts ...grpc.CallOption) (*StopContainerResponse, error) { out := new(StopContainerResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/StopContainer", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/StopContainer", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3700,7 +3931,7 @@ func (c *runtimeServiceClient) StopContainer(ctx context.Context, in *StopContai func (c *runtimeServiceClient) RemoveContainer(ctx context.Context, in *RemoveContainerRequest, opts ...grpc.CallOption) (*RemoveContainerResponse, error) { out := new(RemoveContainerResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/RemoveContainer", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/RemoveContainer", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3709,7 +3940,7 @@ func (c *runtimeServiceClient) RemoveContainer(ctx context.Context, in *RemoveCo func (c *runtimeServiceClient) ListContainers(ctx context.Context, in *ListContainersRequest, opts ...grpc.CallOption) (*ListContainersResponse, error) { out := new(ListContainersResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/ListContainers", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/ListContainers", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3718,7 +3949,7 @@ func (c *runtimeServiceClient) ListContainers(ctx context.Context, in *ListConta func (c *runtimeServiceClient) ContainerStatus(ctx context.Context, in *ContainerStatusRequest, opts ...grpc.CallOption) (*ContainerStatusResponse, error) { out := new(ContainerStatusResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/ContainerStatus", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/ContainerStatus", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3727,7 +3958,7 @@ func (c *runtimeServiceClient) ContainerStatus(ctx context.Context, in *Containe func (c *runtimeServiceClient) UpdateContainerResources(ctx context.Context, in *UpdateContainerResourcesRequest, opts ...grpc.CallOption) (*UpdateContainerResourcesResponse, error) { out := new(UpdateContainerResourcesResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/UpdateContainerResources", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/UpdateContainerResources", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3736,7 +3967,7 @@ func (c *runtimeServiceClient) UpdateContainerResources(ctx context.Context, in func (c *runtimeServiceClient) ExecSync(ctx context.Context, in *ExecSyncRequest, opts ...grpc.CallOption) (*ExecSyncResponse, error) { out := new(ExecSyncResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/ExecSync", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/ExecSync", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3745,7 +3976,7 @@ func (c *runtimeServiceClient) ExecSync(ctx context.Context, in *ExecSyncRequest func (c *runtimeServiceClient) Exec(ctx context.Context, in *ExecRequest, opts ...grpc.CallOption) (*ExecResponse, error) { out := new(ExecResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/Exec", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/Exec", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3754,7 +3985,7 @@ func (c *runtimeServiceClient) Exec(ctx context.Context, in *ExecRequest, opts . func (c *runtimeServiceClient) Attach(ctx context.Context, in *AttachRequest, opts ...grpc.CallOption) (*AttachResponse, error) { out := new(AttachResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/Attach", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/Attach", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3763,7 +3994,7 @@ func (c *runtimeServiceClient) Attach(ctx context.Context, in *AttachRequest, op func (c *runtimeServiceClient) PortForward(ctx context.Context, in *PortForwardRequest, opts ...grpc.CallOption) (*PortForwardResponse, error) { out := new(PortForwardResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/PortForward", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/PortForward", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3772,7 +4003,7 @@ func (c *runtimeServiceClient) PortForward(ctx context.Context, in *PortForwardR func (c *runtimeServiceClient) ContainerStats(ctx context.Context, in *ContainerStatsRequest, opts ...grpc.CallOption) (*ContainerStatsResponse, error) { out := new(ContainerStatsResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/ContainerStats", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/ContainerStats", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3781,7 +4012,7 @@ func (c *runtimeServiceClient) ContainerStats(ctx context.Context, in *Container func (c *runtimeServiceClient) ListContainerStats(ctx context.Context, in *ListContainerStatsRequest, opts ...grpc.CallOption) (*ListContainerStatsResponse, error) { out := new(ListContainerStatsResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/ListContainerStats", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/ListContainerStats", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3790,7 +4021,7 @@ func (c *runtimeServiceClient) ListContainerStats(ctx context.Context, in *ListC func (c *runtimeServiceClient) UpdateRuntimeConfig(ctx context.Context, in *UpdateRuntimeConfigRequest, opts ...grpc.CallOption) (*UpdateRuntimeConfigResponse, error) { out := new(UpdateRuntimeConfigResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/UpdateRuntimeConfig", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/UpdateRuntimeConfig", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3799,7 +4030,7 @@ func (c *runtimeServiceClient) UpdateRuntimeConfig(ctx context.Context, in *Upda func (c *runtimeServiceClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) { out := new(StatusResponse) - err := grpc.Invoke(ctx, "/runtime.RuntimeService/Status", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/Status", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -3888,7 +4119,7 @@ func _RuntimeService_Version_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/Version", + FullMethod: "/v1alpha1.RuntimeService/Version", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).Version(ctx, req.(*VersionRequest)) @@ -3906,7 +4137,7 @@ func _RuntimeService_RunPodSandbox_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/RunPodSandbox", + FullMethod: "/v1alpha1.RuntimeService/RunPodSandbox", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).RunPodSandbox(ctx, req.(*RunPodSandboxRequest)) @@ -3924,7 +4155,7 @@ func _RuntimeService_StopPodSandbox_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/StopPodSandbox", + FullMethod: "/v1alpha1.RuntimeService/StopPodSandbox", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).StopPodSandbox(ctx, req.(*StopPodSandboxRequest)) @@ -3942,7 +4173,7 @@ func _RuntimeService_RemovePodSandbox_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/RemovePodSandbox", + FullMethod: "/v1alpha1.RuntimeService/RemovePodSandbox", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).RemovePodSandbox(ctx, req.(*RemovePodSandboxRequest)) @@ -3960,7 +4191,7 @@ func _RuntimeService_PodSandboxStatus_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/PodSandboxStatus", + FullMethod: "/v1alpha1.RuntimeService/PodSandboxStatus", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).PodSandboxStatus(ctx, req.(*PodSandboxStatusRequest)) @@ -3978,7 +4209,7 @@ func _RuntimeService_ListPodSandbox_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/ListPodSandbox", + FullMethod: "/v1alpha1.RuntimeService/ListPodSandbox", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).ListPodSandbox(ctx, req.(*ListPodSandboxRequest)) @@ -3996,7 +4227,7 @@ func _RuntimeService_CreateContainer_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/CreateContainer", + FullMethod: "/v1alpha1.RuntimeService/CreateContainer", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).CreateContainer(ctx, req.(*CreateContainerRequest)) @@ -4014,7 +4245,7 @@ func _RuntimeService_StartContainer_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/StartContainer", + FullMethod: "/v1alpha1.RuntimeService/StartContainer", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).StartContainer(ctx, req.(*StartContainerRequest)) @@ -4032,7 +4263,7 @@ func _RuntimeService_StopContainer_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/StopContainer", + FullMethod: "/v1alpha1.RuntimeService/StopContainer", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).StopContainer(ctx, req.(*StopContainerRequest)) @@ -4050,7 +4281,7 @@ func _RuntimeService_RemoveContainer_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/RemoveContainer", + FullMethod: "/v1alpha1.RuntimeService/RemoveContainer", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).RemoveContainer(ctx, req.(*RemoveContainerRequest)) @@ -4068,7 +4299,7 @@ func _RuntimeService_ListContainers_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/ListContainers", + FullMethod: "/v1alpha1.RuntimeService/ListContainers", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).ListContainers(ctx, req.(*ListContainersRequest)) @@ -4086,7 +4317,7 @@ func _RuntimeService_ContainerStatus_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/ContainerStatus", + FullMethod: "/v1alpha1.RuntimeService/ContainerStatus", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).ContainerStatus(ctx, req.(*ContainerStatusRequest)) @@ -4104,7 +4335,7 @@ func _RuntimeService_UpdateContainerResources_Handler(srv interface{}, ctx conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/UpdateContainerResources", + FullMethod: "/v1alpha1.RuntimeService/UpdateContainerResources", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).UpdateContainerResources(ctx, req.(*UpdateContainerResourcesRequest)) @@ -4122,7 +4353,7 @@ func _RuntimeService_ExecSync_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/ExecSync", + FullMethod: "/v1alpha1.RuntimeService/ExecSync", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).ExecSync(ctx, req.(*ExecSyncRequest)) @@ -4140,7 +4371,7 @@ func _RuntimeService_Exec_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/Exec", + FullMethod: "/v1alpha1.RuntimeService/Exec", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).Exec(ctx, req.(*ExecRequest)) @@ -4158,7 +4389,7 @@ func _RuntimeService_Attach_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/Attach", + FullMethod: "/v1alpha1.RuntimeService/Attach", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).Attach(ctx, req.(*AttachRequest)) @@ -4176,7 +4407,7 @@ func _RuntimeService_PortForward_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/PortForward", + FullMethod: "/v1alpha1.RuntimeService/PortForward", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).PortForward(ctx, req.(*PortForwardRequest)) @@ -4194,7 +4425,7 @@ func _RuntimeService_ContainerStats_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/ContainerStats", + FullMethod: "/v1alpha1.RuntimeService/ContainerStats", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).ContainerStats(ctx, req.(*ContainerStatsRequest)) @@ -4212,7 +4443,7 @@ func _RuntimeService_ListContainerStats_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/ListContainerStats", + FullMethod: "/v1alpha1.RuntimeService/ListContainerStats", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).ListContainerStats(ctx, req.(*ListContainerStatsRequest)) @@ -4230,7 +4461,7 @@ func _RuntimeService_UpdateRuntimeConfig_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/UpdateRuntimeConfig", + FullMethod: "/v1alpha1.RuntimeService/UpdateRuntimeConfig", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).UpdateRuntimeConfig(ctx, req.(*UpdateRuntimeConfigRequest)) @@ -4248,7 +4479,7 @@ func _RuntimeService_Status_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.RuntimeService/Status", + FullMethod: "/v1alpha1.RuntimeService/Status", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(RuntimeServiceServer).Status(ctx, req.(*StatusRequest)) @@ -4257,7 +4488,7 @@ func _RuntimeService_Status_Handler(srv interface{}, ctx context.Context, dec fu } var _RuntimeService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "runtime.RuntimeService", + ServiceName: "v1alpha1.RuntimeService", HandlerType: (*RuntimeServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -4378,7 +4609,7 @@ func NewImageServiceClient(cc *grpc.ClientConn) ImageServiceClient { func (c *imageServiceClient) ListImages(ctx context.Context, in *ListImagesRequest, opts ...grpc.CallOption) (*ListImagesResponse, error) { out := new(ListImagesResponse) - err := grpc.Invoke(ctx, "/runtime.ImageService/ListImages", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.ImageService/ListImages", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -4387,7 +4618,7 @@ func (c *imageServiceClient) ListImages(ctx context.Context, in *ListImagesReque func (c *imageServiceClient) ImageStatus(ctx context.Context, in *ImageStatusRequest, opts ...grpc.CallOption) (*ImageStatusResponse, error) { out := new(ImageStatusResponse) - err := grpc.Invoke(ctx, "/runtime.ImageService/ImageStatus", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.ImageService/ImageStatus", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -4396,7 +4627,7 @@ func (c *imageServiceClient) ImageStatus(ctx context.Context, in *ImageStatusReq func (c *imageServiceClient) PullImage(ctx context.Context, in *PullImageRequest, opts ...grpc.CallOption) (*PullImageResponse, error) { out := new(PullImageResponse) - err := grpc.Invoke(ctx, "/runtime.ImageService/PullImage", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.ImageService/PullImage", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -4405,7 +4636,7 @@ func (c *imageServiceClient) PullImage(ctx context.Context, in *PullImageRequest func (c *imageServiceClient) RemoveImage(ctx context.Context, in *RemoveImageRequest, opts ...grpc.CallOption) (*RemoveImageResponse, error) { out := new(RemoveImageResponse) - err := grpc.Invoke(ctx, "/runtime.ImageService/RemoveImage", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.ImageService/RemoveImage", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -4414,7 +4645,7 @@ func (c *imageServiceClient) RemoveImage(ctx context.Context, in *RemoveImageReq func (c *imageServiceClient) ImageFsInfo(ctx context.Context, in *ImageFsInfoRequest, opts ...grpc.CallOption) (*ImageFsInfoResponse, error) { out := new(ImageFsInfoResponse) - err := grpc.Invoke(ctx, "/runtime.ImageService/ImageFsInfo", in, out, c.cc, opts...) + err := grpc.Invoke(ctx, "/v1alpha1.ImageService/ImageFsInfo", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -4454,7 +4685,7 @@ func _ImageService_ListImages_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.ImageService/ListImages", + FullMethod: "/v1alpha1.ImageService/ListImages", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ImageServiceServer).ListImages(ctx, req.(*ListImagesRequest)) @@ -4472,7 +4703,7 @@ func _ImageService_ImageStatus_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.ImageService/ImageStatus", + FullMethod: "/v1alpha1.ImageService/ImageStatus", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ImageServiceServer).ImageStatus(ctx, req.(*ImageStatusRequest)) @@ -4490,7 +4721,7 @@ func _ImageService_PullImage_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.ImageService/PullImage", + FullMethod: "/v1alpha1.ImageService/PullImage", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ImageServiceServer).PullImage(ctx, req.(*PullImageRequest)) @@ -4508,7 +4739,7 @@ func _ImageService_RemoveImage_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.ImageService/RemoveImage", + FullMethod: "/v1alpha1.ImageService/RemoveImage", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ImageServiceServer).RemoveImage(ctx, req.(*RemoveImageRequest)) @@ -4526,7 +4757,7 @@ func _ImageService_ImageFsInfo_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/runtime.ImageService/ImageFsInfo", + FullMethod: "/v1alpha1.ImageService/ImageFsInfo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ImageServiceServer).ImageFsInfo(ctx, req.(*ImageFsInfoRequest)) @@ -4535,7 +4766,7 @@ func _ImageService_ImageFsInfo_Handler(srv interface{}, ctx context.Context, dec } var _ImageService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "runtime.ImageService", + ServiceName: "v1alpha1.ImageService", HandlerType: (*ImageServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -5856,10 +6087,146 @@ func (m *LinuxContainerResources) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintApi(dAtA, i, uint64(len(m.CpusetMems))) i += copy(dAtA[i:], m.CpusetMems) } + if len(m.DiskQuota) > 0 { + for k := range m.DiskQuota { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x6 + i++ + v := m.DiskQuota[k] + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } + if m.BlkioWeight != 0 { + dAtA[i] = 0xa8 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.BlkioWeight)) + } + if len(m.BlkioWeightDevice) > 0 { + for _, msg := range m.BlkioWeightDevice { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.BlkioDeviceReadBps) > 0 { + for _, msg := range m.BlkioDeviceReadBps { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.BlkioDeviceWriteBps) > 0 { + for _, msg := range m.BlkioDeviceWriteBps { + dAtA[i] = 0xc2 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.BlkioDeviceRead_IOps) > 0 { + for _, msg := range m.BlkioDeviceRead_IOps { + dAtA[i] = 0xca + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.BlkioDeviceWrite_IOps) > 0 { + for _, msg := range m.BlkioDeviceWrite_IOps { + dAtA[i] = 0xd2 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.KernelMemory != 0 { + dAtA[i] = 0xd8 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.KernelMemory)) + } + if m.MemoryReservation != 0 { + dAtA[i] = 0xe0 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.MemoryReservation)) + } + if m.MemorySwappiness != nil { + dAtA[i] = 0xea + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.MemorySwappiness.Size())) + n20, err := m.MemorySwappiness.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n20 + } + if len(m.Ulimits) > 0 { + for _, msg := range m.Ulimits { + dAtA[i] = 0xf2 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } return i, nil } -func (m *SELinuxOption) Marshal() (dAtA []byte, err error) { +func (m *WeightDevice) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -5869,39 +6236,55 @@ func (m *SELinuxOption) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *SELinuxOption) MarshalTo(dAtA []byte) (int, error) { +func (m *WeightDevice) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int _ = l - if len(m.User) > 0 { + if len(m.Path) > 0 { dAtA[i] = 0xa i++ - i = encodeVarintApi(dAtA, i, uint64(len(m.User))) - i += copy(dAtA[i:], m.User) + i = encodeVarintApi(dAtA, i, uint64(len(m.Path))) + i += copy(dAtA[i:], m.Path) } - if len(m.Role) > 0 { - dAtA[i] = 0x12 + if m.Weight != 0 { + dAtA[i] = 0x10 i++ - i = encodeVarintApi(dAtA, i, uint64(len(m.Role))) - i += copy(dAtA[i:], m.Role) + i = encodeVarintApi(dAtA, i, uint64(m.Weight)) } - if len(m.Type) > 0 { - dAtA[i] = 0x1a + return i, nil +} + +func (m *ThrottleDevice) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ThrottleDevice) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Path) > 0 { + dAtA[i] = 0xa i++ - i = encodeVarintApi(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) + i = encodeVarintApi(dAtA, i, uint64(len(m.Path))) + i += copy(dAtA[i:], m.Path) } - if len(m.Level) > 0 { - dAtA[i] = 0x22 + if m.Rate != 0 { + dAtA[i] = 0x10 i++ - i = encodeVarintApi(dAtA, i, uint64(len(m.Level))) - i += copy(dAtA[i:], m.Level) + i = encodeVarintApi(dAtA, i, uint64(m.Rate)) } return i, nil } -func (m *Capability) Marshal() (dAtA []byte, err error) { +func (m *Ulimit) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -5911,13 +6294,89 @@ func (m *Capability) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *Capability) MarshalTo(dAtA []byte) (int, error) { +func (m *Ulimit) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int _ = l - if len(m.AddCapabilities) > 0 { - for _, s := range m.AddCapabilities { + if len(m.Name) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + } + if m.Hard != 0 { + dAtA[i] = 0x10 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Hard)) + } + if m.Soft != 0 { + dAtA[i] = 0x18 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Soft)) + } + return i, nil +} + +func (m *SELinuxOption) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SELinuxOption) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.User) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.User))) + i += copy(dAtA[i:], m.User) + } + if len(m.Role) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.Role))) + i += copy(dAtA[i:], m.Role) + } + if len(m.Type) > 0 { + dAtA[i] = 0x1a + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.Type))) + i += copy(dAtA[i:], m.Type) + } + if len(m.Level) > 0 { + dAtA[i] = 0x22 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.Level))) + i += copy(dAtA[i:], m.Level) + } + return i, nil +} + +func (m *Capability) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Capability) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.AddCapabilities) > 0 { + for _, s := range m.AddCapabilities { dAtA[i] = 0xa i++ l = len(s) @@ -5968,11 +6427,11 @@ func (m *LinuxContainerSecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Capabilities.Size())) - n20, err := m.Capabilities.MarshalTo(dAtA[i:]) + n21, err := m.Capabilities.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n20 + i += n21 } if m.Privileged { dAtA[i] = 0x10 @@ -5988,31 +6447,31 @@ func (m *LinuxContainerSecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.NamespaceOptions.Size())) - n21, err := m.NamespaceOptions.MarshalTo(dAtA[i:]) + n22, err := m.NamespaceOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n21 + i += n22 } if m.SelinuxOptions != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.SelinuxOptions.Size())) - n22, err := m.SelinuxOptions.MarshalTo(dAtA[i:]) + n23, err := m.SelinuxOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n22 + i += n23 } if m.RunAsUser != nil { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.RunAsUser.Size())) - n23, err := m.RunAsUser.MarshalTo(dAtA[i:]) + n24, err := m.RunAsUser.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n23 + i += n24 } if len(m.RunAsUsername) > 0 { dAtA[i] = 0x32 @@ -6031,22 +6490,22 @@ func (m *LinuxContainerSecurityContext) MarshalTo(dAtA []byte) (int, error) { i++ } if len(m.SupplementalGroups) > 0 { - dAtA25 := make([]byte, len(m.SupplementalGroups)*10) - var j24 int + dAtA26 := make([]byte, len(m.SupplementalGroups)*10) + var j25 int for _, num1 := range m.SupplementalGroups { num := uint64(num1) for num >= 1<<7 { - dAtA25[j24] = uint8(uint64(num)&0x7f | 0x80) + dAtA26[j25] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j24++ + j25++ } - dAtA25[j24] = uint8(num) - j24++ + dAtA26[j25] = uint8(num) + j25++ } dAtA[i] = 0x42 i++ - i = encodeVarintApi(dAtA, i, uint64(j24)) - i += copy(dAtA[i:], dAtA25[:j24]) + i = encodeVarintApi(dAtA, i, uint64(j25)) + i += copy(dAtA[i:], dAtA26[:j25]) } if len(m.ApparmorProfile) > 0 { dAtA[i] = 0x4a @@ -6092,21 +6551,21 @@ func (m *LinuxContainerConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Resources.Size())) - n26, err := m.Resources.MarshalTo(dAtA[i:]) + n27, err := m.Resources.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n26 + i += n27 } if m.SecurityContext != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.SecurityContext.Size())) - n27, err := m.SecurityContext.MarshalTo(dAtA[i:]) + n28, err := m.SecurityContext.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n27 + i += n28 } return i, nil } @@ -6195,21 +6654,21 @@ func (m *ContainerConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Metadata.Size())) - n28, err := m.Metadata.MarshalTo(dAtA[i:]) + n29, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n28 + i += n29 } if m.Image != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n29, err := m.Image.MarshalTo(dAtA[i:]) + n30, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n29 + i += n30 } if len(m.Command) > 0 { for _, s := range m.Command { @@ -6357,11 +6816,18 @@ func (m *ContainerConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x7a i++ i = encodeVarintApi(dAtA, i, uint64(m.Linux.Size())) - n30, err := m.Linux.MarshalTo(dAtA[i:]) + n31, err := m.Linux.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n30 + i += n31 + } + if m.NetPriority != 0 { + dAtA[i] = 0xa0 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.NetPriority)) } return i, nil } @@ -6391,21 +6857,21 @@ func (m *CreateContainerRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Config.Size())) - n31, err := m.Config.MarshalTo(dAtA[i:]) + n32, err := m.Config.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n31 + i += n32 } if m.SandboxConfig != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.SandboxConfig.Size())) - n32, err := m.SandboxConfig.MarshalTo(dAtA[i:]) + n33, err := m.SandboxConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n32 + i += n33 } return i, nil } @@ -6613,11 +7079,11 @@ func (m *ContainerFilter) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.State.Size())) - n33, err := m.State.MarshalTo(dAtA[i:]) + n34, err := m.State.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n33 + i += n34 } if len(m.PodSandboxId) > 0 { dAtA[i] = 0x1a @@ -6664,11 +7130,11 @@ func (m *ListContainersRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Filter.Size())) - n34, err := m.Filter.MarshalTo(dAtA[i:]) + n35, err := m.Filter.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n34 + i += n35 } return i, nil } @@ -6704,21 +7170,21 @@ func (m *Container) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.Metadata.Size())) - n35, err := m.Metadata.MarshalTo(dAtA[i:]) + n36, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n35 + i += n36 } if m.Image != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n36, err := m.Image.MarshalTo(dAtA[i:]) + n37, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n36 + i += n37 } if len(m.ImageRef) > 0 { dAtA[i] = 0x2a @@ -6862,11 +7328,11 @@ func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Metadata.Size())) - n37, err := m.Metadata.MarshalTo(dAtA[i:]) + n38, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n37 + i += n38 } if m.State != 0 { dAtA[i] = 0x18 @@ -6897,11 +7363,11 @@ func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x42 i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n38, err := m.Image.MarshalTo(dAtA[i:]) + n39, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n38 + i += n39 } if len(m.ImageRef) > 0 { dAtA[i] = 0x4a @@ -6973,6 +7439,66 @@ func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintApi(dAtA, i, uint64(len(m.LogPath))) i += copy(dAtA[i:], m.LogPath) } + if len(m.Volumes) > 0 { + for k := range m.Volumes { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x6 + i++ + v := m.Volumes[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovApi(uint64(msgSize)) + } + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + msgSize + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(v.Size())) + n40, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n40 + } + } + } + if m.Resources != nil { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Resources.Size())) + n41, err := m.Resources.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n41 + } + return i, nil +} + +func (m *Volume) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Volume) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l return i, nil } @@ -6995,11 +7521,11 @@ func (m *ContainerStatusResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Status.Size())) - n39, err := m.Status.MarshalTo(dAtA[i:]) + n42, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n39 + i += n42 } if len(m.Info) > 0 { for k := range m.Info { @@ -7046,11 +7572,11 @@ func (m *UpdateContainerResourcesRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Linux.Size())) - n40, err := m.Linux.MarshalTo(dAtA[i:]) + n43, err := m.Linux.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n40 + i += n43 } return i, nil } @@ -7365,22 +7891,22 @@ func (m *PortForwardRequest) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.PodSandboxId) } if len(m.Port) > 0 { - dAtA42 := make([]byte, len(m.Port)*10) - var j41 int + dAtA45 := make([]byte, len(m.Port)*10) + var j44 int for _, num1 := range m.Port { num := uint64(num1) for num >= 1<<7 { - dAtA42[j41] = uint8(uint64(num)&0x7f | 0x80) + dAtA45[j44] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j41++ + j44++ } - dAtA42[j41] = uint8(num) - j41++ + dAtA45[j44] = uint8(num) + j44++ } dAtA[i] = 0x12 i++ - i = encodeVarintApi(dAtA, i, uint64(j41)) - i += copy(dAtA[i:], dAtA42[:j41]) + i = encodeVarintApi(dAtA, i, uint64(j44)) + i += copy(dAtA[i:], dAtA45[:j44]) } return i, nil } @@ -7428,11 +7954,11 @@ func (m *ImageFilter) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n43, err := m.Image.MarshalTo(dAtA[i:]) + n46, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n43 + i += n46 } return i, nil } @@ -7456,11 +7982,11 @@ func (m *ListImagesRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Filter.Size())) - n44, err := m.Filter.MarshalTo(dAtA[i:]) + n47, err := m.Filter.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n44 + i += n47 } return i, nil } @@ -7525,11 +8051,11 @@ func (m *Image) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Uid.Size())) - n45, err := m.Uid.MarshalTo(dAtA[i:]) + n48, err := m.Uid.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n45 + i += n48 } if len(m.Username) > 0 { dAtA[i] = 0x32 @@ -7537,6 +8063,36 @@ func (m *Image) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintApi(dAtA, i, uint64(len(m.Username))) i += copy(dAtA[i:], m.Username) } + if len(m.Volumes) > 0 { + for k := range m.Volumes { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x6 + i++ + v := m.Volumes[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovApi(uint64(msgSize)) + } + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + msgSize + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(v.Size())) + n49, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n49 + } + } + } return i, nil } @@ -7589,11 +8145,11 @@ func (m *ImageStatusRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n46, err := m.Image.MarshalTo(dAtA[i:]) + n50, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n46 + i += n50 } if m.Verbose { dAtA[i] = 0x10 @@ -7627,11 +8183,11 @@ func (m *ImageStatusResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n47, err := m.Image.MarshalTo(dAtA[i:]) + n51, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n47 + i += n51 } if len(m.Info) > 0 { for k := range m.Info { @@ -7726,31 +8282,31 @@ func (m *PullImageRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n48, err := m.Image.MarshalTo(dAtA[i:]) + n52, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n48 + i += n52 } if m.Auth != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Auth.Size())) - n49, err := m.Auth.MarshalTo(dAtA[i:]) + n53, err := m.Auth.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n49 + i += n53 } if m.SandboxConfig != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.SandboxConfig.Size())) - n50, err := m.SandboxConfig.MarshalTo(dAtA[i:]) + n54, err := m.SandboxConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n50 + i += n54 } return i, nil } @@ -7798,11 +8354,11 @@ func (m *RemoveImageRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n51, err := m.Image.MarshalTo(dAtA[i:]) + n55, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n51 + i += n55 } return i, nil } @@ -7868,11 +8424,11 @@ func (m *RuntimeConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.NetworkConfig.Size())) - n52, err := m.NetworkConfig.MarshalTo(dAtA[i:]) + n56, err := m.NetworkConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n52 + i += n56 } return i, nil } @@ -7896,11 +8452,11 @@ func (m *UpdateRuntimeConfigRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.RuntimeConfig.Size())) - n53, err := m.RuntimeConfig.MarshalTo(dAtA[i:]) + n57, err := m.RuntimeConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n53 + i += n57 } return i, nil } @@ -8046,11 +8602,11 @@ func (m *StatusResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Status.Size())) - n54, err := m.Status.MarshalTo(dAtA[i:]) + n58, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n54 + i += n58 } if len(m.Info) > 0 { for k := range m.Info { @@ -8161,31 +8717,31 @@ func (m *FilesystemUsage) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.StorageId.Size())) - n55, err := m.StorageId.MarshalTo(dAtA[i:]) + n59, err := m.StorageId.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n55 + i += n59 } if m.UsedBytes != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.UsedBytes.Size())) - n56, err := m.UsedBytes.MarshalTo(dAtA[i:]) + n60, err := m.UsedBytes.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n56 + i += n60 } if m.InodesUsed != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.InodesUsed.Size())) - n57, err := m.InodesUsed.MarshalTo(dAtA[i:]) + n61, err := m.InodesUsed.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n57 + i += n61 } return i, nil } @@ -8263,11 +8819,11 @@ func (m *ContainerStatsResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Stats.Size())) - n58, err := m.Stats.MarshalTo(dAtA[i:]) + n62, err := m.Stats.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n58 + i += n62 } return i, nil } @@ -8291,11 +8847,11 @@ func (m *ListContainerStatsRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Filter.Size())) - n59, err := m.Filter.MarshalTo(dAtA[i:]) + n63, err := m.Filter.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n59 + i += n63 } return i, nil } @@ -8402,11 +8958,11 @@ func (m *ContainerAttributes) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Metadata.Size())) - n60, err := m.Metadata.MarshalTo(dAtA[i:]) + n64, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n60 + i += n64 } if len(m.Labels) > 0 { for k := range m.Labels { @@ -8464,41 +9020,41 @@ func (m *ContainerStats) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Attributes.Size())) - n61, err := m.Attributes.MarshalTo(dAtA[i:]) + n65, err := m.Attributes.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n61 + i += n65 } if m.Cpu != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Cpu.Size())) - n62, err := m.Cpu.MarshalTo(dAtA[i:]) + n66, err := m.Cpu.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n62 + i += n66 } if m.Memory != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.Memory.Size())) - n63, err := m.Memory.MarshalTo(dAtA[i:]) + n67, err := m.Memory.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n63 + i += n67 } if m.WritableLayer != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.WritableLayer.Size())) - n64, err := m.WritableLayer.MarshalTo(dAtA[i:]) + n68, err := m.WritableLayer.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n64 + i += n68 } return i, nil } @@ -8527,11 +9083,11 @@ func (m *CpuUsage) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.UsageCoreNanoSeconds.Size())) - n65, err := m.UsageCoreNanoSeconds.MarshalTo(dAtA[i:]) + n69, err := m.UsageCoreNanoSeconds.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n65 + i += n69 } return i, nil } @@ -8560,11 +9116,11 @@ func (m *MemoryUsage) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.WorkingSetBytes.Size())) - n66, err := m.WorkingSetBytes.MarshalTo(dAtA[i:]) + n70, err := m.WorkingSetBytes.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n66 + i += n70 } return i, nil } @@ -9140,38 +9696,137 @@ func (m *LinuxContainerResources) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if len(m.DiskQuota) > 0 { + for k, v := range m.DiskQuota { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + n += mapEntrySize + 2 + sovApi(uint64(mapEntrySize)) + } + } + if m.BlkioWeight != 0 { + n += 2 + sovApi(uint64(m.BlkioWeight)) + } + if len(m.BlkioWeightDevice) > 0 { + for _, e := range m.BlkioWeightDevice { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } + if len(m.BlkioDeviceReadBps) > 0 { + for _, e := range m.BlkioDeviceReadBps { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } + if len(m.BlkioDeviceWriteBps) > 0 { + for _, e := range m.BlkioDeviceWriteBps { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } + if len(m.BlkioDeviceRead_IOps) > 0 { + for _, e := range m.BlkioDeviceRead_IOps { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } + if len(m.BlkioDeviceWrite_IOps) > 0 { + for _, e := range m.BlkioDeviceWrite_IOps { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } + if m.KernelMemory != 0 { + n += 2 + sovApi(uint64(m.KernelMemory)) + } + if m.MemoryReservation != 0 { + n += 2 + sovApi(uint64(m.MemoryReservation)) + } + if m.MemorySwappiness != nil { + l = m.MemorySwappiness.Size() + n += 2 + l + sovApi(uint64(l)) + } + if len(m.Ulimits) > 0 { + for _, e := range m.Ulimits { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } return n } -func (m *SELinuxOption) Size() (n int) { +func (m *WeightDevice) Size() (n int) { var l int _ = l - l = len(m.User) + l = len(m.Path) if l > 0 { n += 1 + l + sovApi(uint64(l)) } - l = len(m.Role) - if l > 0 { - n += 1 + l + sovApi(uint64(l)) + if m.Weight != 0 { + n += 1 + sovApi(uint64(m.Weight)) } - l = len(m.Type) + return n +} + +func (m *ThrottleDevice) Size() (n int) { + var l int + _ = l + l = len(m.Path) if l > 0 { n += 1 + l + sovApi(uint64(l)) } - l = len(m.Level) - if l > 0 { - n += 1 + l + sovApi(uint64(l)) + if m.Rate != 0 { + n += 1 + sovApi(uint64(m.Rate)) } return n } -func (m *Capability) Size() (n int) { +func (m *Ulimit) Size() (n int) { var l int _ = l - if len(m.AddCapabilities) > 0 { - for _, s := range m.AddCapabilities { - l = len(s) - n += 1 + l + sovApi(uint64(l)) + l = len(m.Name) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if m.Hard != 0 { + n += 1 + sovApi(uint64(m.Hard)) + } + if m.Soft != 0 { + n += 1 + sovApi(uint64(m.Soft)) + } + return n +} + +func (m *SELinuxOption) Size() (n int) { + var l int + _ = l + l = len(m.User) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.Role) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.Type) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.Level) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *Capability) Size() (n int) { + var l int + _ = l + if len(m.AddCapabilities) > 0 { + for _, s := range m.AddCapabilities { + l = len(s) + n += 1 + l + sovApi(uint64(l)) } } if len(m.DropCapabilities) > 0 { @@ -9356,6 +10011,9 @@ func (m *ContainerConfig) Size() (n int) { l = m.Linux.Size() n += 1 + l + sovApi(uint64(l)) } + if m.NetPriority != 0 { + n += 2 + sovApi(uint64(m.NetPriority)) + } return n } @@ -9624,6 +10282,29 @@ func (m *ContainerStatus) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if len(m.Volumes) > 0 { + for k, v := range m.Volumes { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovApi(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + l + n += mapEntrySize + 2 + sovApi(uint64(mapEntrySize)) + } + } + if m.Resources != nil { + l = m.Resources.Size() + n += 2 + l + sovApi(uint64(l)) + } + return n +} + +func (m *Volume) Size() (n int) { + var l int + _ = l return n } @@ -9848,6 +10529,19 @@ func (m *Image) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if len(m.Volumes) > 0 { + for k, v := range m.Volumes { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovApi(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + l + n += mapEntrySize + 2 + sovApi(uint64(mapEntrySize)) + } + } return n } @@ -10718,6 +11412,16 @@ func (this *LinuxContainerResources) String() string { if this == nil { return "nil" } + keysForDiskQuota := make([]string, 0, len(this.DiskQuota)) + for k := range this.DiskQuota { + keysForDiskQuota = append(keysForDiskQuota, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDiskQuota) + mapStringForDiskQuota := "map[string]string{" + for _, k := range keysForDiskQuota { + mapStringForDiskQuota += fmt.Sprintf("%v: %v,", k, this.DiskQuota[k]) + } + mapStringForDiskQuota += "}" s := strings.Join([]string{`&LinuxContainerResources{`, `CpuPeriod:` + fmt.Sprintf("%v", this.CpuPeriod) + `,`, `CpuQuota:` + fmt.Sprintf("%v", this.CpuQuota) + `,`, @@ -10726,6 +11430,51 @@ func (this *LinuxContainerResources) String() string { `OomScoreAdj:` + fmt.Sprintf("%v", this.OomScoreAdj) + `,`, `CpusetCpus:` + fmt.Sprintf("%v", this.CpusetCpus) + `,`, `CpusetMems:` + fmt.Sprintf("%v", this.CpusetMems) + `,`, + `DiskQuota:` + mapStringForDiskQuota + `,`, + `BlkioWeight:` + fmt.Sprintf("%v", this.BlkioWeight) + `,`, + `BlkioWeightDevice:` + strings.Replace(fmt.Sprintf("%v", this.BlkioWeightDevice), "WeightDevice", "WeightDevice", 1) + `,`, + `BlkioDeviceReadBps:` + strings.Replace(fmt.Sprintf("%v", this.BlkioDeviceReadBps), "ThrottleDevice", "ThrottleDevice", 1) + `,`, + `BlkioDeviceWriteBps:` + strings.Replace(fmt.Sprintf("%v", this.BlkioDeviceWriteBps), "ThrottleDevice", "ThrottleDevice", 1) + `,`, + `BlkioDeviceRead_IOps:` + strings.Replace(fmt.Sprintf("%v", this.BlkioDeviceRead_IOps), "ThrottleDevice", "ThrottleDevice", 1) + `,`, + `BlkioDeviceWrite_IOps:` + strings.Replace(fmt.Sprintf("%v", this.BlkioDeviceWrite_IOps), "ThrottleDevice", "ThrottleDevice", 1) + `,`, + `KernelMemory:` + fmt.Sprintf("%v", this.KernelMemory) + `,`, + `MemoryReservation:` + fmt.Sprintf("%v", this.MemoryReservation) + `,`, + `MemorySwappiness:` + strings.Replace(fmt.Sprintf("%v", this.MemorySwappiness), "Int64Value", "Int64Value", 1) + `,`, + `Ulimits:` + strings.Replace(fmt.Sprintf("%v", this.Ulimits), "Ulimit", "Ulimit", 1) + `,`, + `}`, + }, "") + return s +} +func (this *WeightDevice) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WeightDevice{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, + `}`, + }, "") + return s +} +func (this *ThrottleDevice) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ThrottleDevice{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Rate:` + fmt.Sprintf("%v", this.Rate) + `,`, + `}`, + }, "") + return s +} +func (this *Ulimit) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Ulimit{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Hard:` + fmt.Sprintf("%v", this.Hard) + `,`, + `Soft:` + fmt.Sprintf("%v", this.Soft) + `,`, `}`, }, "") return s @@ -10848,6 +11597,7 @@ func (this *ContainerConfig) String() string { `StdinOnce:` + fmt.Sprintf("%v", this.StdinOnce) + `,`, `Tty:` + fmt.Sprintf("%v", this.Tty) + `,`, `Linux:` + strings.Replace(fmt.Sprintf("%v", this.Linux), "LinuxContainerConfig", "LinuxContainerConfig", 1) + `,`, + `NetPriority:` + fmt.Sprintf("%v", this.NetPriority) + `,`, `}`, }, "") return s @@ -11058,6 +11808,16 @@ func (this *ContainerStatus) String() string { mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) } mapStringForAnnotations += "}" + keysForVolumes := make([]string, 0, len(this.Volumes)) + for k := range this.Volumes { + keysForVolumes = append(keysForVolumes, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumes) + mapStringForVolumes := "map[string]*Volume{" + for _, k := range keysForVolumes { + mapStringForVolumes += fmt.Sprintf("%v: %v,", k, this.Volumes[k]) + } + mapStringForVolumes += "}" s := strings.Join([]string{`&ContainerStatus{`, `Id:` + fmt.Sprintf("%v", this.Id) + `,`, `Metadata:` + strings.Replace(fmt.Sprintf("%v", this.Metadata), "ContainerMetadata", "ContainerMetadata", 1) + `,`, @@ -11074,6 +11834,17 @@ func (this *ContainerStatus) String() string { `Annotations:` + mapStringForAnnotations + `,`, `Mounts:` + strings.Replace(fmt.Sprintf("%v", this.Mounts), "Mount", "Mount", 1) + `,`, `LogPath:` + fmt.Sprintf("%v", this.LogPath) + `,`, + `Volumes:` + mapStringForVolumes + `,`, + `Resources:` + strings.Replace(fmt.Sprintf("%v", this.Resources), "LinuxContainerResources", "LinuxContainerResources", 1) + `,`, + `}`, + }, "") + return s +} +func (this *Volume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Volume{`, `}`, }, "") return s @@ -11237,6 +12008,16 @@ func (this *Image) String() string { if this == nil { return "nil" } + keysForVolumes := make([]string, 0, len(this.Volumes)) + for k := range this.Volumes { + keysForVolumes = append(keysForVolumes, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumes) + mapStringForVolumes := "map[string]*Volume{" + for _, k := range keysForVolumes { + mapStringForVolumes += fmt.Sprintf("%v: %v,", k, this.Volumes[k]) + } + mapStringForVolumes += "}" s := strings.Join([]string{`&Image{`, `Id:` + fmt.Sprintf("%v", this.Id) + `,`, `RepoTags:` + fmt.Sprintf("%v", this.RepoTags) + `,`, @@ -11244,6 +12025,7 @@ func (this *Image) String() string { `Size_:` + fmt.Sprintf("%v", this.Size_) + `,`, `Uid:` + strings.Replace(fmt.Sprintf("%v", this.Uid), "Int64Value", "Int64Value", 1) + `,`, `Username:` + fmt.Sprintf("%v", this.Username) + `,`, + `Volumes:` + mapStringForVolumes + `,`, `}`, }, "") return s @@ -16250,61 +17032,11 @@ func (m *LinuxContainerResources) Unmarshal(dAtA []byte) error { } m.CpusetMems = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipApi(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthApi - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SELinuxOption) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SELinuxOption: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SELinuxOption: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 100: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DiskQuota", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -16314,26 +17046,34 @@ func (m *SELinuxOption) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthApi } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.User = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - var stringLen uint64 + var stringLenmapkey uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -16343,26 +17083,76 @@ func (m *SELinuxOption) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLenmapkey |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { return ErrInvalidLengthApi } - postIndex := iNdEx + intStringLen - if postIndex > l { + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - m.Role = string(dAtA[iNdEx:postIndex]) + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.DiskQuota == nil { + m.DiskQuota = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.DiskQuota[mapkey] = mapvalue + } else { + var mapvalue string + m.DiskQuota[mapkey] = mapvalue + } iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + case 101: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlkioWeight", wireType) } - var stringLen uint64 + m.BlkioWeight = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -16372,26 +17162,16 @@ func (m *SELinuxOption) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + m.BlkioWeight |= (uint32(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthApi - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Type = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: + case 102: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Level", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field BlkioWeightDevice", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -16401,12 +17181,719 @@ func (m *SELinuxOption) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlkioWeightDevice = append(m.BlkioWeightDevice, &WeightDevice{}) + if err := m.BlkioWeightDevice[len(m.BlkioWeightDevice)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 103: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlkioDeviceReadBps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlkioDeviceReadBps = append(m.BlkioDeviceReadBps, &ThrottleDevice{}) + if err := m.BlkioDeviceReadBps[len(m.BlkioDeviceReadBps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 104: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlkioDeviceWriteBps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlkioDeviceWriteBps = append(m.BlkioDeviceWriteBps, &ThrottleDevice{}) + if err := m.BlkioDeviceWriteBps[len(m.BlkioDeviceWriteBps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 105: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlkioDeviceRead_IOps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlkioDeviceRead_IOps = append(m.BlkioDeviceRead_IOps, &ThrottleDevice{}) + if err := m.BlkioDeviceRead_IOps[len(m.BlkioDeviceRead_IOps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 106: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlkioDeviceWrite_IOps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlkioDeviceWrite_IOps = append(m.BlkioDeviceWrite_IOps, &ThrottleDevice{}) + if err := m.BlkioDeviceWrite_IOps[len(m.BlkioDeviceWrite_IOps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 107: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field KernelMemory", wireType) + } + m.KernelMemory = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.KernelMemory |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 108: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MemoryReservation", wireType) + } + m.MemoryReservation = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MemoryReservation |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 109: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MemorySwappiness", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MemorySwappiness == nil { + m.MemorySwappiness = &Int64Value{} + } + if err := m.MemorySwappiness.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 110: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ulimits", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ulimits = append(m.Ulimits, &Ulimit{}) + if err := m.Ulimits[len(m.Ulimits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WeightDevice) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WeightDevice: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WeightDevice: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) + } + m.Weight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Weight |= (uint32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ThrottleDevice) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ThrottleDevice: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ThrottleDevice: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Rate", wireType) + } + m.Rate = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Rate |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Ulimit) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Ulimit: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Ulimit: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Hard", wireType) + } + m.Hard = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Hard |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Soft", wireType) + } + m.Soft = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Soft |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SELinuxOption) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SELinuxOption: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SELinuxOption: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Role = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Level", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthApi } @@ -17916,6 +19403,25 @@ func (m *ContainerConfig) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 100: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NetPriority", wireType) + } + m.NetPriority = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NetPriority |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -20035,25 +21541,201 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { break } } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthApi + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Labels[mapkey] = mapvalue + } else { + var mapvalue string + m.Labels[mapkey] = mapvalue + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Annotations == nil { + m.Annotations = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Annotations[mapkey] = mapvalue + } else { + var mapvalue string + m.Annotations[mapkey] = mapvalue + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Mounts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Mounts = append(m.Mounts, &Mount{}) + if err := m.Mounts[len(m.Mounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LogPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Labels[mapkey] = mapvalue - } else { - var mapvalue string - m.Labels[mapkey] = mapvalue + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF } + m.LogPath = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 13: + case 100: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -20117,8 +21799,8 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { } mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) iNdEx = postStringIndexmapkey - if m.Annotations == nil { - m.Annotations = make(map[string]string) + if m.Volumes == nil { + m.Volumes = make(map[string]*Volume) } if iNdEx < postIndex { var valuekey uint64 @@ -20136,7 +21818,7 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { break } } - var stringLenmapvalue uint64 + var mapmsglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -20146,30 +21828,35 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift + mapmsglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { + if mapmsglen < 0 { return ErrInvalidLengthApi } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthApi + } + if postmsgIndex > l { return io.ErrUnexpectedEOF } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Annotations[mapkey] = mapvalue + mapvalue := &Volume{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + m.Volumes[mapkey] = mapvalue } else { - var mapvalue string - m.Annotations[mapkey] = mapvalue + var mapvalue *Volume + m.Volumes[mapkey] = mapvalue } iNdEx = postIndex - case 14: + case 101: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Mounts", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -20193,40 +21880,63 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Mounts = append(m.Mounts, &Mount{}) - if err := m.Mounts[len(m.Mounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Resources == nil { + m.Resources = &LinuxContainerResources{} + } + if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LogPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err } - intStringLen := int(stringLen) - if intStringLen < 0 { + if skippy < 0 { return ErrInvalidLengthApi } - postIndex := iNdEx + intStringLen - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.LogPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Volume) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Volume: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Volume: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -21955,6 +23665,127 @@ func (m *Image) Unmarshal(dAtA []byte) error { } m.Username = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 100: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Volumes == nil { + m.Volumes = make(map[string]*Volume) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthApi + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthApi + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &Volume{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + m.Volumes[mapkey] = mapvalue + } else { + var mapvalue *Volume + m.Volumes[mapkey] = mapvalue + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -25581,280 +27412,305 @@ var ( func init() { proto.RegisterFile("api.proto", fileDescriptorApi) } var fileDescriptorApi = []byte{ - // 4392 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5b, 0xcd, 0x6f, 0x1c, 0x47, - 0x76, 0xe7, 0xcc, 0xf0, 0x63, 0xe6, 0x0d, 0x67, 0x38, 0x2c, 0x51, 0xe4, 0x70, 0x24, 0x51, 0x54, - 0xcb, 0x92, 0x25, 0xed, 0x4a, 0x96, 0xe9, 0xb5, 0x14, 0xcb, 0xb6, 0xe4, 0x31, 0x49, 0x29, 0xb4, - 0x24, 0x92, 0xdb, 0x43, 0x7a, 0x6d, 0x6c, 0x80, 0x4e, 0x73, 0xba, 0x38, 0x6c, 0x7b, 0xa6, 0xab, - 0xdd, 0x1f, 0x92, 0x18, 0xe4, 0x90, 0x5c, 0x82, 0x20, 0x40, 0x80, 0xcd, 0x31, 0x39, 0xe5, 0x10, - 0x60, 0x91, 0x4b, 0x10, 0xe4, 0x10, 0xe4, 0x0f, 0x08, 0x92, 0xbd, 0x2c, 0x10, 0x20, 0x40, 0x90, - 0xdc, 0xb2, 0xca, 0x21, 0x87, 0x00, 0xf9, 0x1b, 0x16, 0xf5, 0xd5, 0x5d, 0xfd, 0x35, 0x22, 0x65, - 0xef, 0x5a, 0xa7, 0xe9, 0x7a, 0xf5, 0xea, 0xd5, 0xab, 0xaa, 0x57, 0xaf, 0xde, 0xfb, 0x55, 0x0d, - 0xd4, 0x4c, 0xd7, 0xbe, 0xe5, 0x7a, 0x24, 0x20, 0x68, 0xc6, 0x0b, 0x9d, 0xc0, 0x1e, 0xe1, 0xce, - 0xcd, 0x81, 0x1d, 0x1c, 0x85, 0x07, 0xb7, 0xfa, 0x64, 0xf4, 0xce, 0x80, 0x0c, 0xc8, 0x3b, 0xac, - 0xfe, 0x20, 0x3c, 0x64, 0x25, 0x56, 0x60, 0x5f, 0xbc, 0x9d, 0x76, 0x03, 0x9a, 0x9f, 0x63, 0xcf, - 0xb7, 0x89, 0xa3, 0xe3, 0x6f, 0x42, 0xec, 0x07, 0xa8, 0x0d, 0x33, 0xcf, 0x38, 0xa5, 0x5d, 0x5a, - 0x2d, 0x5d, 0xab, 0xe9, 0xb2, 0xa8, 0xfd, 0xbc, 0x04, 0x73, 0x11, 0xb3, 0xef, 0x12, 0xc7, 0xc7, - 0xc5, 0xdc, 0xe8, 0x12, 0xcc, 0x0a, 0x9d, 0x0c, 0xc7, 0x1c, 0xe1, 0x76, 0x99, 0x55, 0xd7, 0x05, - 0x6d, 0xdb, 0x1c, 0x61, 0xf4, 0x36, 0xcc, 0x49, 0x16, 0x29, 0xa4, 0xc2, 0xb8, 0x9a, 0x82, 0x2c, - 0x7a, 0x43, 0xb7, 0xe0, 0x8c, 0x64, 0x34, 0x5d, 0x3b, 0x62, 0x9e, 0x64, 0xcc, 0xf3, 0xa2, 0xaa, - 0xeb, 0xda, 0x82, 0x5f, 0xfb, 0x29, 0xd4, 0x36, 0xb6, 0x7b, 0xeb, 0xc4, 0x39, 0xb4, 0x07, 0x54, - 0x45, 0x1f, 0x7b, 0xb4, 0x4d, 0xbb, 0xb4, 0x5a, 0xa1, 0x2a, 0x8a, 0x22, 0xea, 0x40, 0xd5, 0xc7, - 0xa6, 0xd7, 0x3f, 0xc2, 0x7e, 0xbb, 0xcc, 0xaa, 0xa2, 0x32, 0x6d, 0x45, 0xdc, 0xc0, 0x26, 0x8e, - 0xdf, 0xae, 0xf0, 0x56, 0xa2, 0xa8, 0xfd, 0x65, 0x09, 0xea, 0xbb, 0xc4, 0x0b, 0x9e, 0x9a, 0xae, - 0x6b, 0x3b, 0x03, 0x74, 0x13, 0xaa, 0x6c, 0x2e, 0xfb, 0x64, 0xc8, 0xe6, 0xa0, 0xb9, 0x36, 0x7f, - 0x4b, 0xa8, 0x74, 0x6b, 0x57, 0x54, 0xe8, 0x11, 0x0b, 0xba, 0x02, 0xcd, 0x3e, 0x71, 0x02, 0xd3, - 0x76, 0xb0, 0x67, 0xb8, 0xc4, 0x0b, 0xd8, 0xcc, 0x4c, 0xe9, 0x8d, 0x88, 0x4a, 0x85, 0xa3, 0x73, - 0x50, 0x3b, 0x22, 0x7e, 0xc0, 0x39, 0x2a, 0x8c, 0xa3, 0x4a, 0x09, 0xac, 0x72, 0x09, 0x66, 0x58, - 0xa5, 0xed, 0x8a, 0x39, 0x98, 0xa6, 0xc5, 0x2d, 0x57, 0xfb, 0x65, 0x09, 0xa6, 0x9e, 0x92, 0xd0, - 0x09, 0x52, 0xdd, 0x98, 0xc1, 0x91, 0x58, 0x1f, 0xa5, 0x1b, 0x33, 0x38, 0x8a, 0xbb, 0xa1, 0x1c, - 0x7c, 0x89, 0x78, 0x37, 0xb4, 0xb2, 0x03, 0x55, 0x0f, 0x9b, 0x16, 0x71, 0x86, 0xc7, 0x4c, 0x85, - 0xaa, 0x1e, 0x95, 0xe9, 0xda, 0xf9, 0x78, 0x68, 0x3b, 0xe1, 0x0b, 0xc3, 0xc3, 0x43, 0xf3, 0x00, - 0x0f, 0x99, 0x2a, 0x55, 0xbd, 0x29, 0xc8, 0x3a, 0xa7, 0xa2, 0x0f, 0xa1, 0xee, 0x7a, 0xc4, 0x35, - 0x07, 0x26, 0x9d, 0xbe, 0xf6, 0x14, 0x9b, 0xa1, 0xe5, 0x68, 0x86, 0x98, 0xb6, 0xbb, 0x31, 0x83, - 0xae, 0x72, 0x6b, 0x5f, 0xc1, 0x1c, 0xb5, 0x14, 0xdf, 0x35, 0xfb, 0x78, 0x87, 0xcd, 0x3f, 0xb5, - 0x2b, 0xa6, 0xb1, 0x83, 0x83, 0xe7, 0xc4, 0xfb, 0x9a, 0x0d, 0xab, 0xaa, 0xd7, 0x29, 0x6d, 0x9b, - 0x93, 0xd0, 0x32, 0x54, 0xf9, 0xa0, 0x6c, 0x8b, 0x8d, 0xa9, 0xaa, 0xb3, 0xe9, 0xda, 0xb5, 0xad, - 0xa8, 0xca, 0x76, 0xfb, 0x62, 0x48, 0x33, 0x7c, 0xea, 0xfa, 0x9a, 0x06, 0xb0, 0xe5, 0x04, 0x77, - 0x7e, 0xf4, 0xb9, 0x39, 0x0c, 0x31, 0x5a, 0x80, 0xa9, 0x67, 0xf4, 0x83, 0xc9, 0xaf, 0xe8, 0xbc, - 0xa0, 0xfd, 0x49, 0x05, 0xce, 0x3d, 0xa1, 0xa3, 0xeb, 0x99, 0x8e, 0x75, 0x40, 0x5e, 0xf4, 0x70, - 0x3f, 0xf4, 0xec, 0xe0, 0x78, 0x9d, 0x38, 0x01, 0x7e, 0x11, 0xa0, 0x4d, 0x98, 0x77, 0xa4, 0xbe, - 0x86, 0xb4, 0x1f, 0x2a, 0xa1, 0xbe, 0xd6, 0x8e, 0x86, 0x9c, 0x1a, 0x91, 0xde, 0x72, 0x92, 0x04, - 0x1f, 0x3d, 0x88, 0x27, 0x57, 0x0a, 0x29, 0x33, 0x21, 0x8b, 0x91, 0x90, 0xde, 0x26, 0xd3, 0x43, - 0x88, 0x90, 0x93, 0x2e, 0x05, 0xbc, 0x07, 0x74, 0xa3, 0x19, 0xa6, 0x6f, 0x84, 0x3e, 0xf6, 0xd8, - 0x48, 0xeb, 0x6b, 0x67, 0xa2, 0xc6, 0xf1, 0x38, 0xf5, 0x9a, 0x17, 0x3a, 0x5d, 0x7f, 0xdf, 0xc7, - 0x1e, 0xdb, 0x8e, 0x62, 0x79, 0x0d, 0x8f, 0x90, 0xe0, 0xd0, 0x97, 0x4b, 0x2a, 0xc9, 0x3a, 0xa3, - 0xa2, 0x77, 0xe0, 0x8c, 0x1f, 0xba, 0xee, 0x10, 0x8f, 0xb0, 0x13, 0x98, 0x43, 0x63, 0xe0, 0x91, - 0xd0, 0xf5, 0xdb, 0x53, 0xab, 0x95, 0x6b, 0x15, 0x1d, 0xa9, 0x55, 0x8f, 0x58, 0x0d, 0x5a, 0x01, - 0x70, 0x3d, 0xfb, 0x99, 0x3d, 0xc4, 0x03, 0x6c, 0xb5, 0xa7, 0x99, 0x50, 0x85, 0x82, 0x6e, 0xc3, - 0x82, 0x8f, 0xfb, 0x7d, 0x32, 0x72, 0x0d, 0xd7, 0x23, 0x87, 0xf6, 0x10, 0x73, 0x83, 0x9c, 0x61, - 0x06, 0x89, 0x44, 0xdd, 0x2e, 0xaf, 0xa2, 0xa6, 0xa9, 0xfd, 0xac, 0x0c, 0x67, 0xd9, 0x04, 0xec, - 0x12, 0x4b, 0xac, 0x85, 0xd8, 0xee, 0x97, 0xa1, 0xd1, 0x67, 0x0a, 0x19, 0xae, 0xe9, 0x61, 0x27, - 0x10, 0x76, 0x3f, 0xcb, 0x89, 0xbb, 0x8c, 0x86, 0x76, 0xa0, 0xe5, 0x8b, 0xa5, 0x33, 0xfa, 0x7c, - 0xed, 0xc4, 0x0c, 0xbf, 0x15, 0x4d, 0xd2, 0x98, 0x75, 0xd6, 0xe7, 0xfc, 0xcc, 0xc2, 0xcf, 0xf8, - 0xc7, 0x7e, 0x3f, 0x18, 0x72, 0x77, 0x51, 0x5f, 0xfb, 0x41, 0x52, 0x4e, 0x5a, 0xcd, 0x5b, 0x3d, - 0xce, 0xbd, 0xe9, 0x04, 0xde, 0xb1, 0x2e, 0xdb, 0x76, 0xee, 0xc1, 0xac, 0x5a, 0x81, 0x5a, 0x50, - 0xf9, 0x1a, 0x1f, 0x8b, 0x21, 0xd0, 0xcf, 0xd8, 0x2e, 0xf9, 0x66, 0xe5, 0x85, 0x7b, 0xe5, 0xdf, - 0x29, 0x69, 0x1e, 0xa0, 0xb8, 0x97, 0xa7, 0x38, 0x30, 0x2d, 0x33, 0x30, 0x11, 0x82, 0x49, 0xe6, - 0x7e, 0xb9, 0x08, 0xf6, 0x4d, 0xa5, 0x86, 0x62, 0x6b, 0xd4, 0x74, 0xfa, 0x89, 0xce, 0x43, 0x2d, - 0x32, 0x42, 0xe1, 0x83, 0x63, 0x02, 0xf5, 0x85, 0x66, 0x10, 0xe0, 0x91, 0x1b, 0x30, 0x83, 0x68, - 0xe8, 0xb2, 0xa8, 0xfd, 0xd3, 0x24, 0xb4, 0x32, 0x2b, 0x70, 0x17, 0xaa, 0x23, 0xd1, 0xbd, 0xb0, - 0xfd, 0x73, 0xb1, 0x43, 0xcc, 0x68, 0xa8, 0x47, 0xcc, 0xd4, 0xdf, 0xd0, 0xcd, 0xa8, 0x1c, 0x17, - 0x51, 0x99, 0x2e, 0xeb, 0x90, 0x0c, 0x0c, 0xcb, 0xf6, 0x70, 0x3f, 0x20, 0xde, 0xb1, 0xd0, 0x72, - 0x76, 0x48, 0x06, 0x1b, 0x92, 0x86, 0xde, 0x05, 0xb0, 0x1c, 0x9f, 0xae, 0xe8, 0xa1, 0x3d, 0x60, - 0xba, 0xd6, 0xd7, 0x50, 0xd4, 0x77, 0x74, 0x24, 0xe8, 0x35, 0xcb, 0xf1, 0x85, 0xb2, 0x1f, 0x40, - 0x83, 0xba, 0x58, 0x63, 0xc4, 0xbd, 0x39, 0xb7, 0xe2, 0xfa, 0xda, 0x82, 0xa2, 0x71, 0xe4, 0xea, - 0xf5, 0x59, 0x37, 0x2e, 0xf8, 0xe8, 0x63, 0x98, 0x66, 0x2e, 0xce, 0x6f, 0x4f, 0xb3, 0x36, 0x57, - 0x72, 0x46, 0x29, 0x56, 0xfb, 0x09, 0xe3, 0xe3, 0x8b, 0x2d, 0x1a, 0xa1, 0x27, 0x50, 0x37, 0x1d, - 0x87, 0x04, 0x26, 0xdf, 0xe0, 0x33, 0x4c, 0xc6, 0x8d, 0x62, 0x19, 0xdd, 0x98, 0x99, 0x0b, 0x52, - 0x9b, 0xa3, 0x1f, 0xc1, 0x14, 0xf3, 0x00, 0xed, 0x2a, 0x1b, 0xf5, 0xca, 0x78, 0xf3, 0xd3, 0x39, - 0x73, 0xe7, 0x03, 0xa8, 0x2b, 0xaa, 0x9d, 0xc6, 0xdc, 0x3a, 0xf7, 0xa1, 0x95, 0xd6, 0xe8, 0x54, - 0xe6, 0xba, 0x05, 0x0b, 0x7a, 0xe8, 0xc4, 0x8a, 0xc9, 0xf8, 0xe3, 0x5d, 0x98, 0x16, 0xeb, 0xc7, - 0x6d, 0x67, 0xb9, 0x70, 0x46, 0x74, 0xc1, 0xa8, 0x7d, 0x0c, 0x67, 0x53, 0xa2, 0x44, 0x74, 0xf2, - 0x16, 0x34, 0x5d, 0x62, 0x19, 0x3e, 0x27, 0x1b, 0xb6, 0x25, 0x9d, 0x81, 0x1b, 0xf1, 0x6e, 0x59, - 0xb4, 0x79, 0x2f, 0x20, 0x6e, 0x56, 0x95, 0x93, 0x35, 0x6f, 0xc3, 0x62, 0xba, 0x39, 0xef, 0x5e, - 0x7b, 0x00, 0x4b, 0x3a, 0x1e, 0x91, 0x67, 0xf8, 0x75, 0x45, 0x77, 0xa0, 0x9d, 0x15, 0x20, 0x84, - 0x7f, 0x09, 0x4b, 0x31, 0xb5, 0x17, 0x98, 0x41, 0xe8, 0x9f, 0x4a, 0xb8, 0x08, 0xdd, 0x0e, 0x88, - 0x8f, 0xe5, 0x21, 0x29, 0x8a, 0xda, 0x75, 0x55, 0xb4, 0x38, 0x54, 0x79, 0x0f, 0xa8, 0x09, 0x65, - 0xdb, 0x15, 0xe2, 0xca, 0xb6, 0xab, 0x3d, 0x80, 0x5a, 0x74, 0x9c, 0xa1, 0xb5, 0x38, 0x66, 0x2a, - 0xbf, 0xe2, 0xcc, 0x8b, 0xa2, 0xa9, 0xc7, 0x19, 0x3f, 0x2e, 0x7a, 0x5a, 0x03, 0x88, 0x3c, 0x90, - 0x3c, 0x43, 0x51, 0x56, 0x9e, 0xae, 0x70, 0x69, 0x7f, 0x93, 0x70, 0x47, 0x8a, 0xca, 0x56, 0xa4, - 0xb2, 0x95, 0x70, 0x4f, 0xe5, 0xd3, 0xb8, 0xa7, 0x5b, 0x30, 0xe5, 0x07, 0x66, 0xc0, 0x1d, 0x64, - 0x53, 0x19, 0x5c, 0xb2, 0x4b, 0xac, 0x73, 0x36, 0x74, 0x01, 0xa0, 0xef, 0x61, 0x33, 0xc0, 0x96, - 0x61, 0x72, 0xcf, 0x59, 0xd1, 0x6b, 0x82, 0xd2, 0x0d, 0xd0, 0x3d, 0x98, 0x91, 0x31, 0xcc, 0x14, - 0x53, 0x63, 0x35, 0x47, 0x60, 0x62, 0xf6, 0x75, 0xd9, 0x20, 0xde, 0xed, 0xd3, 0xe3, 0x77, 0xbb, - 0x68, 0xc7, 0x99, 0x15, 0x87, 0x35, 0x53, 0xe8, 0xb0, 0x78, 0x8b, 0x93, 0x38, 0xac, 0x6a, 0xa1, - 0xc3, 0x12, 0x32, 0xc6, 0x3a, 0xac, 0xef, 0xd3, 0xf5, 0xfc, 0x6b, 0x09, 0xda, 0xd9, 0xbd, 0x23, - 0x7c, 0xc6, 0xbb, 0x30, 0xed, 0x33, 0xca, 0x18, 0xff, 0x23, 0x9a, 0x08, 0x46, 0xf4, 0x00, 0x26, - 0x6d, 0xe7, 0x90, 0xb0, 0x1c, 0x42, 0x3d, 0xf9, 0x8b, 0xfa, 0xb8, 0xb5, 0xe5, 0x1c, 0x12, 0x3e, - 0x25, 0xac, 0x61, 0xe7, 0x2e, 0xd4, 0x22, 0xd2, 0xa9, 0x46, 0xf2, 0x10, 0x16, 0x52, 0xc6, 0xc7, - 0xa3, 0xd7, 0xc8, 0x54, 0x4b, 0x27, 0x32, 0x55, 0xed, 0xff, 0x4b, 0xea, 0xc6, 0x79, 0x68, 0x0f, - 0x03, 0xec, 0x65, 0x36, 0xce, 0x7b, 0x52, 0x28, 0xdf, 0x35, 0x17, 0x8a, 0x84, 0xf2, 0xc0, 0x52, - 0x6c, 0x82, 0x1e, 0x34, 0x99, 0xf9, 0x18, 0x3e, 0x1e, 0xb2, 0x53, 0x5a, 0xc4, 0x47, 0x3f, 0xcc, - 0x69, 0xcd, 0xfb, 0xe5, 0xb6, 0xd7, 0x13, 0xec, 0x7c, 0x9a, 0x1a, 0x43, 0x95, 0xd6, 0xf9, 0x04, - 0x50, 0x96, 0xe9, 0x54, 0x13, 0xf7, 0x19, 0x75, 0x3b, 0x34, 0x9b, 0xca, 0x39, 0x7e, 0x0e, 0x99, - 0x1a, 0x63, 0x96, 0x9f, 0xeb, 0xa9, 0x0b, 0x46, 0xed, 0xaf, 0x2b, 0x00, 0x71, 0xe5, 0x1b, 0xeb, - 0x6f, 0xee, 0x46, 0xbb, 0x9f, 0x87, 0x38, 0x17, 0x73, 0xe4, 0xe5, 0xee, 0xfb, 0x87, 0xc9, 0x7d, - 0xcf, 0x83, 0x9d, 0xb7, 0xf2, 0x5a, 0xbf, 0xb1, 0x3b, 0x7e, 0x1d, 0x16, 0xd3, 0xcb, 0x2d, 0xb6, - 0xfb, 0x75, 0x98, 0xb2, 0x03, 0x3c, 0xe2, 0xd8, 0x80, 0x9a, 0x23, 0x29, 0xbc, 0x9c, 0x43, 0xbb, - 0x04, 0xb5, 0xad, 0x91, 0x39, 0xc0, 0x3d, 0x17, 0xf7, 0x69, 0x5f, 0x36, 0x2d, 0x88, 0xfe, 0x79, - 0x41, 0x5b, 0x83, 0xea, 0x63, 0x7c, 0xcc, 0xf7, 0xe0, 0x09, 0xf5, 0xd3, 0xfe, 0xbc, 0x0c, 0x4b, - 0xcc, 0x6d, 0xaf, 0xcb, 0xcc, 0x5c, 0xc7, 0x3e, 0x09, 0xbd, 0x3e, 0xf6, 0xd9, 0x92, 0xba, 0xa1, - 0xe1, 0x62, 0xcf, 0x26, 0x96, 0x48, 0x45, 0x6b, 0x7d, 0x37, 0xdc, 0x65, 0x04, 0x9a, 0xbd, 0xd3, - 0xea, 0x6f, 0x42, 0x22, 0x6c, 0xab, 0xa2, 0x57, 0xfb, 0x6e, 0xf8, 0x63, 0x5a, 0x96, 0x6d, 0xfd, - 0x23, 0xd3, 0xc3, 0x3e, 0xb3, 0x21, 0xde, 0xb6, 0xc7, 0x08, 0xe8, 0x5d, 0x38, 0x3b, 0xc2, 0x23, - 0xe2, 0x1d, 0x1b, 0x43, 0x7b, 0x64, 0x07, 0x86, 0xed, 0x18, 0x07, 0xc7, 0x01, 0xf6, 0x85, 0xe1, - 0x20, 0x5e, 0xf9, 0x84, 0xd6, 0x6d, 0x39, 0x9f, 0xd2, 0x1a, 0xa4, 0x41, 0x83, 0x90, 0x91, 0xe1, - 0xf7, 0x89, 0x87, 0x0d, 0xd3, 0xfa, 0x8a, 0x9d, 0x5b, 0x15, 0xbd, 0x4e, 0xc8, 0xa8, 0x47, 0x69, - 0x5d, 0xeb, 0x2b, 0x74, 0x11, 0xea, 0x7d, 0x37, 0xf4, 0x71, 0x60, 0xd0, 0x1f, 0x76, 0x3e, 0xd5, - 0x74, 0xe0, 0xa4, 0x75, 0x37, 0xf4, 0x15, 0x86, 0x11, 0x9d, 0xf6, 0x19, 0x95, 0xe1, 0x29, 0x9d, - 0x66, 0x13, 0x1a, 0x89, 0xe4, 0x96, 0xa6, 0x30, 0x2c, 0x8b, 0x15, 0x29, 0x0c, 0xfd, 0xa6, 0x34, - 0x8f, 0x0c, 0xe5, 0x4c, 0xb2, 0x6f, 0x4a, 0x0b, 0x8e, 0x5d, 0x99, 0xbf, 0xb0, 0x6f, 0x3a, 0xe5, - 0x43, 0xfc, 0x4c, 0x80, 0x13, 0x35, 0x9d, 0x17, 0x34, 0x0b, 0x60, 0xdd, 0x74, 0xcd, 0x03, 0x7b, - 0x68, 0x07, 0xc7, 0xe8, 0x3a, 0xb4, 0x4c, 0xcb, 0x32, 0xfa, 0x92, 0x62, 0x63, 0x89, 0x14, 0xcd, - 0x99, 0x96, 0xb5, 0xae, 0x90, 0xd1, 0x0f, 0x60, 0xde, 0xf2, 0x88, 0x9b, 0xe4, 0xe5, 0xd0, 0x51, - 0x8b, 0x56, 0xa8, 0xcc, 0xda, 0x3f, 0x4e, 0xc2, 0x85, 0xe4, 0xc2, 0xa6, 0xe1, 0x82, 0xbb, 0x30, - 0x9b, 0xea, 0x35, 0x99, 0xa7, 0xc7, 0x4a, 0xea, 0x09, 0xc6, 0x54, 0x42, 0x5d, 0xce, 0x24, 0xd4, - 0xb9, 0x38, 0x44, 0xe5, 0xbb, 0xc0, 0x21, 0x26, 0xbf, 0x0d, 0x0e, 0x31, 0x75, 0x22, 0x1c, 0xe2, - 0x2a, 0x83, 0x05, 0x65, 0x23, 0x96, 0x0d, 0x72, 0x33, 0x6a, 0x44, 0x3c, 0x8e, 0x84, 0x0f, 0x53, - 0x78, 0xc5, 0xcc, 0x69, 0xf0, 0x8a, 0x6a, 0x21, 0x5e, 0x41, 0x2d, 0xc2, 0x75, 0x4d, 0x6f, 0x44, - 0x3c, 0x09, 0x48, 0xb4, 0x6b, 0x4c, 0x85, 0x39, 0x49, 0x17, 0x60, 0x44, 0x21, 0x74, 0x01, 0x45, - 0xd0, 0x05, 0x5a, 0x85, 0x59, 0x87, 0x18, 0x0e, 0x7e, 0x6e, 0xd0, 0x05, 0xf3, 0xdb, 0x75, 0xbe, - 0x7a, 0x0e, 0xd9, 0xc6, 0xcf, 0x77, 0x29, 0x45, 0xfb, 0xdb, 0x12, 0x2c, 0x24, 0x0d, 0x47, 0x24, - 0xab, 0xf7, 0xa1, 0xe6, 0x49, 0xdf, 0x20, 0x8c, 0x65, 0x35, 0x19, 0xfa, 0x65, 0x7d, 0x88, 0x1e, - 0x37, 0x41, 0x3f, 0x2e, 0x84, 0x3d, 0xae, 0x16, 0x88, 0x79, 0x15, 0xf0, 0xa1, 0x75, 0x61, 0x3e, - 0x62, 0x1e, 0x0b, 0x3a, 0x28, 0x20, 0x42, 0x39, 0x09, 0x22, 0x38, 0x30, 0xbd, 0x81, 0x9f, 0xd9, - 0x7d, 0xfc, 0x9d, 0x80, 0x96, 0xab, 0x50, 0x77, 0xb1, 0x37, 0xb2, 0x7d, 0x3f, 0x32, 0xfa, 0x9a, - 0xae, 0x92, 0xb4, 0xff, 0x9a, 0x82, 0xb9, 0xf4, 0xcc, 0xde, 0xc9, 0x60, 0x16, 0x9d, 0x78, 0x17, - 0xa6, 0xc7, 0xa7, 0x9c, 0xd1, 0xd7, 0xe4, 0x31, 0x50, 0x4e, 0x25, 0x28, 0xd1, 0x49, 0x21, 0x8e, - 0x06, 0x3a, 0xfe, 0x3e, 0x19, 0x8d, 0x4c, 0xc7, 0x92, 0x80, 0xb2, 0x28, 0xd2, 0xd9, 0x32, 0xbd, - 0x01, 0xdd, 0x5a, 0x94, 0xcc, 0xbe, 0xa9, 0x97, 0xa4, 0x81, 0xbe, 0xed, 0x30, 0xc8, 0x83, 0x6d, - 0x9c, 0x9a, 0x0e, 0x82, 0xb4, 0x61, 0x7b, 0xe8, 0x0a, 0x4c, 0x62, 0xe7, 0x99, 0x3c, 0x8d, 0x63, - 0xc4, 0x59, 0x1e, 0x3f, 0x3a, 0xab, 0x46, 0x57, 0x61, 0x7a, 0x44, 0x42, 0x27, 0x90, 0x21, 0x7f, - 0x33, 0x09, 0xbc, 0xea, 0xa2, 0x16, 0x5d, 0x87, 0x19, 0x8b, 0xad, 0x81, 0x8c, 0xeb, 0xe7, 0x62, - 0xd8, 0x84, 0xd1, 0x75, 0x59, 0x8f, 0x3e, 0x8a, 0xe2, 0x88, 0x5a, 0x2a, 0x12, 0x48, 0x4d, 0x6a, - 0x6e, 0x30, 0xf1, 0x38, 0x19, 0x4c, 0x00, 0x13, 0x71, 0xbd, 0x50, 0xc4, 0x78, 0xd0, 0x63, 0x19, - 0xaa, 0x43, 0x32, 0xe0, 0x76, 0x50, 0xe7, 0xd7, 0x0f, 0x43, 0x32, 0x60, 0x66, 0xb0, 0x40, 0x83, - 0x27, 0xcb, 0x76, 0xda, 0xb3, 0x6c, 0x7b, 0xf1, 0x02, 0x3d, 0x13, 0xd9, 0x87, 0x41, 0x9c, 0x3e, - 0x6e, 0x37, 0x58, 0x55, 0x8d, 0x51, 0x76, 0x9c, 0x3e, 0x3b, 0xb2, 0x83, 0xe0, 0xb8, 0xdd, 0x64, - 0x74, 0xfa, 0x49, 0x63, 0x5e, 0x9e, 0x68, 0xcd, 0xa5, 0x62, 0xde, 0xbc, 0xfd, 0xf9, 0x06, 0xa0, - 0x2a, 0xff, 0x50, 0x82, 0xc5, 0x75, 0x16, 0xf2, 0x29, 0x9e, 0xe0, 0x34, 0xa8, 0xc0, 0xed, 0x08, - 0x7e, 0x49, 0xa7, 0xf0, 0xe9, 0xc1, 0x0a, 0x3e, 0xf4, 0x09, 0x34, 0xa5, 0x4c, 0xd1, 0xb2, 0xf2, - 0x2a, 0xe0, 0xa6, 0xe1, 0xab, 0x45, 0xed, 0x23, 0x58, 0xca, 0xe8, 0x2c, 0xc2, 0xb3, 0x4b, 0x30, - 0x1b, 0x7b, 0x84, 0x48, 0xe5, 0x7a, 0x44, 0xdb, 0xb2, 0xb4, 0x7b, 0x70, 0xb6, 0x17, 0x98, 0x5e, - 0x90, 0x19, 0xf0, 0x09, 0xda, 0x32, 0xec, 0x26, 0xd9, 0x56, 0xc0, 0x2b, 0x3d, 0x58, 0xe8, 0x05, - 0xc4, 0x7d, 0x0d, 0xa1, 0x74, 0xa7, 0xd3, 0x61, 0x93, 0x30, 0x10, 0x31, 0x99, 0x2c, 0x6a, 0x4b, - 0x1c, 0x69, 0xca, 0xf6, 0xf6, 0x21, 0x2c, 0x72, 0xa0, 0xe7, 0x75, 0x06, 0xb1, 0x2c, 0x61, 0xa6, - 0xac, 0xdc, 0x0d, 0x38, 0x13, 0xbb, 0xf2, 0x38, 0x3d, 0xbc, 0x99, 0x4c, 0x0f, 0x97, 0xb2, 0x6b, - 0x9c, 0xc8, 0x0e, 0xff, 0xa2, 0xac, 0x38, 0xcc, 0x82, 0xe4, 0x70, 0x2d, 0x99, 0x1c, 0x9e, 0x2f, - 0x10, 0x99, 0xc8, 0x0d, 0xb3, 0x16, 0x59, 0xc9, 0xb1, 0x48, 0x3d, 0x93, 0x41, 0x4e, 0xa6, 0xf2, - 0xec, 0x94, 0x6e, 0xbf, 0x95, 0x04, 0x72, 0x8b, 0x27, 0x90, 0x51, 0xd7, 0x11, 0xf8, 0x76, 0x3b, - 0x95, 0x40, 0xb6, 0x8b, 0xd4, 0x8c, 0xf2, 0xc7, 0x3f, 0x9d, 0x84, 0x5a, 0x54, 0x97, 0x99, 0xd8, - 0xec, 0x24, 0x95, 0x73, 0x26, 0x49, 0x3d, 0xbf, 0x2a, 0xaf, 0x73, 0x7e, 0x4d, 0xbe, 0xea, 0xfc, - 0x3a, 0x07, 0x35, 0xf6, 0x61, 0x78, 0xf8, 0x50, 0x9c, 0x47, 0x55, 0x46, 0xd0, 0xf1, 0x61, 0x6c, - 0x50, 0xd3, 0x27, 0x31, 0xa8, 0x54, 0xa6, 0x3a, 0x93, 0xce, 0x54, 0xef, 0x44, 0x27, 0x0c, 0x3f, - 0x8b, 0x56, 0xb2, 0xe2, 0x72, 0xcf, 0x96, 0xcd, 0xe4, 0xd9, 0xc2, 0x8f, 0xa7, 0xcb, 0x39, 0x8d, - 0xdf, 0xd8, 0x3c, 0xf5, 0x09, 0xcf, 0x53, 0x55, 0xab, 0x12, 0x8e, 0x70, 0x0d, 0x20, 0xda, 0xf3, - 0x32, 0x59, 0x45, 0xd9, 0xa1, 0xe9, 0x0a, 0x97, 0xb6, 0x0f, 0x8b, 0x89, 0xf9, 0x8f, 0x11, 0xe2, - 0x93, 0x79, 0xb1, 0x02, 0x78, 0xf8, 0x5f, 0xd4, 0xf8, 0xa9, 0x00, 0x64, 0xbd, 0x93, 0x01, 0x3d, - 0x4e, 0x66, 0x8f, 0x37, 0x93, 0x98, 0xc7, 0xe9, 0x0c, 0x29, 0x03, 0x79, 0xb0, 0xe3, 0xde, 0xf4, - 0x44, 0x35, 0xcf, 0x56, 0x6b, 0x82, 0xd2, 0x0d, 0x68, 0x90, 0x75, 0x68, 0x3b, 0xb6, 0x7f, 0xc4, - 0xeb, 0xa7, 0x59, 0x3d, 0x48, 0x52, 0x97, 0x5d, 0xc2, 0xe3, 0x17, 0x76, 0x60, 0xf4, 0x89, 0x85, - 0x99, 0x99, 0x4e, 0xe9, 0x55, 0x4a, 0x58, 0x27, 0x16, 0x8e, 0xb7, 0x4e, 0xf5, 0x54, 0x5b, 0xa7, - 0x96, 0xda, 0x3a, 0x8b, 0x30, 0xed, 0x61, 0xd3, 0x27, 0x8e, 0x48, 0x19, 0x44, 0x89, 0xce, 0xff, - 0x08, 0xfb, 0x3e, 0xed, 0x40, 0x84, 0x36, 0xa2, 0xa8, 0x04, 0x60, 0xb3, 0x45, 0x01, 0xd8, 0x18, - 0x14, 0x37, 0x15, 0x80, 0x35, 0x8a, 0x02, 0xb0, 0x93, 0x80, 0xb8, 0x4a, 0x78, 0xd9, 0x1c, 0x1b, - 0x5e, 0xaa, 0x81, 0xda, 0x5c, 0x22, 0x50, 0xfb, 0x3e, 0x77, 0xdb, 0x3f, 0x97, 0x60, 0x29, 0xb3, - 0x41, 0xc4, 0x7e, 0xbb, 0x9d, 0x82, 0x81, 0xdb, 0x45, 0x33, 0x14, 0xa1, 0xc0, 0xf7, 0x13, 0x28, - 0xf0, 0x8d, 0x42, 0xfe, 0xef, 0x1c, 0x04, 0xfe, 0x43, 0xb8, 0xb8, 0xef, 0x5a, 0xa9, 0xf0, 0x49, - 0x24, 0x7f, 0x27, 0xdf, 0xef, 0x77, 0x64, 0xa4, 0x5b, 0x3e, 0x61, 0x5e, 0xc9, 0xd9, 0x35, 0x0d, - 0x56, 0x8b, 0x7b, 0x17, 0x61, 0xc8, 0xef, 0xc3, 0xdc, 0xe6, 0x0b, 0xdc, 0xef, 0x1d, 0x3b, 0xfd, - 0x53, 0x68, 0xd4, 0x82, 0x4a, 0x7f, 0x64, 0x09, 0x78, 0x85, 0x7e, 0xaa, 0x91, 0x55, 0x25, 0x19, - 0x59, 0x19, 0xd0, 0x8a, 0x7b, 0x10, 0x4b, 0xb8, 0x48, 0x97, 0xd0, 0xa2, 0xcc, 0x54, 0xf8, 0xac, - 0x2e, 0x4a, 0x82, 0x8e, 0x3d, 0x8f, 0x0d, 0x95, 0xd3, 0xb1, 0xe7, 0x25, 0x77, 0x7b, 0x25, 0xb9, - 0xdb, 0xb5, 0xbf, 0x2a, 0x41, 0x9d, 0xf6, 0xf0, 0xad, 0xf4, 0x17, 0xf9, 0x45, 0x25, 0xce, 0x2f, - 0xa2, 0x34, 0x65, 0x52, 0x4d, 0x53, 0x62, 0xcd, 0xa7, 0x18, 0x39, 0xab, 0xf9, 0x74, 0x44, 0xc7, - 0x9e, 0xa7, 0xad, 0xc2, 0x2c, 0xd7, 0x4d, 0x8c, 0xbc, 0x05, 0x95, 0xd0, 0x1b, 0x4a, 0xeb, 0x09, - 0xbd, 0xa1, 0xf6, 0x67, 0x25, 0x68, 0x74, 0x83, 0xc0, 0xec, 0x1f, 0x9d, 0x62, 0x00, 0x91, 0x72, - 0x65, 0x55, 0xb9, 0xec, 0x20, 0x62, 0x75, 0x27, 0x0b, 0xd4, 0x9d, 0x4a, 0xa8, 0xab, 0x41, 0x53, - 0xea, 0x52, 0xa8, 0xf0, 0x36, 0xa0, 0x5d, 0xe2, 0x05, 0x0f, 0x89, 0xf7, 0xdc, 0xf4, 0xac, 0xd3, - 0xe5, 0x30, 0x08, 0x26, 0xc5, 0xc3, 0xaa, 0xca, 0xb5, 0x29, 0x9d, 0x7d, 0x6b, 0x6f, 0xc3, 0x99, - 0x84, 0xbc, 0xc2, 0x8e, 0xef, 0x42, 0x9d, 0x39, 0x70, 0x11, 0xe7, 0x5e, 0x53, 0x71, 0xde, 0x71, - 0x5e, 0x5e, 0xeb, 0xc2, 0x3c, 0x3d, 0xbb, 0x19, 0x3d, 0xda, 0x78, 0x3f, 0x4c, 0x45, 0x83, 0x0b, - 0xc9, 0xf6, 0xa9, 0x48, 0xf0, 0xef, 0x4a, 0x30, 0xc5, 0xe8, 0x99, 0xf3, 0xf4, 0x1c, 0xd4, 0x3c, - 0xec, 0x12, 0x23, 0x30, 0x07, 0xd1, 0x5b, 0x35, 0x4a, 0xd8, 0x33, 0x07, 0x3e, 0x7b, 0x6a, 0x47, - 0x2b, 0x2d, 0x7b, 0x80, 0xfd, 0x40, 0x3e, 0x58, 0xab, 0x53, 0xda, 0x06, 0x27, 0xd1, 0x29, 0xf1, - 0xed, 0x3f, 0xe0, 0x61, 0xde, 0xa4, 0xce, 0xbe, 0xd1, 0x15, 0xfe, 0x0c, 0x64, 0x0c, 0x28, 0xc7, - 0xde, 0x86, 0x74, 0xa0, 0x9a, 0xc2, 0xe1, 0xa2, 0xb2, 0xf6, 0x11, 0x20, 0x75, 0xcc, 0x62, 0x52, - 0xaf, 0xc2, 0x34, 0x9b, 0x12, 0x19, 0xa7, 0x34, 0x93, 0x83, 0xd6, 0x45, 0xad, 0xf6, 0x05, 0x20, - 0x3e, 0x8b, 0x89, 0xd8, 0xe4, 0xc4, 0x33, 0x3e, 0x26, 0x44, 0xf9, 0xfb, 0x12, 0x9c, 0x49, 0x88, - 0x8e, 0x1e, 0x04, 0x24, 0x64, 0xa7, 0x15, 0x13, 0x72, 0xef, 0x25, 0x3c, 0xf9, 0xd5, 0x94, 0x02, - 0xbf, 0x21, 0x2f, 0xfe, 0xcb, 0x12, 0x40, 0x37, 0x0c, 0x8e, 0x04, 0x20, 0xa5, 0xce, 0x7a, 0x29, - 0x39, 0xeb, 0xb4, 0xce, 0x35, 0x7d, 0xff, 0x39, 0xf1, 0x64, 0x32, 0x10, 0x95, 0x19, 0x98, 0x14, - 0x06, 0x47, 0x12, 0x04, 0xa7, 0xdf, 0xe8, 0x0a, 0x34, 0xf9, 0x93, 0x47, 0xc3, 0xb4, 0x2c, 0x0f, - 0xfb, 0xbe, 0x40, 0xc3, 0x1b, 0x9c, 0xda, 0xe5, 0x44, 0xca, 0x66, 0x5b, 0xd8, 0x09, 0xec, 0xe0, - 0xd8, 0x08, 0xc8, 0xd7, 0xd8, 0x11, 0x61, 0x7e, 0x43, 0x52, 0xf7, 0x28, 0x91, 0xb2, 0x79, 0x78, - 0x60, 0xfb, 0x81, 0x27, 0xd9, 0x24, 0x3a, 0x2b, 0xa8, 0x8c, 0x4d, 0xfb, 0x79, 0x09, 0x5a, 0xbb, - 0xe1, 0x70, 0xc8, 0x67, 0xf6, 0xd4, 0x6b, 0xfb, 0xb6, 0x18, 0x47, 0x39, 0x65, 0x9d, 0xf1, 0x14, - 0x89, 0xc1, 0x7d, 0x7b, 0xf8, 0xe1, 0x36, 0xcc, 0x2b, 0x8a, 0x0a, 0x4b, 0x49, 0xc4, 0x6c, 0xa5, - 0x64, 0xcc, 0xa6, 0xdd, 0x07, 0xc4, 0x33, 0xee, 0xd7, 0x1b, 0x9c, 0x76, 0x16, 0xce, 0x24, 0xda, - 0x8b, 0x63, 0xf2, 0x06, 0x34, 0xc4, 0x7d, 0xbf, 0x30, 0x82, 0x65, 0xa8, 0x52, 0x77, 0xd7, 0xb7, - 0x2d, 0x79, 0xfb, 0x31, 0xe3, 0x12, 0x6b, 0xdd, 0xb6, 0x3c, 0x6d, 0x1b, 0x1a, 0x3a, 0x17, 0x2f, - 0x78, 0x3f, 0x86, 0xa6, 0x78, 0x1d, 0x60, 0x24, 0xde, 0xcf, 0xc4, 0x50, 0x7d, 0x42, 0xb6, 0xde, - 0x70, 0xd4, 0xa2, 0xf6, 0x53, 0xe8, 0xf0, 0x63, 0x3c, 0x21, 0x55, 0x0e, 0xed, 0x63, 0x90, 0x4f, - 0x72, 0x8b, 0x84, 0x27, 0x9b, 0x35, 0x3c, 0xb5, 0xa8, 0x5d, 0x80, 0x73, 0xb9, 0xc2, 0xc5, 0xb8, - 0x5d, 0x68, 0xc5, 0x15, 0x96, 0x2d, 0x2f, 0x7d, 0xd8, 0x65, 0x4e, 0x49, 0xb9, 0xcc, 0x59, 0x8c, - 0x62, 0xb2, 0xb2, 0x3c, 0x4f, 0x58, 0xe4, 0x15, 0x87, 0xd0, 0x95, 0xa2, 0x10, 0x7a, 0x32, 0x11, - 0x42, 0x6b, 0x9f, 0x45, 0xb3, 0x27, 0xf2, 0x97, 0x0f, 0x58, 0x7a, 0xc5, 0xfb, 0x96, 0x6e, 0x6b, - 0x39, 0x67, 0x70, 0x9c, 0x43, 0x57, 0x98, 0xb5, 0xeb, 0xd0, 0x48, 0x3a, 0x30, 0xc5, 0x2d, 0x95, - 0x32, 0x6e, 0xa9, 0x99, 0xf2, 0x48, 0xb7, 0x52, 0x71, 0x66, 0x66, 0x46, 0x53, 0x51, 0xe6, 0xfb, - 0x09, 0xdf, 0x74, 0x29, 0xbe, 0x87, 0xf9, 0x0d, 0xb9, 0xa5, 0x05, 0xe1, 0xa3, 0x1f, 0xfa, 0xb4, - 0xbd, 0x18, 0xa2, 0x76, 0x19, 0xea, 0xfb, 0x45, 0x8f, 0x65, 0x27, 0xe5, 0xc5, 0xe6, 0xdb, 0x30, - 0xdf, 0x0b, 0x88, 0x67, 0x0e, 0xf0, 0x16, 0x73, 0x20, 0x87, 0x36, 0xbf, 0xb8, 0x0b, 0xc3, 0xe8, - 0x68, 0x63, 0xdf, 0xda, 0x7f, 0x94, 0x60, 0xee, 0xa1, 0x3d, 0xc4, 0xfe, 0xb1, 0x1f, 0xe0, 0xd1, - 0x3e, 0x4b, 0x72, 0xce, 0x43, 0x8d, 0x8e, 0xcb, 0x0f, 0xcc, 0x91, 0x2b, 0x2f, 0x3e, 0x23, 0x02, - 0x5d, 0x2e, 0x9f, 0x8b, 0x96, 0x80, 0x88, 0x9a, 0x60, 0x66, 0x7a, 0xa5, 0x49, 0x9f, 0x20, 0xa1, - 0xf7, 0x00, 0x42, 0x1f, 0x5b, 0xe2, 0xb2, 0xb3, 0x92, 0x3a, 0x95, 0xf7, 0xd5, 0x2b, 0x29, 0xca, - 0xc7, 0x6f, 0x3e, 0xdf, 0x87, 0xba, 0xed, 0x10, 0x0b, 0xb3, 0x2b, 0x29, 0x4b, 0x80, 0x25, 0xf9, - 0xad, 0x80, 0x33, 0xee, 0xfb, 0xd8, 0xd2, 0x7e, 0x4f, 0x9c, 0x42, 0x72, 0xf2, 0xc4, 0x9a, 0x6f, - 0xc2, 0x3c, 0xf7, 0x2d, 0x87, 0xd1, 0xa0, 0xa5, 0xcd, 0xc5, 0x69, 0x46, 0x6a, 0x42, 0xf4, 0x96, - 0x2d, 0x02, 0x06, 0xd9, 0x42, 0xbb, 0x07, 0x67, 0x13, 0xb9, 0xc5, 0x29, 0xa2, 0x7d, 0xed, 0x51, - 0x0a, 0x1a, 0x88, 0x0d, 0x52, 0x64, 0xe0, 0xd2, 0x1e, 0x0b, 0x32, 0x70, 0x9f, 0x67, 0xe0, 0xbe, - 0xa6, 0xc3, 0x72, 0x02, 0xb1, 0x48, 0x28, 0xf2, 0x7e, 0x2a, 0xfa, 0xb9, 0x50, 0x20, 0x2c, 0x15, - 0x06, 0xfd, 0x6f, 0x09, 0x16, 0xf2, 0x18, 0x5e, 0x13, 0x1b, 0xfb, 0x49, 0xc1, 0x13, 0x94, 0xdb, - 0x63, 0xb5, 0xf9, 0xad, 0xa0, 0x88, 0x8f, 0xa1, 0x93, 0x37, 0x7b, 0xd9, 0xa5, 0xa8, 0x9c, 0x60, - 0x29, 0xfe, 0xaf, 0xac, 0xa0, 0xbd, 0xdd, 0x20, 0xf0, 0xec, 0x83, 0x90, 0x1a, 0xef, 0x77, 0x85, - 0xcd, 0x7c, 0x12, 0xe1, 0x0e, 0x7c, 0xfe, 0xae, 0x65, 0x5b, 0xc5, 0xbd, 0xe6, 0x62, 0x0f, 0x3b, - 0x49, 0xec, 0x81, 0xe3, 0xb8, 0x37, 0xc7, 0x8a, 0x79, 0x63, 0xa1, 0xba, 0x97, 0x25, 0x68, 0x26, - 0xd7, 0x01, 0x7d, 0x04, 0x60, 0x46, 0x9a, 0x0b, 0x93, 0x3f, 0x3f, 0x6e, 0x74, 0xba, 0xc2, 0x8f, - 0x2e, 0x43, 0xa5, 0xef, 0x86, 0x62, 0x45, 0xe2, 0x0b, 0xbd, 0x75, 0x37, 0xe4, 0x0e, 0x80, 0xd6, - 0xd2, 0x7c, 0x82, 0x3f, 0xcc, 0xc8, 0x78, 0xae, 0xa7, 0x8c, 0xcc, 0x59, 0x05, 0x0f, 0x7a, 0x00, - 0xcd, 0xe7, 0x9e, 0x1d, 0x98, 0x07, 0x43, 0x6c, 0x0c, 0xcd, 0x63, 0xec, 0x09, 0xcf, 0x55, 0xec, - 0x65, 0x1a, 0x92, 0xff, 0x09, 0x65, 0xd7, 0x42, 0xa8, 0xca, 0xfe, 0x5f, 0xe1, 0x91, 0x1f, 0xc3, - 0x52, 0x48, 0xd9, 0x0c, 0xf6, 0x38, 0xc4, 0x31, 0x1d, 0x62, 0xf8, 0x98, 0x9e, 0x92, 0xf2, 0x2d, - 0x68, 0xbe, 0xb7, 0x5c, 0x60, 0x8d, 0xd6, 0x89, 0x87, 0xb7, 0x4d, 0x87, 0xf4, 0x78, 0x0b, 0x6d, - 0x04, 0x75, 0x65, 0x38, 0xaf, 0xe8, 0xf9, 0x13, 0x98, 0x97, 0x57, 0xa5, 0x3e, 0x0e, 0x84, 0x5f, - 0x1f, 0xd7, 0xe7, 0x9c, 0x60, 0xef, 0xe1, 0x80, 0x79, 0xf7, 0x1b, 0xe7, 0xa1, 0x2a, 0xff, 0xa8, - 0x83, 0x66, 0xa0, 0xb2, 0xb7, 0xbe, 0xdb, 0x9a, 0xa0, 0x1f, 0xfb, 0x1b, 0xbb, 0xad, 0xd2, 0x8d, - 0x11, 0xb4, 0xd2, 0x7f, 0x52, 0x41, 0x4b, 0x70, 0x66, 0x57, 0xdf, 0xd9, 0xed, 0x3e, 0xea, 0xee, - 0x6d, 0xed, 0x6c, 0x1b, 0xbb, 0xfa, 0xd6, 0xe7, 0xdd, 0xbd, 0xcd, 0xd6, 0x04, 0xba, 0x04, 0x17, - 0xd4, 0x8a, 0xdf, 0xdd, 0xe9, 0xed, 0x19, 0x7b, 0x3b, 0xc6, 0xfa, 0xce, 0xf6, 0x5e, 0x77, 0x6b, - 0x7b, 0x53, 0x6f, 0x95, 0xd0, 0x05, 0x58, 0x56, 0x59, 0x3e, 0xdd, 0xda, 0xd8, 0xd2, 0x37, 0xd7, - 0xe9, 0x77, 0xf7, 0x49, 0xab, 0x7c, 0xe3, 0x1e, 0xcc, 0xa5, 0xde, 0x77, 0xa1, 0x79, 0x68, 0xf4, - 0xba, 0xdb, 0x1b, 0x9f, 0xee, 0x7c, 0x61, 0xe8, 0x9b, 0xdd, 0x8d, 0x2f, 0x5b, 0x13, 0x68, 0x01, - 0x5a, 0x92, 0xb4, 0xbd, 0xb3, 0xc7, 0xa9, 0xa5, 0x1b, 0x5f, 0xa7, 0x4c, 0x12, 0xa3, 0xb3, 0x30, - 0x1f, 0xf5, 0x6d, 0xac, 0xeb, 0x9b, 0xdd, 0xbd, 0xcd, 0x8d, 0xd6, 0x44, 0x92, 0xac, 0xef, 0x6f, - 0x6f, 0x6f, 0x6d, 0x3f, 0x6a, 0x95, 0xa8, 0xd4, 0x98, 0xbc, 0xf9, 0xc5, 0x16, 0x65, 0x2e, 0x27, - 0x99, 0xf7, 0xb7, 0x1f, 0x6f, 0xef, 0xfc, 0x64, 0xbb, 0x55, 0x59, 0xfb, 0xf7, 0x06, 0x34, 0x65, - 0x8c, 0x82, 0x3d, 0x76, 0x7f, 0x7f, 0x1f, 0x66, 0xe4, 0x5f, 0xb6, 0x62, 0x67, 0x95, 0xfc, 0x7f, - 0x59, 0xa7, 0x9d, 0xad, 0x10, 0x61, 0xe0, 0x04, 0xda, 0x65, 0x61, 0x99, 0xf2, 0x96, 0xee, 0x82, - 0x1a, 0x0d, 0x65, 0x1e, 0xeb, 0x75, 0x56, 0x8a, 0xaa, 0x23, 0x89, 0x3d, 0x1a, 0x70, 0xa9, 0x8f, - 0xb3, 0xd1, 0x8a, 0x1a, 0x26, 0x64, 0x1f, 0x7d, 0x77, 0x2e, 0x16, 0xd6, 0x47, 0x42, 0xbf, 0x84, - 0x56, 0xfa, 0x59, 0x36, 0x8a, 0xf1, 0xb2, 0x82, 0x27, 0xdf, 0x9d, 0x4b, 0x63, 0x38, 0x54, 0xd1, - 0x99, 0x07, 0xcc, 0xab, 0x63, 0x1e, 0x94, 0xa6, 0x45, 0x17, 0x3d, 0x39, 0xe5, 0x53, 0x91, 0x7c, - 0x03, 0x87, 0xd4, 0x67, 0xc3, 0x39, 0x6f, 0x21, 0x95, 0xa9, 0xc8, 0x7f, 0x3c, 0xa7, 0x4d, 0xa0, - 0xcf, 0x61, 0x2e, 0x75, 0x75, 0x8b, 0xe2, 0x56, 0xf9, 0x17, 0xd1, 0x9d, 0xd5, 0x62, 0x86, 0xe4, - 0xba, 0xa9, 0x17, 0xb3, 0x89, 0x75, 0xcb, 0xb9, 0xed, 0x4d, 0xac, 0x5b, 0xee, 0x8d, 0x2e, 0x33, - 0xaf, 0xc4, 0xf5, 0xab, 0x62, 0x5e, 0x79, 0x77, 0xbd, 0x9d, 0x95, 0xa2, 0x6a, 0x75, 0xf8, 0xa9, - 0xab, 0x57, 0x65, 0xf8, 0xf9, 0x37, 0xba, 0x9d, 0xd5, 0x62, 0x86, 0xf4, 0x5a, 0xc5, 0xf7, 0x40, - 0xa9, 0xb5, 0xca, 0x5c, 0x3b, 0xa6, 0xd6, 0x2a, 0x7b, 0x81, 0x24, 0xd6, 0x2a, 0x75, 0x6d, 0x73, - 0xb1, 0x18, 0xa5, 0xce, 0xac, 0x55, 0x3e, 0x8c, 0xad, 0x4d, 0xa0, 0x6f, 0xa0, 0x5d, 0x84, 0x00, - 0xa3, 0x38, 0x46, 0x78, 0x05, 0x44, 0xdd, 0xb9, 0x7e, 0x02, 0xce, 0xa8, 0xcb, 0x2e, 0x54, 0x25, - 0xdc, 0x8b, 0x62, 0x87, 0x92, 0xc2, 0x98, 0x3b, 0xcb, 0x39, 0x35, 0x91, 0x88, 0xf7, 0x61, 0x92, - 0x52, 0xd1, 0x42, 0x82, 0x49, 0x36, 0x3d, 0x9b, 0xa2, 0x46, 0xcd, 0x3e, 0x84, 0x69, 0x8e, 0x5d, - 0xa2, 0x38, 0x53, 0x4b, 0x00, 0xab, 0x9d, 0xa5, 0x0c, 0x3d, 0x6a, 0xfc, 0x19, 0xff, 0xe7, 0xa8, - 0x00, 0x21, 0xd1, 0xb9, 0xc4, 0x9f, 0x8c, 0x92, 0x50, 0x67, 0xe7, 0x7c, 0x7e, 0xa5, 0x6a, 0x22, - 0xa9, 0xf0, 0x63, 0xa5, 0x28, 0x3e, 0xcc, 0x98, 0x48, 0x7e, 0xbc, 0xa9, 0x4d, 0x20, 0x83, 0xe3, - 0x79, 0x29, 0xc1, 0x5a, 0xbe, 0x6d, 0x25, 0x84, 0x5f, 0x1e, 0xcb, 0x13, 0x75, 0x70, 0x00, 0x67, - 0x72, 0x90, 0x00, 0x74, 0x39, 0xb5, 0xf8, 0x79, 0x20, 0x44, 0xe7, 0xad, 0xf1, 0x4c, 0xea, 0x12, - 0x09, 0xf3, 0x5e, 0xcc, 0xa4, 0xc7, 0xe9, 0x25, 0x4a, 0x1b, 0xf3, 0xda, 0x1f, 0x57, 0x60, 0x96, - 0xe3, 0x35, 0xe2, 0x4c, 0x7b, 0x04, 0x10, 0x43, 0x9c, 0xa8, 0x93, 0x18, 0x66, 0x02, 0xeb, 0xed, - 0x9c, 0xcb, 0xad, 0x53, 0x17, 0x5f, 0x01, 0x10, 0x95, 0xc5, 0xcf, 0x62, 0xa0, 0xca, 0xe2, 0xe7, - 0x60, 0x8e, 0xda, 0x04, 0xda, 0x80, 0x5a, 0x04, 0x59, 0x21, 0x05, 0xe9, 0x4a, 0xe1, 0x6d, 0x9d, - 0x4e, 0x5e, 0x95, 0xaa, 0x91, 0x02, 0x43, 0x29, 0x1a, 0x65, 0xc1, 0x2d, 0x45, 0xa3, 0x3c, 0xe4, - 0x2a, 0x1e, 0x1d, 0x4f, 0x75, 0xd3, 0xa3, 0x4b, 0xa0, 0x07, 0xe9, 0xd1, 0x25, 0xb3, 0x63, 0x6d, - 0xe2, 0xd3, 0xf3, 0xbf, 0xf8, 0xd5, 0x4a, 0xe9, 0x3f, 0x7f, 0xb5, 0x32, 0xf1, 0x47, 0x2f, 0x57, - 0x4a, 0xbf, 0x78, 0xb9, 0x52, 0xfa, 0xb7, 0x97, 0x2b, 0xa5, 0xff, 0x7e, 0xb9, 0x52, 0xfa, 0xd9, - 0xff, 0xac, 0x4c, 0x1c, 0x4c, 0xb3, 0xbf, 0x52, 0xbf, 0xf7, 0xeb, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xa6, 0x04, 0x77, 0x58, 0xfe, 0x3e, 0x00, 0x00, + // 4799 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5c, 0xdd, 0x6f, 0x1c, 0xc9, + 0x56, 0xf7, 0x7c, 0xd8, 0x9e, 0x39, 0xe3, 0x19, 0x8f, 0xcb, 0x5f, 0x93, 0x49, 0xe2, 0xc4, 0xbd, + 0x9b, 0xcd, 0x26, 0xcb, 0x7a, 0x37, 0xde, 0x65, 0x13, 0xb2, 0x5f, 0x99, 0xd8, 0xce, 0x5e, 0xdf, + 0x75, 0x6c, 0xd3, 0x63, 0xef, 0x87, 0x2e, 0xa8, 0x69, 0x4f, 0x97, 0xc7, 0xbd, 0x99, 0xe9, 0xee, + 0xdb, 0xd5, 0xe3, 0xc4, 0x48, 0x48, 0x3c, 0x20, 0x24, 0x40, 0x48, 0x08, 0xde, 0x90, 0x78, 0x43, + 0x42, 0xba, 0xbc, 0x21, 0x78, 0xe1, 0x81, 0x47, 0x74, 0x79, 0x00, 0xf1, 0x08, 0x6f, 0xdc, 0x45, + 0x42, 0x3c, 0x21, 0xfe, 0x01, 0x24, 0x54, 0x5f, 0xdd, 0xd5, 0x5f, 0x63, 0x3b, 0x37, 0xf7, 0xee, + 0x3e, 0xb9, 0xeb, 0xd4, 0xa9, 0x53, 0xa7, 0xea, 0x9c, 0x3a, 0x75, 0xea, 0x57, 0x35, 0x86, 0xaa, + 0xe9, 0xd9, 0x6b, 0x9e, 0xef, 0x06, 0x2e, 0xaa, 0x9c, 0xde, 0x33, 0x07, 0xde, 0x89, 0x79, 0xaf, + 0xfd, 0x76, 0xdf, 0x0e, 0x4e, 0x46, 0x47, 0x6b, 0x3d, 0x77, 0xf8, 0x4e, 0xdf, 0xed, 0xbb, 0xef, + 0x30, 0x86, 0xa3, 0xd1, 0x31, 0x2b, 0xb1, 0x02, 0xfb, 0xe2, 0x0d, 0xb5, 0xbb, 0xd0, 0xf8, 0x02, + 0xfb, 0xc4, 0x76, 0x1d, 0x1d, 0xff, 0x78, 0x84, 0x49, 0x80, 0x5a, 0x30, 0x7d, 0xca, 0x29, 0xad, + 0xc2, 0xcd, 0xc2, 0x9b, 0x55, 0x5d, 0x16, 0xb5, 0xbf, 0x2a, 0xc0, 0x6c, 0xc8, 0x4c, 0x3c, 0xd7, + 0x21, 0x38, 0x9f, 0x1b, 0xad, 0xc2, 0x8c, 0x3f, 0x72, 0x02, 0x7b, 0x88, 0x0d, 0xc7, 0x1c, 0xe2, + 0x56, 0x91, 0x55, 0xd7, 0x04, 0x6d, 0xd7, 0x1c, 0x62, 0x74, 0x1b, 0x66, 0x25, 0x8b, 0x14, 0x52, + 0x62, 0x5c, 0x0d, 0x41, 0x16, 0xbd, 0xa1, 0x35, 0x98, 0x97, 0x8c, 0xa6, 0x67, 0x87, 0xcc, 0x65, + 0xc6, 0x3c, 0x27, 0xaa, 0x3a, 0x9e, 0x2d, 0xf8, 0xb5, 0x1f, 0x41, 0x75, 0x73, 0xb7, 0xbb, 0xe1, + 0x3a, 0xc7, 0x76, 0x9f, 0xaa, 0x48, 0xb0, 0x4f, 0xdb, 0xb4, 0x0a, 0x37, 0x4b, 0x54, 0x45, 0x51, + 0x44, 0x6d, 0xa8, 0x10, 0x6c, 0xfa, 0xbd, 0x13, 0x4c, 0x5a, 0x45, 0x56, 0x15, 0x96, 0x69, 0x2b, + 0xd7, 0x0b, 0x6c, 0xd7, 0x21, 0xad, 0x12, 0x6f, 0x25, 0x8a, 0xda, 0x9f, 0x17, 0xa0, 0xb6, 0xef, + 0xfa, 0xc1, 0x53, 0xd3, 0xf3, 0x6c, 0xa7, 0x8f, 0xd6, 0xa0, 0xc2, 0xe6, 0xb2, 0xe7, 0x0e, 0xd8, + 0x1c, 0x34, 0xd6, 0xd1, 0x9a, 0x34, 0xc7, 0xda, 0xbe, 0xa8, 0xd1, 0x43, 0x1e, 0x74, 0x0b, 0x1a, + 0x3d, 0xd7, 0x09, 0x4c, 0xdb, 0xc1, 0xbe, 0xe1, 0xb9, 0x7e, 0xc0, 0xa6, 0x66, 0x52, 0xaf, 0x87, + 0x54, 0x2a, 0x1d, 0x5d, 0x85, 0xea, 0x89, 0x4b, 0x02, 0xce, 0x51, 0x62, 0x1c, 0x15, 0x4a, 0x60, + 0x95, 0xcb, 0x30, 0xcd, 0x2a, 0x6d, 0x4f, 0x4c, 0xc2, 0x14, 0x2d, 0x6e, 0x7b, 0xda, 0xbf, 0x14, + 0x60, 0xf2, 0xa9, 0x3b, 0x72, 0x82, 0x44, 0x37, 0x66, 0x70, 0x22, 0x0c, 0xa4, 0x74, 0x63, 0x06, + 0x27, 0x51, 0x37, 0x94, 0x83, 0xdb, 0x88, 0x77, 0x43, 0x2b, 0xdb, 0x50, 0xf1, 0xb1, 0x69, 0xb9, + 0xce, 0xe0, 0x8c, 0xa9, 0x50, 0xd1, 0xc3, 0x32, 0x35, 0x1e, 0xc1, 0x03, 0xdb, 0x19, 0xbd, 0x30, + 0x7c, 0x3c, 0x30, 0x8f, 0xf0, 0x80, 0xa9, 0x52, 0xd1, 0x1b, 0x82, 0xac, 0x73, 0x2a, 0xfa, 0x08, + 0x6a, 0x9e, 0xef, 0x7a, 0x66, 0xdf, 0xa4, 0xf3, 0xd7, 0x9a, 0x64, 0x53, 0xd4, 0x8e, 0xa6, 0x88, + 0xa9, 0xbb, 0x1f, 0x71, 0xe8, 0x2a, 0xbb, 0xf6, 0x0d, 0xcc, 0x52, 0x5f, 0x21, 0x9e, 0xd9, 0xc3, + 0x7b, 0xcc, 0x02, 0xd4, 0xb3, 0x98, 0xca, 0x0e, 0x0e, 0x9e, 0xbb, 0xfe, 0x33, 0x36, 0xae, 0x8a, + 0x5e, 0xa3, 0xb4, 0x5d, 0x4e, 0x42, 0x57, 0xa0, 0xc2, 0x47, 0x65, 0x5b, 0x6c, 0x50, 0x15, 0x9d, + 0xcd, 0xd7, 0xbe, 0x6d, 0x85, 0x55, 0xb6, 0xd7, 0x13, 0x63, 0x9a, 0xe6, 0x73, 0xd7, 0xd3, 0x34, + 0x80, 0x6d, 0x27, 0xf8, 0xe0, 0xfd, 0x2f, 0xcc, 0xc1, 0x08, 0xa3, 0x05, 0x98, 0x3c, 0xa5, 0x1f, + 0x4c, 0x7e, 0x49, 0xe7, 0x05, 0xed, 0x0f, 0x4a, 0x70, 0x75, 0x87, 0x0e, 0xaf, 0x6b, 0x3a, 0xd6, + 0x91, 0xfb, 0xa2, 0x8b, 0x7b, 0x23, 0xdf, 0x0e, 0xce, 0x36, 0x5c, 0x27, 0xc0, 0x2f, 0x02, 0xf4, + 0x04, 0xe6, 0x1c, 0xa9, 0xaf, 0x21, 0x3d, 0x88, 0x4a, 0xa8, 0xad, 0x5f, 0x89, 0xc6, 0x9c, 0x18, + 0x92, 0xde, 0x74, 0xe2, 0x04, 0x82, 0x1e, 0x45, 0xd3, 0x2b, 0xa5, 0x14, 0x99, 0x94, 0xe5, 0x48, + 0x4a, 0x77, 0x8b, 0x69, 0x22, 0x64, 0xc8, 0x79, 0x97, 0x12, 0xde, 0x07, 0xba, 0xd8, 0x0c, 0x93, + 0x18, 0x23, 0x82, 0x7d, 0x36, 0xd6, 0xda, 0xfa, 0x42, 0xd4, 0x3a, 0x1a, 0xaa, 0x5e, 0xf5, 0x47, + 0x4e, 0x87, 0x1c, 0x12, 0xec, 0xb3, 0x35, 0x29, 0x4c, 0x6c, 0xf8, 0xae, 0x1b, 0x1c, 0x13, 0x69, + 0x56, 0x49, 0xd6, 0x19, 0x15, 0xbd, 0x03, 0xf3, 0x64, 0xe4, 0x79, 0x03, 0x3c, 0xc4, 0x4e, 0x60, + 0x0e, 0x8c, 0xbe, 0xef, 0x8e, 0x3c, 0xd2, 0x9a, 0xbc, 0x59, 0x7a, 0xb3, 0xa4, 0x23, 0xb5, 0xea, + 0x33, 0x56, 0x83, 0x56, 0x00, 0x3c, 0xdf, 0x3e, 0xb5, 0x07, 0xb8, 0x8f, 0xad, 0xd6, 0x14, 0x13, + 0xaa, 0x50, 0xd0, 0xbb, 0xb0, 0x40, 0x70, 0xaf, 0xe7, 0x0e, 0x3d, 0xc3, 0xf3, 0xdd, 0x63, 0x7b, + 0x80, 0xb9, 0x53, 0x4e, 0x33, 0xa7, 0x44, 0xa2, 0x6e, 0x9f, 0x57, 0x51, 0xf7, 0xd4, 0xfe, 0xb4, + 0x08, 0x8b, 0x6c, 0x06, 0xf6, 0x5d, 0x4b, 0x98, 0x43, 0xac, 0xf9, 0xd7, 0xa0, 0xde, 0x63, 0x0a, + 0x19, 0x9e, 0xe9, 0x63, 0x27, 0x10, 0xbe, 0x3f, 0xc3, 0x89, 0xfb, 0x8c, 0x86, 0xf6, 0xa1, 0x49, + 0x84, 0xf5, 0x8c, 0x1e, 0x37, 0x9f, 0x98, 0xe3, 0x5b, 0xd1, 0x2c, 0x8d, 0xb1, 0xb5, 0x3e, 0x4b, + 0x52, 0xc6, 0x9f, 0x26, 0x67, 0xa4, 0x17, 0x0c, 0x78, 0xd0, 0xa8, 0xad, 0xff, 0x4a, 0x42, 0x50, + 0x52, 0xd1, 0xb5, 0x2e, 0x67, 0xdf, 0x72, 0x02, 0xff, 0x4c, 0x97, 0x8d, 0xdb, 0x0f, 0x61, 0x46, + 0xad, 0x40, 0x4d, 0x28, 0x3d, 0xc3, 0x67, 0x62, 0x10, 0xf4, 0x33, 0x72, 0x4e, 0xbe, 0x64, 0x79, + 0xe1, 0x61, 0xf1, 0x41, 0x41, 0xf3, 0x01, 0x45, 0xbd, 0x3c, 0xc5, 0x81, 0x69, 0x99, 0x81, 0x89, + 0x10, 0x94, 0x59, 0x14, 0xe6, 0x22, 0xd8, 0x37, 0x95, 0x3a, 0x12, 0xeb, 0xa3, 0xaa, 0xd3, 0x4f, + 0x74, 0x0d, 0xaa, 0xa1, 0x23, 0x8a, 0x50, 0x1c, 0x11, 0x68, 0x48, 0x34, 0x83, 0x00, 0x0f, 0xbd, + 0x80, 0xb9, 0x44, 0x5d, 0x97, 0x45, 0xed, 0x1f, 0xca, 0xd0, 0x4c, 0xd9, 0xe0, 0x01, 0x54, 0x86, + 0xa2, 0x7b, 0xb1, 0x00, 0xae, 0x29, 0x71, 0x31, 0xa5, 0xa2, 0x1e, 0x72, 0xd3, 0xb0, 0x43, 0x97, + 0xa4, 0xb2, 0x6d, 0x84, 0x65, 0x6a, 0xd9, 0x81, 0xdb, 0x37, 0x2c, 0xdb, 0xc7, 0xbd, 0xc0, 0xf5, + 0xcf, 0x84, 0x9a, 0x33, 0x03, 0xb7, 0xbf, 0x29, 0x69, 0x68, 0x1d, 0xc0, 0x72, 0x08, 0x35, 0xea, + 0xb1, 0xdd, 0x67, 0xca, 0xd6, 0xd6, 0xe7, 0xa3, 0xce, 0xc3, 0xbd, 0x41, 0xaf, 0x5a, 0x0e, 0x11, + 0xea, 0x3e, 0x84, 0x3a, 0x0d, 0xb5, 0xc6, 0x90, 0x87, 0x75, 0xee, 0xc9, 0xb5, 0xf5, 0x45, 0x55, + 0xe7, 0x30, 0xe8, 0xeb, 0x33, 0x5e, 0x54, 0x20, 0xe8, 0x13, 0x98, 0x62, 0xb1, 0x8e, 0xb4, 0xa6, + 0x58, 0xa3, 0x37, 0xb2, 0x06, 0x2a, 0x2c, 0xbe, 0xc3, 0x18, 0xb9, 0xc1, 0x45, 0x2b, 0xf4, 0x14, + 0x6a, 0xa6, 0xe3, 0xb8, 0x81, 0xc9, 0x17, 0xfa, 0x34, 0x13, 0xf2, 0xd6, 0x18, 0x21, 0x9d, 0x88, + 0x9b, 0x4b, 0x52, 0xdb, 0xa3, 0x5f, 0x85, 0x49, 0x16, 0x09, 0x5a, 0x15, 0x36, 0xf2, 0x1b, 0xe7, + 0x38, 0xa1, 0xce, 0xb9, 0xdb, 0xbf, 0x06, 0x35, 0x45, 0xb9, 0xcb, 0x38, 0x5d, 0xfb, 0x13, 0x68, + 0x26, 0x55, 0xba, 0x94, 0xd3, 0xfe, 0x10, 0x16, 0xf4, 0x91, 0x13, 0x29, 0x26, 0x93, 0x91, 0x75, + 0x98, 0x12, 0x46, 0xe4, 0x1e, 0xd4, 0xce, 0x9f, 0x13, 0x5d, 0x70, 0x6a, 0x1f, 0xc3, 0x62, 0x42, + 0x96, 0xc8, 0x55, 0x5e, 0x87, 0x86, 0xe7, 0x5a, 0x06, 0xe1, 0x64, 0xc3, 0xb6, 0x64, 0x54, 0xf0, + 0x42, 0xde, 0x6d, 0x8b, 0x36, 0xef, 0x06, 0xae, 0x97, 0xd6, 0xe5, 0x62, 0xcd, 0x5b, 0xb0, 0x94, + 0x6c, 0xce, 0xbb, 0xd7, 0x3e, 0x85, 0x65, 0x1d, 0x0f, 0xdd, 0x53, 0xfc, 0xb2, 0xa2, 0xdb, 0xd0, + 0x4a, 0x0b, 0x10, 0xc2, 0xbf, 0x86, 0xe5, 0x88, 0xda, 0x0d, 0xcc, 0x60, 0x44, 0x2e, 0x25, 0x5c, + 0x24, 0x72, 0x47, 0x2e, 0xc1, 0x72, 0xc3, 0x14, 0x45, 0xed, 0x8e, 0x2a, 0x5a, 0x6c, 0xb0, 0xbc, + 0x07, 0xd4, 0x80, 0xa2, 0xed, 0x09, 0x71, 0x45, 0xdb, 0xd3, 0x1e, 0x41, 0x35, 0xdc, 0xd9, 0xd0, + 0x7b, 0x51, 0x06, 0x55, 0x3c, 0x6f, 0xff, 0x0b, 0x93, 0xab, 0x9d, 0x54, 0x44, 0x17, 0x5d, 0xbd, + 0x07, 0x10, 0x46, 0x22, 0xb9, 0xa1, 0xce, 0x67, 0x08, 0xd4, 0x15, 0x36, 0xed, 0x27, 0xb1, 0xb8, + 0xa4, 0x28, 0x6d, 0x85, 0x4a, 0x5b, 0xb1, 0x38, 0x55, 0xbc, 0x54, 0x9c, 0x7a, 0x07, 0x26, 0x49, + 0x60, 0x06, 0x3c, 0x54, 0x36, 0xd4, 0xf1, 0xc5, 0x3b, 0xc5, 0x3a, 0xe7, 0x43, 0xd7, 0x01, 0x7a, + 0x3e, 0x36, 0x03, 0x6c, 0x19, 0x26, 0x0f, 0xa2, 0x25, 0xbd, 0x2a, 0x28, 0x9d, 0x00, 0x7d, 0x08, + 0xd3, 0x32, 0xa7, 0x99, 0x64, 0x8a, 0xac, 0x66, 0x49, 0x8c, 0x99, 0x40, 0x97, 0x2d, 0xa2, 0x45, + 0x3f, 0x75, 0xce, 0xa2, 0x17, 0x0d, 0x39, 0xb7, 0x12, 0xba, 0xa6, 0xf3, 0x43, 0x17, 0x6f, 0x72, + 0x91, 0xd0, 0x55, 0xc9, 0x0f, 0x5d, 0x42, 0xc8, 0xd8, 0xd0, 0xf5, 0x5d, 0xc6, 0xa0, 0x7f, 0x2a, + 0x40, 0x2b, 0xbd, 0x86, 0x44, 0xec, 0x58, 0x87, 0x29, 0xc2, 0x28, 0xe3, 0x02, 0x91, 0x68, 0x23, + 0x38, 0xd1, 0x23, 0x28, 0xdb, 0xce, 0xb1, 0xcb, 0x8e, 0x16, 0xb1, 0x54, 0x20, 0xaf, 0x97, 0xb5, + 0x6d, 0xe7, 0xd8, 0xe5, 0x93, 0xc2, 0x5a, 0xb6, 0xef, 0x43, 0x35, 0x24, 0x5d, 0x6a, 0x2c, 0x9f, + 0xc1, 0x42, 0xc2, 0x05, 0x79, 0x4e, 0x1b, 0x7a, 0x6c, 0xe1, 0x62, 0x1e, 0xab, 0xfd, 0x6f, 0x41, + 0x5d, 0x41, 0x4f, 0xec, 0x41, 0x80, 0xfd, 0xd4, 0x0a, 0x7a, 0x5f, 0x4a, 0xe5, 0xcb, 0x67, 0x25, + 0x57, 0x2a, 0xcf, 0x36, 0xc5, 0x62, 0x38, 0x80, 0x06, 0xf3, 0x21, 0x83, 0xe0, 0x01, 0xdb, 0xb7, + 0x45, 0xce, 0xf4, 0x76, 0x56, 0x73, 0xde, 0x33, 0xf7, 0xc0, 0xae, 0xe0, 0xe7, 0x33, 0x55, 0x1f, + 0xa8, 0xb4, 0xf6, 0x23, 0x40, 0x69, 0xa6, 0x4b, 0xcd, 0xdd, 0xe7, 0x34, 0x04, 0xd1, 0x73, 0x56, + 0xc6, 0x66, 0x74, 0xcc, 0xd4, 0x18, 0xe7, 0x03, 0x5c, 0x51, 0x5d, 0x70, 0x6a, 0x7f, 0x59, 0x02, + 0x88, 0x2a, 0xbf, 0xc7, 0xb1, 0xe7, 0x41, 0x18, 0x07, 0x78, 0xde, 0x73, 0x33, 0x4b, 0x60, 0x66, + 0x04, 0xf8, 0x2c, 0x1e, 0x01, 0x78, 0x06, 0x74, 0x2b, 0xb3, 0xf9, 0xf7, 0x76, 0xed, 0x6f, 0xc2, + 0x52, 0xd2, 0xe6, 0x62, 0xe1, 0xdf, 0x85, 0x49, 0x3b, 0xc0, 0x43, 0x8e, 0x1d, 0xc4, 0xce, 0x4f, + 0x0a, 0x33, 0x67, 0xd1, 0x56, 0xa1, 0xba, 0x3d, 0x34, 0xfb, 0xb8, 0xeb, 0xe1, 0x1e, 0xed, 0xcc, + 0xa6, 0x05, 0xa1, 0x00, 0x2f, 0x68, 0xeb, 0x50, 0xf9, 0x1c, 0x9f, 0xf1, 0xc5, 0x78, 0x41, 0x05, + 0xb5, 0xdf, 0xaf, 0xc0, 0x32, 0x8b, 0xe1, 0x1b, 0xf2, 0xe4, 0xae, 0x63, 0xe2, 0x8e, 0xfc, 0x1e, + 0x26, 0xcc, 0xaa, 0xde, 0xc8, 0xf0, 0xb0, 0x6f, 0xbb, 0x96, 0x38, 0xa9, 0x56, 0x7b, 0xde, 0x68, + 0x9f, 0x11, 0xe8, 0xe9, 0x9e, 0x56, 0xff, 0x78, 0xe4, 0x0a, 0x07, 0x2b, 0xe9, 0x95, 0x9e, 0x37, + 0xfa, 0x75, 0x5a, 0x96, 0x6d, 0xc9, 0x89, 0xe9, 0x63, 0xc2, 0xfc, 0x88, 0xb7, 0xed, 0x32, 0x02, + 0xba, 0x07, 0x8b, 0x43, 0x3c, 0x74, 0xfd, 0x33, 0x63, 0x60, 0x0f, 0xed, 0xc0, 0xb0, 0x1d, 0xe3, + 0xe8, 0x2c, 0xc0, 0x44, 0xf8, 0x0e, 0xe2, 0x95, 0x3b, 0xb4, 0x6e, 0xdb, 0x79, 0x4c, 0x6b, 0x90, + 0x06, 0x75, 0xd7, 0x1d, 0x1a, 0xa4, 0xe7, 0xfa, 0xd8, 0x30, 0xad, 0x6f, 0xd8, 0x36, 0x56, 0xd2, + 0x6b, 0xae, 0x3b, 0xec, 0x52, 0x5a, 0xc7, 0xfa, 0x06, 0xdd, 0x80, 0x5a, 0xcf, 0x1b, 0x11, 0x1c, + 0x18, 0xf4, 0x0f, 0xdb, 0xad, 0xaa, 0x3a, 0x70, 0xd2, 0x86, 0x37, 0x22, 0x0a, 0xc3, 0x90, 0xce, + 0xfb, 0xb4, 0xca, 0xf0, 0x14, 0x0f, 0x09, 0xda, 0x03, 0xb0, 0x6c, 0xf2, 0x4c, 0x8c, 0xca, 0x62, + 0x76, 0x79, 0x37, 0xb1, 0xdd, 0xa5, 0xa7, 0x6a, 0x6d, 0xd3, 0x26, 0xcf, 0xd8, 0xc0, 0xb9, 0xeb, + 0x55, 0x2d, 0x59, 0x46, 0xab, 0x30, 0x73, 0x34, 0x78, 0x66, 0xbb, 0xc6, 0x73, 0x6c, 0xf7, 0x4f, + 0x82, 0x16, 0x66, 0xa7, 0x9b, 0x1a, 0xa3, 0x7d, 0xc9, 0x48, 0xe8, 0x09, 0xcc, 0xab, 0x2c, 0x86, + 0x85, 0x4f, 0xed, 0x1e, 0x6e, 0x1d, 0xb3, 0xce, 0x97, 0xa2, 0xce, 0x39, 0xfb, 0x26, 0xab, 0xd5, + 0xe7, 0x14, 0x09, 0x9c, 0x84, 0x3e, 0x87, 0x45, 0x2e, 0x87, 0x0b, 0x30, 0xe8, 0xa1, 0xda, 0x38, + 0xf2, 0x48, 0xab, 0xcf, 0x24, 0xb5, 0x22, 0x49, 0x07, 0x27, 0xbe, 0x1b, 0x04, 0x03, 0x2c, 0x64, + 0x21, 0xd6, 0x4c, 0x14, 0xb0, 0x69, 0x3d, 0xf6, 0xe8, 0xde, 0xbb, 0x14, 0x13, 0xf6, 0xdc, 0xb7, + 0x03, 0xcc, 0xa4, 0x9d, 0x9c, 0x23, 0x6d, 0x5e, 0x91, 0xf6, 0x25, 0x6d, 0x95, 0x25, 0x8e, 0xe9, + 0xb6, 0xbd, 0xe7, 0x91, 0x96, 0x7d, 0x09, 0x71, 0x54, 0x39, 0xda, 0x08, 0xed, 0xc1, 0x72, 0x86, + 0x76, 0x4c, 0xde, 0x37, 0xe7, 0xc8, 0x5b, 0x48, 0xaa, 0xc7, 0x04, 0xbe, 0x06, 0xf5, 0x67, 0xd8, + 0x77, 0xf0, 0xc0, 0xe0, 0xae, 0xd7, 0x7a, 0xc6, 0xbc, 0x6b, 0x86, 0x13, 0x9f, 0x32, 0x1a, 0x7a, + 0x1b, 0x84, 0x63, 0x1a, 0x3e, 0x26, 0xd8, 0x3f, 0xe5, 0xa0, 0xd3, 0x80, 0x71, 0xce, 0xf1, 0x1a, + 0x3d, 0xaa, 0x40, 0x1d, 0x10, 0x44, 0x83, 0x3c, 0x67, 0xa7, 0x39, 0x4c, 0x48, 0x6b, 0x38, 0x06, + 0x2a, 0x69, 0x72, 0xf6, 0x6e, 0xc8, 0x8d, 0xee, 0xc2, 0xf4, 0x88, 0xad, 0x10, 0xd2, 0x72, 0xd8, + 0xb8, 0x9a, 0x51, 0xc3, 0x43, 0x56, 0xa1, 0x4b, 0x86, 0xf6, 0x47, 0xd0, 0x88, 0xbb, 0xe1, 0xa5, + 0xa2, 0xd4, 0x43, 0x98, 0x89, 0x39, 0x13, 0x82, 0xb2, 0x02, 0xec, 0xb1, 0x6f, 0xb4, 0x04, 0x53, + 0x9c, 0x87, 0x35, 0xaf, 0xeb, 0xa2, 0xa4, 0x3d, 0x80, 0x46, 0x7c, 0x92, 0x33, 0x5b, 0x23, 0x28, + 0xfb, 0x72, 0x23, 0x2f, 0xeb, 0xec, 0x5b, 0xdb, 0x84, 0x29, 0x3e, 0x8c, 0x4c, 0x10, 0x01, 0x41, + 0xf9, 0xc4, 0xf4, 0x2d, 0x11, 0x5c, 0xd8, 0x37, 0xa5, 0x11, 0xf7, 0x38, 0x10, 0x21, 0x85, 0x7d, + 0x6b, 0x26, 0xd4, 0x63, 0x70, 0x15, 0x65, 0x62, 0xb8, 0x94, 0x10, 0x46, 0xbf, 0x59, 0xf7, 0xee, + 0x40, 0x8e, 0x9c, 0x7d, 0x53, 0x5a, 0x70, 0xe6, 0x49, 0x38, 0x82, 0x7d, 0xd3, 0x29, 0x1a, 0xe0, + 0x53, 0x81, 0x38, 0x56, 0x75, 0x5e, 0xd0, 0x2c, 0x80, 0x0d, 0xd3, 0x33, 0x8f, 0xec, 0x81, 0x1d, + 0x9c, 0xa1, 0x3b, 0xd0, 0x34, 0x2d, 0xcb, 0xe8, 0x49, 0x8a, 0x8d, 0x25, 0xfe, 0x3b, 0x6b, 0x5a, + 0xd6, 0x86, 0x42, 0x46, 0x6f, 0xc1, 0x9c, 0xe5, 0xbb, 0x5e, 0x9c, 0x97, 0x03, 0xc2, 0x4d, 0x5a, + 0xa1, 0x32, 0x6b, 0x7f, 0x5f, 0x86, 0xeb, 0xf1, 0x10, 0x93, 0x84, 0x00, 0x1f, 0xc0, 0x4c, 0xa2, + 0xd7, 0x84, 0x3b, 0x45, 0x5a, 0xea, 0x31, 0xce, 0x04, 0x44, 0x56, 0x4c, 0x41, 0x64, 0x99, 0xe0, + 0x62, 0xe9, 0x95, 0x80, 0x8b, 0xe5, 0x9f, 0x0b, 0x5c, 0x9c, 0xbc, 0x18, 0xb8, 0xf8, 0x06, 0x03, + 0xfc, 0x65, 0x2b, 0xe6, 0x4b, 0x3c, 0xfe, 0xd7, 0x43, 0x1e, 0x47, 0x5e, 0x0c, 0x24, 0x40, 0xc8, + 0xe9, 0xcb, 0x80, 0x90, 0x95, 0x5c, 0x10, 0x92, 0x7a, 0x85, 0xe7, 0x99, 0xfe, 0xd0, 0xf5, 0x25, + 0xca, 0xd8, 0xaa, 0x32, 0x15, 0x66, 0x25, 0x5d, 0x20, 0x8c, 0xb9, 0x78, 0x24, 0xe4, 0xe1, 0x91, + 0xe8, 0x26, 0xcc, 0x38, 0xae, 0xe1, 0xe0, 0xe7, 0x06, 0xb5, 0x19, 0x69, 0xd5, 0xb8, 0x01, 0x1d, + 0x77, 0x17, 0x3f, 0xdf, 0xa7, 0x14, 0xed, 0xaf, 0x0b, 0xb0, 0x10, 0x77, 0x1e, 0x81, 0x3e, 0x7d, + 0x0a, 0x55, 0x5f, 0xee, 0x54, 0xc2, 0x61, 0x56, 0xcf, 0xdd, 0xd2, 0xf4, 0xa8, 0x0d, 0xd2, 0x73, + 0xc1, 0xcc, 0xdb, 0x79, 0x72, 0xce, 0x83, 0x33, 0xb5, 0x0e, 0xcc, 0x85, 0xcc, 0x63, 0x91, 0x44, + 0x05, 0x19, 0x2c, 0xc6, 0x91, 0x41, 0x07, 0xa6, 0x44, 0xb8, 0x79, 0x15, 0xf7, 0x11, 0x37, 0xa1, + 0xe6, 0x61, 0x7f, 0x68, 0x13, 0x12, 0x7a, 0x7e, 0x55, 0x57, 0x49, 0xda, 0xef, 0x4d, 0xc1, 0x6c, + 0x72, 0x6e, 0xef, 0xa7, 0x80, 0xc8, 0xab, 0xca, 0x5a, 0x4c, 0x0e, 0x50, 0xc9, 0xb1, 0xef, 0xc8, + 0x14, 0xae, 0x98, 0x84, 0x1b, 0xc2, 0x34, 0x4f, 0xe4, 0x75, 0x74, 0x06, 0x7a, 0xee, 0x70, 0x68, + 0x3a, 0x96, 0xbc, 0x2e, 0x12, 0x45, 0x3a, 0x5f, 0xa6, 0xdf, 0xa7, 0x0b, 0x8c, 0x92, 0xd9, 0x37, + 0x4d, 0x71, 0xe8, 0x99, 0xdd, 0x76, 0x18, 0x90, 0xc9, 0x56, 0x4f, 0x55, 0x07, 0x41, 0xda, 0xb4, + 0xe9, 0x42, 0x29, 0x63, 0xe7, 0x54, 0x26, 0xd3, 0xca, 0x7d, 0x92, 0x4c, 0x1e, 0x75, 0x56, 0x8f, + 0x6e, 0xc3, 0xd4, 0xd0, 0x1d, 0x39, 0x81, 0x3c, 0xbd, 0xcf, 0x26, 0xae, 0x55, 0x74, 0x51, 0x4d, + 0x37, 0x29, 0xbe, 0x0d, 0xcb, 0x23, 0xba, 0xb2, 0x49, 0x89, 0x4d, 0x57, 0x32, 0xa0, 0x8f, 0xc3, + 0xa3, 0x40, 0x35, 0x99, 0xcb, 0x27, 0xa6, 0x36, 0xf3, 0x3c, 0xb0, 0x13, 0x3f, 0x0f, 0x00, 0x93, + 0x71, 0x37, 0x5f, 0xc6, 0x78, 0x2c, 0xf3, 0x0a, 0x54, 0x06, 0x6e, 0x9f, 0xbb, 0x43, 0x8d, 0xdf, + 0x30, 0x0e, 0xdc, 0x3e, 0xf3, 0x86, 0x05, 0x7a, 0x04, 0xb2, 0x6c, 0xa7, 0x35, 0xc3, 0xd6, 0x19, + 0x2f, 0xd0, 0xac, 0x96, 0x7d, 0x18, 0xae, 0xd3, 0xc3, 0xad, 0x3a, 0xab, 0xaa, 0x32, 0xca, 0x9e, + 0xd3, 0x63, 0x49, 0x77, 0x10, 0x9c, 0xb5, 0x1a, 0x8c, 0x4e, 0x3f, 0xe9, 0xe9, 0x95, 0x03, 0x27, + 0xb3, 0xc9, 0xd3, 0x6b, 0xd6, 0x4a, 0x95, 0xb8, 0xc9, 0x2a, 0xcc, 0x38, 0x38, 0xa0, 0x0b, 0xdd, + 0xa5, 0x4b, 0xa6, 0x65, 0xf1, 0x4c, 0xd7, 0xc1, 0xc1, 0xbe, 0x20, 0x7d, 0x97, 0xe7, 0x99, 0xbf, + 0x2d, 0xc0, 0xd2, 0x06, 0x3b, 0xdb, 0x29, 0x51, 0xe3, 0x32, 0x70, 0xe0, 0xbd, 0x10, 0x78, 0x4d, + 0x61, 0x77, 0xc9, 0x09, 0x11, 0x8c, 0xa8, 0x03, 0x0d, 0x29, 0x54, 0x34, 0x2d, 0x9d, 0x8b, 0xd9, + 0xd6, 0x89, 0x5a, 0xd4, 0x3e, 0x82, 0xe5, 0x94, 0xd6, 0xe2, 0x1c, 0xb6, 0x0a, 0x33, 0x51, 0xf8, + 0x08, 0x95, 0xae, 0x85, 0xb4, 0x6d, 0x4b, 0x7b, 0x08, 0x8b, 0xdd, 0xc0, 0xf4, 0x83, 0xd4, 0x90, + 0x2f, 0xd0, 0x96, 0xc1, 0xb6, 0xf1, 0xb6, 0x02, 0x59, 0xed, 0xc2, 0x42, 0x37, 0x70, 0xbd, 0x97, + 0x10, 0x4a, 0x83, 0x42, 0x60, 0x0f, 0xb1, 0x3b, 0x0a, 0x44, 0x7a, 0x24, 0x8b, 0xda, 0x32, 0x07, + 0x99, 0xd3, 0xbd, 0x7d, 0x08, 0x4b, 0x1c, 0xe3, 0x7d, 0x99, 0x41, 0x5c, 0x91, 0x08, 0x73, 0x5a, + 0xee, 0x16, 0xcc, 0x47, 0x71, 0x3f, 0xc2, 0x83, 0xd6, 0xe2, 0x78, 0x50, 0x2b, 0xc3, 0xca, 0x31, + 0x38, 0xe8, 0xcf, 0x8a, 0x4a, 0x78, 0xcd, 0x41, 0x83, 0xde, 0x8b, 0xa3, 0x41, 0xd7, 0xf3, 0x64, + 0xc6, 0xc0, 0xa0, 0xb4, 0x57, 0x96, 0x32, 0xbc, 0xb2, 0x9b, 0x82, 0x8c, 0xca, 0x49, 0x6c, 0x2d, + 0xa1, 0xdd, 0x2f, 0x05, 0x31, 0xfa, 0x21, 0x47, 0x8c, 0xc2, 0xae, 0x43, 0xe8, 0xfd, 0x5e, 0x02, + 0x31, 0xba, 0x92, 0xab, 0x67, 0x08, 0x18, 0xfd, 0x71, 0x19, 0xaa, 0x61, 0x5d, 0x6a, 0x6e, 0xd3, + 0xd3, 0x54, 0xcc, 0x98, 0x26, 0x75, 0xc3, 0x2b, 0xbd, 0xd4, 0x86, 0x57, 0x3e, 0x77, 0xc3, 0xbb, + 0x0a, 0x55, 0xf6, 0x61, 0xf8, 0xf8, 0x58, 0x6c, 0x60, 0x15, 0x46, 0xd0, 0xf1, 0x71, 0xe4, 0x56, + 0x53, 0x17, 0x72, 0xab, 0x04, 0x36, 0x35, 0x9d, 0xc4, 0xa6, 0xee, 0x87, 0x1b, 0x12, 0xdf, 0xbb, + 0x6e, 0x64, 0xc8, 0xcb, 0xdc, 0x8a, 0x9e, 0xc4, 0xb7, 0x22, 0xbe, 0x9d, 0xbd, 0x9e, 0xd5, 0xfa, + 0x7b, 0x8b, 0x4c, 0x3d, 0xe5, 0xc8, 0x94, 0xea, 0x5b, 0x22, 0x22, 0xbe, 0x07, 0x10, 0x2e, 0x7e, + 0x09, 0x4f, 0xcd, 0x67, 0x8c, 0x4d, 0x57, 0xd8, 0xb4, 0x43, 0x58, 0x8a, 0x99, 0x20, 0xba, 0x26, + 0xba, 0x58, 0x3c, 0xcb, 0xb9, 0x23, 0xfa, 0x8b, 0x69, 0x25, 0x2e, 0xe4, 0xdc, 0xb3, 0xdc, 0x4f, + 0x61, 0x9d, 0x17, 0xf4, 0xca, 0xb5, 0x38, 0xd4, 0x79, 0x49, 0x6f, 0x4a, 0x21, 0x9d, 0x2c, 0x41, + 0x30, 0x7d, 0x51, 0xcd, 0x11, 0xaa, 0xaa, 0xa0, 0x74, 0x02, 0x9a, 0x9b, 0x1d, 0xdb, 0x8e, 0x4d, + 0x4e, 0x78, 0xfd, 0x14, 0xab, 0x07, 0x49, 0xea, 0xb0, 0x87, 0x39, 0xf8, 0x85, 0x1d, 0x18, 0x3d, + 0xd7, 0xc2, 0xcc, 0x57, 0x27, 0xf5, 0x0a, 0x25, 0x6c, 0xb8, 0x16, 0x8e, 0x56, 0x50, 0xe5, 0x72, + 0x2b, 0xa8, 0x9a, 0x58, 0x41, 0x4b, 0x30, 0xe5, 0x63, 0x93, 0xb8, 0x8e, 0x38, 0x6e, 0x88, 0x12, + 0x35, 0xc1, 0x10, 0x13, 0x42, 0x7b, 0x10, 0xd9, 0x90, 0x28, 0x2a, 0x59, 0xdb, 0x4c, 0x6e, 0xd6, + 0x36, 0xe6, 0x1e, 0x27, 0x91, 0xb5, 0xd5, 0x73, 0xb3, 0xb6, 0x8b, 0x5c, 0xe3, 0x28, 0x79, 0x69, + 0x63, 0x7c, 0x5e, 0xaa, 0xa6, 0x77, 0xb3, 0xf1, 0xf4, 0xee, 0x11, 0x4c, 0x9f, 0xba, 0x83, 0xd1, + 0x10, 0x13, 0x81, 0xf1, 0xbd, 0x91, 0xaf, 0xcd, 0x17, 0x9c, 0x51, 0x3c, 0xa3, 0x10, 0xcd, 0xe2, + 0x87, 0x2a, 0x7c, 0xf9, 0x43, 0xd5, 0x77, 0xb8, 0xee, 0xdb, 0x3b, 0x30, 0xa3, 0x0e, 0x2a, 0xa3, + 0xed, 0x1b, 0x6a, 0xdb, 0x58, 0x42, 0xcf, 0x1b, 0xaa, 0x51, 0xa4, 0x02, 0x53, 0x9c, 0xa8, 0xfd, + 0x63, 0x01, 0x96, 0x53, 0x11, 0x40, 0x44, 0x94, 0x7b, 0x89, 0x4b, 0xae, 0x2b, 0xb9, 0x13, 0x1e, + 0xde, 0x71, 0x7d, 0x1a, 0xbb, 0xe3, 0x7a, 0x2b, 0xbf, 0xc1, 0x2b, 0xbf, 0xe2, 0xfa, 0x1d, 0xb8, + 0x71, 0xe8, 0x59, 0x89, 0x5c, 0x51, 0x98, 0xf0, 0xe2, 0x21, 0xed, 0xbe, 0x4c, 0xfe, 0x8b, 0x17, + 0x75, 0x0f, 0xce, 0xaf, 0x69, 0x70, 0x33, 0xbf, 0x7b, 0x91, 0x74, 0xfd, 0x16, 0xcc, 0x6e, 0xbd, + 0xc0, 0xbd, 0xee, 0x99, 0xd3, 0xbb, 0x84, 0x4a, 0x4d, 0x28, 0xf5, 0x86, 0x96, 0xc0, 0x9f, 0xe8, + 0xa7, 0x9a, 0x47, 0x96, 0xe2, 0x79, 0xa4, 0x01, 0xcd, 0xa8, 0x07, 0x61, 0xc5, 0x25, 0x6a, 0x45, + 0x8b, 0x32, 0x53, 0xe1, 0x33, 0xba, 0x28, 0x09, 0x3a, 0xf6, 0x7d, 0x36, 0x56, 0x4e, 0xc7, 0xbe, + 0x1f, 0x8f, 0x67, 0xa5, 0x78, 0x3c, 0x63, 0x8f, 0x1d, 0x69, 0x0f, 0x3f, 0x97, 0xfe, 0xe2, 0xcc, + 0x55, 0x8a, 0xce, 0x5c, 0xe1, 0xd1, 0xad, 0xac, 0x1e, 0xdd, 0x22, 0xcd, 0x27, 0x19, 0x39, 0xad, + 0xf9, 0x54, 0x48, 0xc7, 0xbe, 0xaf, 0xdd, 0x84, 0x19, 0xae, 0x9b, 0x18, 0x79, 0x13, 0x4a, 0x23, + 0x7f, 0x20, 0xdd, 0x67, 0xe4, 0x0f, 0xb4, 0x3f, 0x2c, 0x40, 0xbd, 0x13, 0x04, 0x66, 0xef, 0xe4, + 0x12, 0x03, 0x08, 0x95, 0x2b, 0xaa, 0xca, 0xa5, 0x07, 0x11, 0xa9, 0x5b, 0xce, 0x51, 0x77, 0x32, + 0xa6, 0xae, 0x06, 0x0d, 0xa9, 0x4b, 0xae, 0xc2, 0xbb, 0x80, 0xf6, 0x5d, 0x3f, 0x78, 0xe2, 0xfa, + 0xcf, 0x4d, 0xdf, 0xba, 0xdc, 0x99, 0x0d, 0x41, 0x59, 0x3c, 0x27, 0x2d, 0xbd, 0x39, 0xa9, 0xb3, + 0x6f, 0xed, 0x36, 0xcc, 0xc7, 0xe4, 0xe5, 0x76, 0xfc, 0x00, 0x6a, 0x6c, 0x87, 0x12, 0x49, 0xfd, + 0x1d, 0xf5, 0xf6, 0x6a, 0xec, 0x3e, 0xa6, 0x3d, 0x86, 0x39, 0x9a, 0xa1, 0x30, 0x7a, 0xb8, 0xf4, + 0xde, 0x4e, 0x64, 0xbe, 0x8b, 0x09, 0x01, 0x89, 0xac, 0xf7, 0xef, 0x8a, 0x30, 0xc9, 0xe8, 0xa9, + 0xac, 0xe1, 0x2a, 0x8d, 0xe1, 0x9e, 0x6b, 0x04, 0x66, 0x3f, 0x7c, 0xa4, 0x4b, 0x09, 0x07, 0x66, + 0x9f, 0xb0, 0x37, 0xc6, 0xb4, 0xd2, 0xb2, 0xfb, 0x98, 0x04, 0xf2, 0xa5, 0x6e, 0x8d, 0xd2, 0x36, + 0x39, 0x89, 0x61, 0xd1, 0xf6, 0x6f, 0xf3, 0x8c, 0xb6, 0xac, 0xb3, 0x6f, 0xf4, 0x06, 0x7f, 0xf8, + 0x36, 0x0e, 0xb4, 0x64, 0xcf, 0xe1, 0xda, 0x50, 0x49, 0xe0, 0x94, 0x61, 0x19, 0x7d, 0x90, 0xdc, + 0x9d, 0xae, 0x25, 0x46, 0x98, 0xbd, 0x27, 0xbd, 0xe2, 0xb8, 0xfe, 0x31, 0x20, 0x75, 0xee, 0x85, + 0x75, 0x6f, 0xc3, 0x14, 0x33, 0x8d, 0xcc, 0x0a, 0x67, 0x13, 0xaa, 0xe9, 0xa2, 0x5a, 0xfb, 0x1a, + 0x10, 0x37, 0x67, 0x2c, 0x13, 0xbc, 0xb8, 0xed, 0xc7, 0x64, 0x84, 0x7f, 0x53, 0x80, 0xf9, 0x98, + 0x6c, 0xa1, 0xdb, 0xad, 0xb8, 0xf0, 0x94, 0x6a, 0x42, 0xf0, 0x87, 0xb1, 0x7d, 0xe5, 0x76, 0x52, + 0x85, 0x5f, 0xd0, 0x9e, 0xf2, 0xcf, 0x05, 0x80, 0xce, 0x28, 0x38, 0x11, 0xc0, 0xa1, 0x6a, 0xff, + 0x42, 0xc2, 0xfe, 0x6d, 0xa8, 0x78, 0x26, 0x21, 0xcf, 0x5d, 0x5f, 0x9e, 0xc1, 0xc2, 0x32, 0x83, + 0xfc, 0x46, 0xc1, 0x89, 0xbc, 0xb2, 0xa0, 0xdf, 0xe8, 0x16, 0x34, 0xf8, 0xb3, 0x73, 0xc3, 0xb4, + 0x2c, 0x1f, 0x13, 0x22, 0xee, 0x2e, 0xea, 0x9c, 0xda, 0xe1, 0x44, 0xca, 0x66, 0x5b, 0xd8, 0x09, + 0xec, 0xe0, 0xcc, 0x08, 0xdc, 0x67, 0xd8, 0x11, 0x67, 0xab, 0xba, 0xa4, 0x1e, 0x50, 0x22, 0x65, + 0xf3, 0x71, 0xdf, 0x26, 0x81, 0x2f, 0xd9, 0x24, 0x8e, 0x2e, 0xa8, 0x8c, 0x4d, 0xfb, 0x49, 0x01, + 0x9a, 0xfb, 0xa3, 0xc1, 0x80, 0x4f, 0xed, 0xe5, 0xcd, 0xfb, 0xa6, 0x18, 0x48, 0x31, 0xb9, 0x52, + 0xa2, 0x49, 0x12, 0xc3, 0x7b, 0x05, 0xe0, 0xcf, 0xbb, 0x30, 0xa7, 0xe8, 0x2a, 0xdc, 0x25, 0x96, + 0x24, 0x17, 0xe2, 0x49, 0xb2, 0xf6, 0x29, 0x20, 0x8e, 0x77, 0xbc, 0xe4, 0xf8, 0xb4, 0x45, 0x98, + 0x8f, 0x09, 0x10, 0xfb, 0xf6, 0x5d, 0xa8, 0x8b, 0x47, 0x56, 0xc2, 0x11, 0xae, 0x40, 0x85, 0xc6, + 0xdf, 0x9e, 0x6d, 0xc9, 0xfb, 0xaa, 0x69, 0xcf, 0xb5, 0x36, 0x6c, 0xcb, 0xd7, 0xf6, 0xa0, 0xae, + 0xf3, 0xdf, 0x1f, 0x08, 0xde, 0x4f, 0xa0, 0x21, 0x9e, 0x64, 0x19, 0xb1, 0xa7, 0x8b, 0xca, 0xd5, + 0x4a, 0x4c, 0xb8, 0x5e, 0x77, 0xd4, 0xa2, 0xf6, 0x1b, 0xd0, 0xe6, 0x89, 0x45, 0x4c, 0xac, 0x1c, + 0xdc, 0x27, 0x20, 0x7f, 0x1b, 0x91, 0x2b, 0x3d, 0xde, 0xae, 0xee, 0xab, 0x45, 0xed, 0x3a, 0x5c, + 0xcd, 0x94, 0x2e, 0x46, 0xee, 0x41, 0x33, 0xaa, 0xb0, 0x6c, 0x79, 0x51, 0xc7, 0x2e, 0xe0, 0x0a, + 0xca, 0x05, 0xdc, 0x52, 0x98, 0x29, 0x16, 0xe5, 0x16, 0xc7, 0xd2, 0xc1, 0xe8, 0xd8, 0x52, 0xca, + 0x3b, 0xb6, 0x94, 0x63, 0xc7, 0x16, 0xed, 0xf3, 0x70, 0xfe, 0xc4, 0xb1, 0xf1, 0x21, 0x3b, 0xd6, + 0xf2, 0xbe, 0x65, 0x00, 0x6b, 0x67, 0x8d, 0x8e, 0xb3, 0xe8, 0x0a, 0xb7, 0x76, 0x07, 0xea, 0xf1, + 0x50, 0xa6, 0xc4, 0xa7, 0x42, 0x2a, 0x3e, 0x35, 0x12, 0xa1, 0xe9, 0x9d, 0x44, 0xfa, 0x9b, 0x9e, + 0xd3, 0x44, 0xf2, 0xfb, 0x41, 0x2c, 0x48, 0x69, 0xca, 0xdd, 0xd9, 0x2f, 0x28, 0x3e, 0x2d, 0x88, + 0x78, 0xfd, 0x84, 0xd0, 0xf6, 0x62, 0x90, 0xda, 0x6b, 0x50, 0x3b, 0xcc, 0xfb, 0xdd, 0x42, 0x59, + 0x3e, 0x22, 0xb9, 0x0d, 0x73, 0xdd, 0xc0, 0xf5, 0xcd, 0x3e, 0xde, 0x66, 0x91, 0xe4, 0xd8, 0xe6, + 0xf7, 0xad, 0xa3, 0x51, 0xb8, 0xdd, 0xb2, 0x6f, 0xed, 0xdf, 0x0b, 0x30, 0xfb, 0xc4, 0x1e, 0x60, + 0x72, 0x46, 0x02, 0x3c, 0x3c, 0x64, 0x67, 0xcb, 0x6b, 0x50, 0xa5, 0xc3, 0x27, 0x81, 0x39, 0xf4, + 0xe4, 0x23, 0x93, 0x90, 0x40, 0x2d, 0x46, 0xb8, 0x68, 0x09, 0x48, 0xc5, 0x8e, 0xf6, 0xa9, 0x6e, + 0xe9, 0x69, 0x5b, 0x90, 0xd0, 0xfb, 0x00, 0x23, 0x82, 0x2d, 0xf1, 0xb2, 0xa4, 0x94, 0xcc, 0x15, + 0x0e, 0xd5, 0x7b, 0x44, 0xca, 0xc8, 0xdf, 0x99, 0x7c, 0x00, 0x35, 0xdb, 0x71, 0x2d, 0xcc, 0xee, + 0x11, 0x2d, 0x81, 0x56, 0xe5, 0x34, 0x03, 0xce, 0x79, 0x48, 0xb0, 0xa5, 0xfd, 0xa6, 0xd8, 0x93, + 0xe4, 0xfc, 0x09, 0xc3, 0x3f, 0x81, 0x39, 0x1e, 0x64, 0x8e, 0xc3, 0x71, 0x4b, 0xcf, 0x53, 0x8e, + 0x40, 0x89, 0x49, 0xd1, 0x9b, 0xb6, 0x48, 0x64, 0x64, 0x13, 0xed, 0x21, 0x2c, 0xc6, 0x8e, 0x3d, + 0x97, 0x38, 0x88, 0x68, 0x3f, 0x48, 0x00, 0x33, 0x91, 0x5b, 0x0a, 0xf8, 0x43, 0x7a, 0x65, 0x1e, + 0xfc, 0x41, 0x38, 0xfc, 0x41, 0xb4, 0x2e, 0x5c, 0x89, 0x21, 0x46, 0x31, 0x4d, 0x3e, 0x48, 0xe4, + 0x65, 0x2b, 0x79, 0xd2, 0x12, 0x09, 0xda, 0x7f, 0x17, 0x60, 0x21, 0x8b, 0xe1, 0x25, 0x11, 0xca, + 0xaf, 0x72, 0xde, 0xfe, 0xdd, 0x1b, 0xaf, 0xce, 0x2f, 0x05, 0xcd, 0xdd, 0x81, 0x76, 0xd6, 0xfc, + 0xa5, 0xad, 0x51, 0xba, 0x88, 0x35, 0xfe, 0xa7, 0xa8, 0x20, 0xef, 0x9d, 0x20, 0xf0, 0xed, 0xa3, + 0x11, 0x75, 0xe1, 0x57, 0x86, 0x8e, 0x75, 0x42, 0xdc, 0x87, 0x4f, 0xe1, 0x9d, 0x8c, 0x66, 0x51, + 0xbf, 0x99, 0xd8, 0xcf, 0x7e, 0x1c, 0xfb, 0xe1, 0x98, 0xfa, 0xda, 0x78, 0x39, 0xdf, 0x5b, 0xc0, + 0xf4, 0xbf, 0x0a, 0xd0, 0x88, 0x9b, 0x02, 0x7d, 0x0c, 0x60, 0x86, 0x9a, 0x0b, 0xc7, 0xbf, 0x3e, + 0x76, 0x78, 0xba, 0xd2, 0x00, 0xbd, 0x0e, 0xa5, 0x9e, 0x37, 0x12, 0x56, 0x51, 0xee, 0x62, 0x37, + 0xbc, 0x11, 0x8f, 0x04, 0xb4, 0x9a, 0x9e, 0x78, 0xc4, 0xb3, 0xa4, 0x54, 0x14, 0xe3, 0x4f, 0x93, + 0x38, 0xaf, 0x60, 0x42, 0x8f, 0xa0, 0xf1, 0xdc, 0xb7, 0x03, 0xf3, 0x68, 0x80, 0x8d, 0x81, 0x79, + 0x86, 0x7d, 0x11, 0xc5, 0xc6, 0x04, 0x9c, 0xba, 0x6c, 0xb0, 0x43, 0xf9, 0xb5, 0x53, 0xa8, 0x48, + 0x0d, 0xce, 0x09, 0xd0, 0x3b, 0xb0, 0x3c, 0xa2, 0x6c, 0x06, 0x7b, 0x97, 0xe7, 0x98, 0x8e, 0x6b, + 0x10, 0x4c, 0xb7, 0x4d, 0xf9, 0x32, 0x3f, 0x27, 0x74, 0x2e, 0xb0, 0x56, 0x1b, 0xae, 0x8f, 0x77, + 0x4d, 0xc7, 0xed, 0xf2, 0x26, 0x9a, 0x03, 0x35, 0x65, 0x40, 0xe7, 0x74, 0xdd, 0x81, 0x39, 0x79, + 0xd3, 0x4d, 0x70, 0x20, 0xc2, 0xfc, 0xd8, 0x4e, 0x67, 0x05, 0x7f, 0x17, 0x07, 0x2c, 0xd8, 0xdf, + 0xbd, 0x06, 0x15, 0xf9, 0x2b, 0x4a, 0x34, 0x0d, 0xa5, 0x83, 0x8d, 0xfd, 0xe6, 0x04, 0xfd, 0x38, + 0xdc, 0xdc, 0x6f, 0x16, 0xee, 0x0e, 0xa1, 0x99, 0xfc, 0x01, 0x21, 0x5a, 0x86, 0xf9, 0x7d, 0x7d, + 0x6f, 0xbf, 0xf3, 0x59, 0xe7, 0x60, 0x7b, 0x6f, 0xd7, 0xd8, 0xd7, 0xb7, 0xbf, 0xe8, 0x1c, 0x6c, + 0x35, 0x27, 0xd0, 0x2a, 0x5c, 0x57, 0x2b, 0x7e, 0xb0, 0xd7, 0x3d, 0x30, 0x0e, 0xf6, 0x8c, 0x8d, + 0xbd, 0xdd, 0x83, 0xce, 0xf6, 0xee, 0x96, 0xde, 0x2c, 0xa0, 0xeb, 0x70, 0x45, 0x65, 0x79, 0xbc, + 0xbd, 0xb9, 0xad, 0x6f, 0x6d, 0xd0, 0xef, 0xce, 0x4e, 0xb3, 0x78, 0xf7, 0x21, 0xcc, 0x26, 0xde, + 0xd7, 0xa2, 0x39, 0xa8, 0x77, 0x3b, 0xbb, 0x9b, 0x8f, 0xf7, 0xbe, 0x32, 0xf4, 0xad, 0xce, 0xe6, + 0xd7, 0xcd, 0x09, 0xb4, 0x00, 0x4d, 0x49, 0xda, 0xdd, 0x3b, 0xe0, 0xd4, 0xc2, 0xdd, 0x67, 0x09, + 0xc7, 0xc4, 0x68, 0x11, 0xe6, 0xc2, 0xbe, 0x8d, 0x0d, 0x7d, 0xab, 0x73, 0xb0, 0xb5, 0xd9, 0x9c, + 0x88, 0x93, 0xf5, 0xc3, 0xdd, 0xdd, 0xed, 0xdd, 0xcf, 0x9a, 0x05, 0x2a, 0x35, 0x22, 0x6f, 0x7d, + 0xb5, 0x4d, 0x99, 0x8b, 0x71, 0xe6, 0xc3, 0xdd, 0xcf, 0x77, 0xf7, 0xbe, 0xdc, 0x6d, 0x96, 0xd6, + 0xff, 0xaf, 0x0e, 0x0d, 0x99, 0xb5, 0x60, 0x9f, 0xbd, 0xc0, 0x78, 0x04, 0xd3, 0xf2, 0x07, 0xb5, + 0x4a, 0xd8, 0x8a, 0xff, 0xfc, 0xb7, 0x7d, 0x25, 0xa3, 0x46, 0x24, 0x87, 0x13, 0x48, 0x67, 0xc9, + 0x9a, 0xf2, 0x9e, 0x79, 0x25, 0x96, 0x22, 0xa5, 0x9e, 0x4c, 0xb7, 0x6f, 0xe4, 0xd6, 0x87, 0x32, + 0x0f, 0x69, 0x1e, 0xa6, 0xfe, 0x60, 0x06, 0xdd, 0x88, 0xe5, 0x0e, 0xe9, 0x5f, 0xe2, 0xb4, 0x6f, + 0xe6, 0x33, 0x84, 0x62, 0x7f, 0x04, 0xcd, 0xe4, 0x8f, 0x65, 0x90, 0x82, 0xee, 0xe5, 0xfc, 0x12, + 0xa7, 0xad, 0x8d, 0x63, 0x51, 0x85, 0xa7, 0x7e, 0x56, 0xb2, 0x3a, 0xee, 0x7d, 0x7f, 0x4a, 0x78, + 0xde, 0x4f, 0x00, 0xf8, 0x84, 0xc4, 0xdf, 0x22, 0xa3, 0xd8, 0x6f, 0x39, 0x32, 0x5e, 0xa6, 0xab, + 0x13, 0x92, 0xfd, 0x8c, 0x59, 0x9b, 0x40, 0x5f, 0xc1, 0x6c, 0xe2, 0x6e, 0x1d, 0x29, 0xcd, 0xb2, + 0x1f, 0x0b, 0xb4, 0x57, 0xc7, 0x70, 0xc4, 0x2d, 0xa8, 0xde, 0x9d, 0xc7, 0x2d, 0x98, 0x71, 0x23, + 0x1f, 0xb7, 0x60, 0xe6, 0xb5, 0x3b, 0x73, 0xb6, 0xd8, 0x1d, 0xb9, 0xea, 0x6c, 0x59, 0x37, 0xf2, + 0xed, 0x1b, 0xb9, 0xf5, 0xea, 0x24, 0x24, 0x6e, 0xc8, 0xd5, 0x49, 0xc8, 0xbe, 0x79, 0x6f, 0xaf, + 0x8e, 0xe1, 0x48, 0x5a, 0x2d, 0xba, 0xa7, 0x4b, 0x5a, 0x2d, 0x75, 0x3b, 0x9c, 0xb4, 0x5a, 0xfa, + 0x8a, 0x4f, 0x58, 0x2d, 0x71, 0xaf, 0x76, 0x73, 0x0c, 0xc8, 0x9e, 0xb6, 0x5a, 0x36, 0x0c, 0xaf, + 0x4d, 0x20, 0x02, 0xad, 0x3c, 0x00, 0x1b, 0x29, 0x39, 0xc4, 0x39, 0x18, 0x7b, 0xfb, 0xee, 0x45, + 0x58, 0xc3, 0x4e, 0x37, 0xa0, 0x22, 0xf1, 0x6a, 0xa4, 0x44, 0x9a, 0x04, 0x4a, 0xde, 0x6e, 0x67, + 0x55, 0x85, 0x42, 0xee, 0x43, 0x99, 0x52, 0xd1, 0x62, 0x9c, 0x4b, 0x36, 0x5e, 0x4a, 0x92, 0xc3, + 0x86, 0x1f, 0xc3, 0x14, 0x07, 0x60, 0x91, 0x72, 0xb4, 0x8b, 0xc1, 0xc3, 0xed, 0x56, 0xba, 0x22, + 0x6c, 0xbe, 0xc3, 0x7f, 0xf7, 0x2f, 0xb0, 0x54, 0x74, 0x2d, 0xfe, 0xcb, 0xd0, 0x38, 0x64, 0xdb, + 0xbe, 0x9e, 0x53, 0xab, 0x3a, 0x4c, 0x22, 0x4d, 0xb9, 0x91, 0x9b, 0x4b, 0xa6, 0x1d, 0x26, 0x3b, + 0x3b, 0xd5, 0x26, 0x90, 0xc9, 0x11, 0xc1, 0x84, 0xe8, 0xd7, 0x72, 0x5c, 0x2d, 0x26, 0xfe, 0xf5, + 0xf1, 0x4c, 0x61, 0x17, 0x16, 0xcc, 0x67, 0x60, 0x08, 0xe8, 0xf5, 0xa4, 0x27, 0x64, 0x01, 0x18, + 0xed, 0x5b, 0xe7, 0x70, 0xa9, 0xc6, 0x12, 0x0e, 0xbf, 0x9c, 0x3e, 0x58, 0xa7, 0x8c, 0x95, 0x74, + 0xef, 0xf5, 0x3f, 0x2a, 0xc1, 0x0c, 0xc7, 0x7b, 0xc4, 0xee, 0xb7, 0x0d, 0x10, 0x41, 0xa5, 0xe8, + 0x6a, 0x7c, 0xac, 0x31, 0xf0, 0xba, 0x7d, 0x2d, 0xbb, 0x52, 0x75, 0x04, 0x05, 0x86, 0x44, 0xd7, + 0x72, 0xd0, 0xc9, 0x94, 0x23, 0x64, 0x60, 0x97, 0xda, 0x04, 0x7a, 0x02, 0xd5, 0x10, 0xf7, 0x42, + 0x2a, 0x5e, 0x96, 0x00, 0xee, 0xda, 0x57, 0x33, 0xeb, 0x54, 0xad, 0x14, 0x30, 0x4b, 0xd5, 0x2a, + 0x0d, 0x92, 0xa9, 0x5a, 0x65, 0x21, 0x60, 0xd1, 0x18, 0xf9, 0x51, 0x39, 0x35, 0xc6, 0x18, 0x02, + 0x91, 0x1a, 0x63, 0xfc, 0x7c, 0xad, 0x4d, 0x3c, 0xbe, 0xf6, 0xd3, 0x9f, 0xad, 0x14, 0xfe, 0xed, + 0x67, 0x2b, 0x13, 0xbf, 0xfb, 0xed, 0x4a, 0xe1, 0xa7, 0xdf, 0xae, 0x14, 0xfe, 0xf5, 0xdb, 0x95, + 0xc2, 0x7f, 0x7c, 0xbb, 0x52, 0xf8, 0x93, 0xff, 0x5c, 0x99, 0x38, 0x9a, 0x62, 0xff, 0x1b, 0xe3, + 0xbd, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xef, 0x83, 0x00, 0x67, 0xd1, 0x44, 0x00, 0x00, } diff --git a/cri/apis/v1alpha1/api.proto b/cri/apis/v1alpha1/api.proto new file mode 100644 index 0000000000..0377f7eda8 --- /dev/null +++ b/cri/apis/v1alpha1/api.proto @@ -0,0 +1,1209 @@ +// To regenerate api.pb.go run hack/protoc.sh +syntax = 'proto3'; + +package v1alpha1; + +import "github.com/gogo/protobuf/gogoproto/gogo.proto"; + +option (gogoproto.goproto_stringer_all) = false; +option (gogoproto.stringer_all) = true; +option (gogoproto.goproto_getters_all) = true; +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_unrecognized_all) = false; + +// Runtime service defines the public APIs for remote container runtimes +service RuntimeService { + // Version returns the runtime name, runtime version, and runtime API version. + rpc Version(VersionRequest) returns (VersionResponse) {} + + // RunPodSandbox creates and starts a pod-level sandbox. Runtimes must ensure + // the sandbox is in the ready state on success. + rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} + // StopPodSandbox stops any running process that is part of the sandbox and + // reclaims network resources (e.g., IP addresses) allocated to the sandbox. + // If there are any running containers in the sandbox, they must be forcibly + // terminated. + // This call is idempotent, and must not return an error if all relevant + // resources have already been reclaimed. kubelet will call StopPodSandbox + // at least once before calling RemovePodSandbox. It will also attempt to + // reclaim resources eagerly, as soon as a sandbox is not needed. Hence, + // multiple StopPodSandbox calls are expected. + rpc StopPodSandbox(StopPodSandboxRequest) returns (StopPodSandboxResponse) {} + // RemovePodSandbox removes the sandbox. If there are any running containers + // in the sandbox, they must be forcibly terminated and removed. + // This call is idempotent, and must not return an error if the sandbox has + // already been removed. + rpc RemovePodSandbox(RemovePodSandboxRequest) returns (RemovePodSandboxResponse) {} + // PodSandboxStatus returns the status of the PodSandbox. If the PodSandbox is not + // present, returns an error. + rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) {} + // ListPodSandbox returns a list of PodSandboxes. + rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} + + // CreateContainer creates a new container in specified PodSandbox + rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {} + // StartContainer starts the container. + rpc StartContainer(StartContainerRequest) returns (StartContainerResponse) {} + // StopContainer stops a running container with a grace period (i.e., timeout). + // This call is idempotent, and must not return an error if the container has + // already been stopped. + // TODO: what must the runtime do after the grace period is reached? + rpc StopContainer(StopContainerRequest) returns (StopContainerResponse) {} + // RemoveContainer removes the container. If the container is running, the + // container must be forcibly removed. + // This call is idempotent, and must not return an error if the container has + // already been removed. + rpc RemoveContainer(RemoveContainerRequest) returns (RemoveContainerResponse) {} + // ListContainers lists all containers by filters. + rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} + // ContainerStatus returns status of the container. If the container is not + // present, returns an error. + rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} + // UpdateContainerResources updates ContainerConfig of the container. + rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateContainerResourcesResponse) {} + + // ExecSync runs a command in a container synchronously. + rpc ExecSync(ExecSyncRequest) returns (ExecSyncResponse) {} + // Exec prepares a streaming endpoint to execute a command in the container. + rpc Exec(ExecRequest) returns (ExecResponse) {} + // Attach prepares a streaming endpoint to attach to a running container. + rpc Attach(AttachRequest) returns (AttachResponse) {} + // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. + rpc PortForward(PortForwardRequest) returns (PortForwardResponse) {} + + // ContainerStats returns stats of the container. If the container does not + // exist, the call returns an error. + rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} + // ListContainerStats returns stats of all running containers. + rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} + + // UpdateRuntimeConfig updates the runtime configuration based on the given request. + rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse) {} + + // Status returns the status of the runtime. + rpc Status(StatusRequest) returns (StatusResponse) {} +} + +// ImageService defines the public APIs for managing images. +service ImageService { + // ListImages lists existing images. + rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} + // ImageStatus returns the status of the image. If the image is not + // present, returns a response with ImageStatusResponse.Image set to + // nil. + rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} + // PullImage pulls an image with authentication config. + rpc PullImage(PullImageRequest) returns (PullImageResponse) {} + // RemoveImage removes the image. + // This call is idempotent, and must not return an error if the image has + // already been removed. + rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} + // ImageFSInfo returns information of the filesystem that is used to store images. + rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} +} + +message VersionRequest { + // Version of the kubelet runtime API. + string version = 1; +} + +message VersionResponse { + // Version of the kubelet runtime API. + string version = 1; + // Name of the container runtime. + string runtime_name = 2; + // Version of the container runtime. The string must be + // semver-compatible. + string runtime_version = 3; + // API version of the container runtime. The string must be + // semver-compatible. + string runtime_api_version = 4; +} + +// DNSConfig specifies the DNS servers and search domains of a sandbox. +message DNSConfig { + // List of DNS servers of the cluster. + repeated string servers = 1; + // List of DNS search domains of the cluster. + repeated string searches = 2; + // List of DNS options. See https://linux.die.net/man/5/resolv.conf + // for all available options. + repeated string options = 3; +} + +enum Protocol { + TCP = 0; + UDP = 1; +} + +// PortMapping specifies the port mapping configurations of a sandbox. +message PortMapping { + // Protocol of the port mapping. + Protocol protocol = 1; + // Port number within the container. Default: 0 (not specified). + int32 container_port = 2; + // Port number on the host. Default: 0 (not specified). + int32 host_port = 3; + // Host IP. + string host_ip = 4; +} + +enum MountPropagation { + // No mount propagation ("private" in Linux terminology). + PROPAGATION_PRIVATE = 0; + // Mounts get propagated from the host to the container ("rslave" in Linux). + PROPAGATION_HOST_TO_CONTAINER = 1; + // Mounts get propagated from the host to the container and from the + // container to the host ("rshared" in Linux). + PROPAGATION_BIDIRECTIONAL = 2; +} + +// Mount specifies a host volume to mount into a container. +message Mount { + // Path of the mount within the container. + string container_path = 1; + // Path of the mount on the host. + string host_path = 2; + // If set, the mount is read-only. + bool readonly = 3; + // If set, the mount needs SELinux relabeling. + bool selinux_relabel = 4; + // Requested propagation mode. + MountPropagation propagation = 5; +} + +// NamespaceOption provides options for Linux namespaces. +message NamespaceOption { + // If set, use the host's network namespace. + bool host_network = 1; + // If set, use the host's PID namespace. + bool host_pid = 2; + // If set, use the host's IPC namespace. + bool host_ipc = 3; +} + +// Int64Value is the wrapper of int64. +message Int64Value { + // The value. + int64 value = 1; +} + +// LinuxSandboxSecurityContext holds linux security configuration that will be +// applied to a sandbox. Note that: +// 1) It does not apply to containers in the pods. +// 2) It may not be applicable to a PodSandbox which does not contain any running +// process. +message LinuxSandboxSecurityContext { + // Configurations for the sandbox's namespaces. + // This will be used only if the PodSandbox uses namespace for isolation. + NamespaceOption namespace_options = 1; + // Optional SELinux context to be applied. + SELinuxOption selinux_options = 2; + // UID to run sandbox processes as, when applicable. + Int64Value run_as_user = 3; + // If set, the root filesystem of the sandbox is read-only. + bool readonly_rootfs = 4; + // List of groups applied to the first process run in the sandbox, in + // addition to the sandbox's primary GID. + repeated int64 supplemental_groups = 5; + // Indicates whether the sandbox will be asked to run a privileged + // container. If a privileged container is to be executed within it, this + // MUST be true. + // This allows a sandbox to take additional security precautions if no + // privileged containers are expected to be run. + bool privileged = 6; + // Seccomp profile for the sandbox, candidate values are: + // * docker/default: the default profile for the docker container runtime + // * unconfined: unconfined profile, ie, no seccomp sandboxing + // * localhost/: the profile installed on the node. + // is the full path of the profile. + // Default: "", which is identical with unconfined. + string seccomp_profile_path = 7; +} + +// LinuxPodSandboxConfig holds platform-specific configurations for Linux +// host platforms and Linux-based containers. +message LinuxPodSandboxConfig { + // Parent cgroup of the PodSandbox. + // The cgroupfs style syntax will be used, but the container runtime can + // convert it to systemd semantics if needed. + string cgroup_parent = 1; + // LinuxSandboxSecurityContext holds sandbox security attributes. + LinuxSandboxSecurityContext security_context = 2; + // Sysctls holds linux sysctls config for the sandbox. + map sysctls = 3; +} + +// PodSandboxMetadata holds all necessary information for building the sandbox name. +// The container runtime is encouraged to expose the metadata associated with the +// PodSandbox in its user interface for better user experience. For example, +// the runtime can construct a unique PodSandboxName based on the metadata. +message PodSandboxMetadata { + // Pod name of the sandbox. Same as the pod name in the PodSpec. + string name = 1; + // Pod UID of the sandbox. Same as the pod UID in the PodSpec. + string uid = 2; + // Pod namespace of the sandbox. Same as the pod namespace in the PodSpec. + string namespace = 3; + // Attempt number of creating the sandbox. Default: 0. + uint32 attempt = 4; +} + +// PodSandboxConfig holds all the required and optional fields for creating a +// sandbox. +message PodSandboxConfig { + // Metadata of the sandbox. This information will uniquely identify the + // sandbox, and the runtime should leverage this to ensure correct + // operation. The runtime may also use this information to improve UX, such + // as by constructing a readable name. + PodSandboxMetadata metadata = 1; + // Hostname of the sandbox. + string hostname = 2; + // Path to the directory on the host in which container log files are + // stored. + // By default the log of a container going into the LogDirectory will be + // hooked up to STDOUT and STDERR. However, the LogDirectory may contain + // binary log files with structured logging data from the individual + // containers. For example, the files might be newline separated JSON + // structured logs, systemd-journald journal files, gRPC trace files, etc. + // E.g., + // PodSandboxConfig.LogDirectory = `/var/log/pods//` + // ContainerConfig.LogPath = `containerName_Instance#.log` + // + // WARNING: Log management and how kubelet should interface with the + // container logs are under active discussion in + // https://issues.k8s.io/24677. There *may* be future change of direction + // for logging as the discussion carries on. + string log_directory = 3; + // DNS config for the sandbox. + DNSConfig dns_config = 4; + // Port mappings for the sandbox. + repeated PortMapping port_mappings = 5; + // Key-value pairs that may be used to scope and select individual resources. + map labels = 6; + // Unstructured key-value map that may be set by the kubelet to store and + // retrieve arbitrary metadata. This will include any annotations set on a + // pod through the Kubernetes API. + // + // Annotations MUST NOT be altered by the runtime; the annotations stored + // here MUST be returned in the PodSandboxStatus associated with the pod + // this PodSandboxConfig creates. + // + // In general, in order to preserve a well-defined interface between the + // kubelet and the container runtime, annotations SHOULD NOT influence + // runtime behaviour. + // + // Annotations can also be useful for runtime authors to experiment with + // new features that are opaque to the Kubernetes APIs (both user-facing + // and the CRI). Whenever possible, however, runtime authors SHOULD + // consider proposing new typed fields for any new features instead. + map annotations = 7; + // Optional configurations specific to Linux hosts. + LinuxPodSandboxConfig linux = 8; +} + +message RunPodSandboxRequest { + // Configuration for creating a PodSandbox. + PodSandboxConfig config = 1; +} + +message RunPodSandboxResponse { + // ID of the PodSandbox to run. + string pod_sandbox_id = 1; +} + +message StopPodSandboxRequest { + // ID of the PodSandbox to stop. + string pod_sandbox_id = 1; +} + +message StopPodSandboxResponse {} + +message RemovePodSandboxRequest { + // ID of the PodSandbox to remove. + string pod_sandbox_id = 1; +} + +message RemovePodSandboxResponse {} + +message PodSandboxStatusRequest { + // ID of the PodSandbox for which to retrieve status. + string pod_sandbox_id = 1; + // Verbose indicates whether to return extra information about the pod sandbox. + bool verbose = 2; +} + +// PodSandboxNetworkStatus is the status of the network for a PodSandbox. +message PodSandboxNetworkStatus { + // IP address of the PodSandbox. + string ip = 1; +} + +// Namespace contains paths to the namespaces. +message Namespace { + // Namespace options for Linux namespaces. + NamespaceOption options = 2; +} + +// LinuxSandboxStatus contains status specific to Linux sandboxes. +message LinuxPodSandboxStatus { + // Paths to the sandbox's namespaces. + Namespace namespaces = 1; +} + +enum PodSandboxState { + SANDBOX_READY = 0; + SANDBOX_NOTREADY = 1; +} + +// PodSandboxStatus contains the status of the PodSandbox. +message PodSandboxStatus { + // ID of the sandbox. + string id = 1; + // Metadata of the sandbox. + PodSandboxMetadata metadata = 2; + // State of the sandbox. + PodSandboxState state = 3; + // Creation timestamp of the sandbox in nanoseconds. Must be > 0. + int64 created_at = 4; + // Network contains network status if network is handled by the runtime. + PodSandboxNetworkStatus network = 5; + // Linux-specific status to a pod sandbox. + LinuxPodSandboxStatus linux = 6; + // Labels are key-value pairs that may be used to scope and select individual resources. + map labels = 7; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding PodSandboxConfig used to + // instantiate the pod sandbox this status represents. + map annotations = 8; +} + +message PodSandboxStatusResponse { + // Status of the PodSandbox. + PodSandboxStatus status = 1; + // Info is extra information of the PodSandbox. The key could be abitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. network namespace for linux container based container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; +} + +// PodSandboxStateValue is the wrapper of PodSandboxState. +message PodSandboxStateValue { + // State of the sandbox. + PodSandboxState state = 1; +} + +// PodSandboxFilter is used to filter a list of PodSandboxes. +// All those fields are combined with 'AND' +message PodSandboxFilter { + // ID of the sandbox. + string id = 1; + // State of the sandbox. + PodSandboxStateValue state = 2; + // LabelSelector to select matches. + // Only api.MatchLabels is supported for now and the requirements + // are ANDed. MatchExpressions is not supported yet. + map label_selector = 3; +} + +message ListPodSandboxRequest { + // PodSandboxFilter to filter a list of PodSandboxes. + PodSandboxFilter filter = 1; +} + + +// PodSandbox contains minimal information about a sandbox. +message PodSandbox { + // ID of the PodSandbox. + string id = 1; + // Metadata of the PodSandbox. + PodSandboxMetadata metadata = 2; + // State of the PodSandbox. + PodSandboxState state = 3; + // Creation timestamps of the PodSandbox in nanoseconds. Must be > 0. + int64 created_at = 4; + // Labels of the PodSandbox. + map labels = 5; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding PodSandboxConfig used to + // instantiate this PodSandbox. + map annotations = 6; +} + +message ListPodSandboxResponse { + // List of PodSandboxes. + repeated PodSandbox items = 1; +} + +// ImageSpec is an internal representation of an image. Currently, it wraps the +// value of a Container's Image field (e.g. imageID or imageDigest), but in the +// future it will include more detailed information about the different image types. +message ImageSpec { + string image = 1; +} + +message KeyValue { + string key = 1; + string value = 2; +} + +// LinuxContainerResources specifies Linux specific configuration for +// resources. +// TODO: Consider using Resources from opencontainers/runtime-spec/specs-go +// directly. +message LinuxContainerResources { + // CPU CFS (Completely Fair Scheduler) period. Default: 0 (not specified). + int64 cpu_period = 1; + // CPU CFS (Completely Fair Scheduler) quota. Default: 0 (not specified). + int64 cpu_quota = 2; + // CPU shares (relative weight vs. other containers). Default: 0 (not specified). + int64 cpu_shares = 3; + // Memory limit in bytes. Default: 0 (not specified). + int64 memory_limit_in_bytes = 4; + // OOMScoreAdj adjusts the oom-killer score. Default: 0 (not specified). + int64 oom_score_adj = 5; + // CpusetCpus constrains the allowed set of logical CPUs. Default: "" (not specified). + string cpuset_cpus = 6; + // CpusetMems constrains the allowed set of memory nodes. Default: "" (not specified). + string cpuset_mems = 7; + // DiskQuota constrains the disk + map disk_quota = 100; + // Block IO weight (relative weight vs. other containers) + uint32 blkio_weight = 101; + repeated WeightDevice blkio_weight_device = 102; + repeated ThrottleDevice blkio_device_read_bps = 103; + repeated ThrottleDevice blkio_device_write_bps = 104; + repeated ThrottleDevice blkio_device_read_IOps = 105; + repeated ThrottleDevice blkio_device_write_IOps = 106; + // Kernel memory limit (in bytes) + int64 kernel_memory = 107; + // Memory soft limit (in bytes) + int64 memory_reservation = 108; + // Tuning container memory swappiness behaviour + Int64Value memory_swappiness = 109; + // List of ulimits to be set in the container + repeated Ulimit ulimits = 110; +} + +// WeightDevice is a structure that holds device:weight pair +message WeightDevice { + // Path of weightdevice. + string path = 1; + // Weight of weightdevice. + uint32 Weight = 2; +} + +// ThrottleDevice is a structure that holds device:rate_per_second pair +message ThrottleDevice { + // Path of throttledevice. + string path = 1; + // Rate of throttledevice. + uint64 rate = 2; +} + +// Ulimit is a human friendly version of Rlimit. +message Ulimit { + // Name of ulimit. + string name = 1; + // Hard limit of ulimit. + int64 hard = 2; + // Soft limit of Ulimit. + int64 soft = 3; +} + +// SELinuxOption are the labels to be applied to the container. +message SELinuxOption { + string user = 1; + string role = 2; + string type = 3; + string level = 4; +} + +// Capability contains the container capabilities to add or drop +message Capability { + // List of capabilities to add. + repeated string add_capabilities = 1; + // List of capabilities to drop. + repeated string drop_capabilities = 2; +} + +// LinuxContainerSecurityContext holds linux security configuration that will be applied to a container. +message LinuxContainerSecurityContext { + // Capabilities to add or drop. + Capability capabilities = 1; + // If set, run container in privileged mode. + // Privileged mode is incompatible with the following options. If + // privileged is set, the following features MAY have no effect: + // 1. capabilities + // 2. selinux_options + // 4. seccomp + // 5. apparmor + // + // Privileged mode implies the following specific options are applied: + // 1. All capabilities are added. + // 2. Sensitive paths, such as kernel module paths within sysfs, are not masked. + // 3. Any sysfs and procfs mounts are mounted RW. + // 4. Apparmor confinement is not applied. + // 5. Seccomp restrictions are not applied. + // 6. The device cgroup does not restrict access to any devices. + // 7. All devices from the host's /dev are available within the container. + // 8. SELinux restrictions are not applied (e.g. label=disabled). + bool privileged = 2; + // Configurations for the container's namespaces. + // Only used if the container uses namespace for isolation. + NamespaceOption namespace_options = 3; + // SELinux context to be optionally applied. + SELinuxOption selinux_options = 4; + // UID to run the container process as. Only one of run_as_user and + // run_as_username can be specified at a time. + Int64Value run_as_user = 5; + // User name to run the container process as. If specified, the user MUST + // exist in the container image (i.e. in the /etc/passwd inside the image), + // and be resolved there by the runtime; otherwise, the runtime MUST error. + string run_as_username = 6; + // If set, the root filesystem of the container is read-only. + bool readonly_rootfs = 7; + // List of groups applied to the first process run in the container, in + // addition to the container's primary GID. + repeated int64 supplemental_groups = 8; + // AppArmor profile for the container, candidate values are: + // * runtime/default: equivalent to not specifying a profile. + // * unconfined: no profiles are loaded + // * localhost/: profile loaded on the node + // (localhost) by name. The possible profile names are detailed at + // http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference + string apparmor_profile = 9; + // Seccomp profile for the container, candidate values are: + // * docker/default: the default profile for the docker container runtime + // * unconfined: unconfined profile, ie, no seccomp sandboxing + // * localhost/: the profile installed on the node. + // is the full path of the profile. + // Default: "", which is identical with unconfined. + string seccomp_profile_path = 10; + // no_new_privs defines if the flag for no_new_privs should be set on the + // container. + bool no_new_privs = 11; +} + +// LinuxContainerConfig contains platform-specific configuration for +// Linux-based containers. +message LinuxContainerConfig { + // Resources specification for the container. + LinuxContainerResources resources = 1; + // LinuxContainerSecurityContext configuration for the container. + LinuxContainerSecurityContext security_context = 2; +} + +// ContainerMetadata holds all necessary information for building the container +// name. The container runtime is encouraged to expose the metadata in its user +// interface for better user experience. E.g., runtime can construct a unique +// container name based on the metadata. Note that (name, attempt) is unique +// within a sandbox for the entire lifetime of the sandbox. +message ContainerMetadata { + // Name of the container. Same as the container name in the PodSpec. + string name = 1; + // Attempt number of creating the container. Default: 0. + uint32 attempt = 2; +} + +// Device specifies a host device to mount into a container. +message Device { + // Path of the device within the container. + string container_path = 1; + // Path of the device on the host. + string host_path = 2; + // Cgroups permissions of the device, candidates are one or more of + // * r - allows container to read from the specified device. + // * w - allows container to write to the specified device. + // * m - allows container to create device files that do not yet exist. + string permissions = 3; +} + +// ContainerConfig holds all the required and optional fields for creating a +// container. +message ContainerConfig { + // Metadata of the container. This information will uniquely identify the + // container, and the runtime should leverage this to ensure correct + // operation. The runtime may also use this information to improve UX, such + // as by constructing a readable name. + ContainerMetadata metadata = 1 ; + // Image to use. + ImageSpec image = 2; + // Command to execute (i.e., entrypoint for docker) + repeated string command = 3; + // Args for the Command (i.e., command for docker) + repeated string args = 4; + // Current working directory of the command. + string working_dir = 5; + // List of environment variable to set in the container. + repeated KeyValue envs = 6; + // Mounts for the container. + repeated Mount mounts = 7; + // Devices for the container. + repeated Device devices = 8; + // Key-value pairs that may be used to scope and select individual resources. + // Label keys are of the form: + // label-key ::= prefixed-name | name + // prefixed-name ::= prefix '/' name + // prefix ::= DNS_SUBDOMAIN + // name ::= DNS_LABEL + map labels = 9; + // Unstructured key-value map that may be used by the kubelet to store and + // retrieve arbitrary metadata. + // + // Annotations MUST NOT be altered by the runtime; the annotations stored + // here MUST be returned in the ContainerStatus associated with the container + // this ContainerConfig creates. + // + // In general, in order to preserve a well-defined interface between the + // kubelet and the container runtime, annotations SHOULD NOT influence + // runtime behaviour. + map annotations = 10; + // Path relative to PodSandboxConfig.LogDirectory for container to store + // the log (STDOUT and STDERR) on the host. + // E.g., + // PodSandboxConfig.LogDirectory = `/var/log/pods//` + // ContainerConfig.LogPath = `containerName_Instance#.log` + // + // WARNING: Log management and how kubelet should interface with the + // container logs are under active discussion in + // https://issues.k8s.io/24677. There *may* be future change of direction + // for logging as the discussion carries on. + string log_path = 11; + + // Variables for interactive containers, these have very specialized + // use-cases (e.g. debugging). + // TODO: Determine if we need to continue supporting these fields that are + // part of Kubernetes's Container Spec. + bool stdin = 12; + bool stdin_once = 13; + bool tty = 14; + + // Configuration specific to Linux containers. + LinuxContainerConfig linux = 15; + // NetPriority of the container + int64 net_priority = 100; +} + +message CreateContainerRequest { + // ID of the PodSandbox in which the container should be created. + string pod_sandbox_id = 1; + // Config of the container. + ContainerConfig config = 2; + // Config of the PodSandbox. This is the same config that was passed + // to RunPodSandboxRequest to create the PodSandbox. It is passed again + // here just for easy reference. The PodSandboxConfig is immutable and + // remains the same throughout the lifetime of the pod. + PodSandboxConfig sandbox_config = 3; +} + +message CreateContainerResponse { + // ID of the created container. + string container_id = 1; +} + +message StartContainerRequest { + // ID of the container to start. + string container_id = 1; +} + +message StartContainerResponse {} + +message StopContainerRequest { + // ID of the container to stop. + string container_id = 1; + // Timeout in seconds to wait for the container to stop before forcibly + // terminating it. Default: 0 (forcibly terminate the container immediately) + int64 timeout = 2; +} + +message StopContainerResponse {} + +message RemoveContainerRequest { + // ID of the container to remove. + string container_id = 1; +} + +message RemoveContainerResponse {} + +enum ContainerState { + CONTAINER_CREATED = 0; + CONTAINER_RUNNING = 1; + CONTAINER_EXITED = 2; + CONTAINER_UNKNOWN = 3; +} + +// ContainerStateValue is the wrapper of ContainerState. +message ContainerStateValue { + // State of the container. + ContainerState state = 1; +} + +// ContainerFilter is used to filter containers. +// All those fields are combined with 'AND' +message ContainerFilter { + // ID of the container. + string id = 1; + // State of the container. + ContainerStateValue state = 2; + // ID of the PodSandbox. + string pod_sandbox_id = 3; + // LabelSelector to select matches. + // Only api.MatchLabels is supported for now and the requirements + // are ANDed. MatchExpressions is not supported yet. + map label_selector = 4; +} + +message ListContainersRequest { + ContainerFilter filter = 1; +} + +// Container provides the runtime information for a container, such as ID, hash, +// state of the container. +message Container { + // ID of the container, used by the container runtime to identify + // a container. + string id = 1; + // ID of the sandbox to which this container belongs. + string pod_sandbox_id = 2; + // Metadata of the container. + ContainerMetadata metadata = 3; + // Spec of the image. + ImageSpec image = 4; + // Reference to the image in use. For most runtimes, this should be an + // image ID. + string image_ref = 5; + // State of the container. + ContainerState state = 6; + // Creation time of the container in nanoseconds. + int64 created_at = 7; + // Key-value pairs that may be used to scope and select individual resources. + map labels = 8; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding ContainerConfig used to + // instantiate this Container. + map annotations = 9; +} + +message ListContainersResponse { + // List of containers. + repeated Container containers = 1; +} + +message ContainerStatusRequest { + // ID of the container for which to retrieve status. + string container_id = 1; + // Verbose indicates whether to return extra information about the container. + bool verbose = 2; +} + +// ContainerStatus represents the status of a container. +message ContainerStatus { + // ID of the container. + string id = 1; + // Metadata of the container. + ContainerMetadata metadata = 2; + // Status of the container. + ContainerState state = 3; + // Creation time of the container in nanoseconds. + int64 created_at = 4; + // Start time of the container in nanoseconds. Default: 0 (not specified). + int64 started_at = 5; + // Finish time of the container in nanoseconds. Default: 0 (not specified). + int64 finished_at = 6; + // Exit code of the container. Only required when finished_at != 0. Default: 0. + int32 exit_code = 7; + // Spec of the image. + ImageSpec image = 8; + // Reference to the image in use. For most runtimes, this should be an + // image ID + string image_ref = 9; + // Brief CamelCase string explaining why container is in its current state. + string reason = 10; + // Human-readable message indicating details about why container is in its + // current state. + string message = 11; + // Key-value pairs that may be used to scope and select individual resources. + map labels = 12; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding ContainerConfig used to + // instantiate the Container this status represents. + map annotations = 13; + // Mounts for the container. + repeated Mount mounts = 14; + // Log path of container. + string log_path = 15; + // Volumes of container + map volumes= 100; + // Resources specification for the container + LinuxContainerResources resources = 101; +} + +message Volume { +} + +message ContainerStatusResponse { + // Status of the container. + ContainerStatus status = 1; + // Info is extra information of the Container. The key could be abitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. pid for linux container based container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; +} + +message UpdateContainerResourcesRequest { + // ID of the container to update. + string container_id = 1; + // Resource configuration specific to Linux containers. + LinuxContainerResources linux = 2; +} + +message UpdateContainerResourcesResponse {} + +message ExecSyncRequest { + // ID of the container. + string container_id = 1; + // Command to execute. + repeated string cmd = 2; + // Timeout in seconds to stop the command. Default: 0 (run forever). + int64 timeout = 3; +} + +message ExecSyncResponse { + // Captured command stdout output. + bytes stdout = 1; + // Captured command stderr output. + bytes stderr = 2; + // Exit code the command finished with. Default: 0 (success). + int32 exit_code = 3; +} + +message ExecRequest { + // ID of the container in which to execute the command. + string container_id = 1; + // Command to execute. + repeated string cmd = 2; + // Whether to exec the command in a TTY. + bool tty = 3; + // Whether to stream stdin. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + bool stdin = 4; + // Whether to stream stdout. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + bool stdout = 5; + // Whether to stream stderr. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported + // in this case. The output of stdout and stderr will be combined to a + // single stream. + bool stderr = 6; +} + +message ExecResponse { + // Fully qualified URL of the exec streaming server. + string url = 1; +} + +message AttachRequest { + // ID of the container to which to attach. + string container_id = 1; + // Whether to stream stdin. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + bool stdin = 2; + // Whether the process being attached is running in a TTY. + // This must match the TTY setting in the ContainerConfig. + bool tty = 3; + // Whether to stream stdout. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + bool stdout = 4; + // Whether to stream stderr. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported + // in this case. The output of stdout and stderr will be combined to a + // single stream. + bool stderr = 5; +} + +message AttachResponse { + // Fully qualified URL of the attach streaming server. + string url = 1; +} + +message PortForwardRequest { + // ID of the container to which to forward the port. + string pod_sandbox_id = 1; + // Port to forward. + repeated int32 port = 2; +} + +message PortForwardResponse { + // Fully qualified URL of the port-forward streaming server. + string url = 1; +} + +message ImageFilter { + // Spec of the image. + ImageSpec image = 1; +} + +message ListImagesRequest { + // Filter to list images. + ImageFilter filter = 1; +} + +// Basic information about a container image. +message Image { + // ID of the image. + string id = 1; + // Other names by which this image is known. + repeated string repo_tags = 2; + // Digests by which this image is known. + repeated string repo_digests = 3; + // Size of the image in bytes. Must be > 0. + uint64 size = 4; + // UID that will run the command(s). This is used as a default if no user is + // specified when creating the container. UID and the following user name + // are mutually exclusive. + Int64Value uid = 5; + // User name that will run the command(s). This is used if UID is not set + // and no user is specified when creating container. + string username = 6; + // Volumes of image + map volumes= 100; +} + +message ListImagesResponse { + // List of images. + repeated Image images = 1; +} + +message ImageStatusRequest { + // Spec of the image. + ImageSpec image = 1; + // Verbose indicates whether to return extra information about the image. + bool verbose = 2; +} + +message ImageStatusResponse { + // Status of the image. + Image image = 1; + // Info is extra information of the Image. The key could be abitrary string, and + // value should be in json format. The information could include anything useful + // for debug, e.g. image config for oci image based container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; +} + +// AuthConfig contains authorization information for connecting to a registry. +message AuthConfig { + string username = 1; + string password = 2; + string auth = 3; + string server_address = 4; + // IdentityToken is used to authenticate the user and get + // an access token for the registry. + string identity_token = 5; + // RegistryToken is a bearer token to be sent to a registry + string registry_token = 6; +} + +message PullImageRequest { + // Spec of the image. + ImageSpec image = 1; + // Authentication configuration for pulling the image. + AuthConfig auth = 2; + // Config of the PodSandbox, which is used to pull image in PodSandbox context. + PodSandboxConfig sandbox_config = 3; +} + +message PullImageResponse { + // Reference to the image in use. For most runtimes, this should be an + // image ID or digest. + string image_ref = 1; +} + +message RemoveImageRequest { + // Spec of the image to remove. + ImageSpec image = 1; +} + +message RemoveImageResponse {} + +message NetworkConfig { + // CIDR to use for pod IP addresses. + string pod_cidr = 1; +} + +message RuntimeConfig { + NetworkConfig network_config = 1; +} + +message UpdateRuntimeConfigRequest { + RuntimeConfig runtime_config = 1; +} + +message UpdateRuntimeConfigResponse {} + +// RuntimeCondition contains condition information for the runtime. +// There are 2 kinds of runtime conditions: +// 1. Required conditions: Conditions are required for kubelet to work +// properly. If any required condition is unmet, the node will be not ready. +// The required conditions include: +// * RuntimeReady: RuntimeReady means the runtime is up and ready to accept +// basic containers e.g. container only needs host network. +// * NetworkReady: NetworkReady means the runtime network is up and ready to +// accept containers which require container network. +// 2. Optional conditions: Conditions are informative to the user, but kubelet +// will not rely on. Since condition type is an arbitrary string, all conditions +// not required are optional. These conditions will be exposed to users to help +// them understand the status of the system. +message RuntimeCondition { + // Type of runtime condition. + string type = 1; + // Status of the condition, one of true/false. Default: false. + bool status = 2; + // Brief CamelCase string containing reason for the condition's last transition. + string reason = 3; + // Human-readable message indicating details about last transition. + string message = 4; +} + +// RuntimeStatus is information about the current status of the runtime. +message RuntimeStatus { + // List of current observed runtime conditions. + repeated RuntimeCondition conditions = 1; +} + +message StatusRequest { + // Verbose indicates whether to return extra information about the runtime. + bool verbose = 1; +} + +message StatusResponse { + // Status of the Runtime. + RuntimeStatus status = 1; + // Info is extra information of the Runtime. The key could be abitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. plugins used by the container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; +} + +message ImageFsInfoRequest {} + +// UInt64Value is the wrapper of uint64. +message UInt64Value { + // The value. + uint64 value = 1; +} + +// StorageIdentifier uniquely identify the storage.. +message StorageIdentifier{ + // UUID of the device. + string uuid = 1; +} + +// FilesystemUsage provides the filesystem usage information. +message FilesystemUsage { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + int64 timestamp = 1; + // The underlying storage of the filesystem. + StorageIdentifier storage_id = 2; + // UsedBytes represents the bytes used for images on the filesystem. + // This may differ from the total bytes used on the filesystem and may not + // equal CapacityBytes - AvailableBytes. + UInt64Value used_bytes = 3; + // InodesUsed represents the inodes used by the images. + // This may not equal InodesCapacity - InodesAvailable because the underlying + // filesystem may also be used for purposes other than storing images. + UInt64Value inodes_used = 4; +} + +message ImageFsInfoResponse { + // Information of image filesystem(s). + repeated FilesystemUsage image_filesystems = 1; +} + +message ContainerStatsRequest{ + // ID of the container for which to retrieve stats. + string container_id = 1; +} + +message ContainerStatsResponse { + // Stats of the container. + ContainerStats stats = 1; +} + +message ListContainerStatsRequest{ + // Filter for the list request. + ContainerStatsFilter filter = 1; +} + +// ContainerStatsFilter is used to filter containers. +// All those fields are combined with 'AND' +message ContainerStatsFilter { + // ID of the container. + string id = 1; + // ID of the PodSandbox. + string pod_sandbox_id = 2; + // LabelSelector to select matches. + // Only api.MatchLabels is supported for now and the requirements + // are ANDed. MatchExpressions is not supported yet. + map label_selector = 3; +} + +message ListContainerStatsResponse { + // Stats of the container. + repeated ContainerStats stats = 1; +} + +// ContainerAttributes provides basic information of the container. +message ContainerAttributes { + // ID of the container. + string id = 1; + // Metadata of the container. + ContainerMetadata metadata = 2; + // Key-value pairs that may be used to scope and select individual resources. + map labels = 3; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding ContainerConfig used to + // instantiate the Container this status represents. + map annotations = 4; +} + +// ContainerStats provides the resource usage statistics for a container. +message ContainerStats { + // Information of the container. + ContainerAttributes attributes = 1; + // CPU usage gathered from the container. + CpuUsage cpu = 2; + // Memory usage gathered from the container. + MemoryUsage memory = 3; + // Usage of the writeable layer. + FilesystemUsage writable_layer = 4; +} + +// CpuUsage provides the CPU usage information. +message CpuUsage { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + int64 timestamp = 1; + // Cumulative CPU usage (sum across all cores) since object creation. + UInt64Value usage_core_nano_seconds = 2; +} + +// MemoryUsage provides the memory usage information. +message MemoryUsage { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + int64 timestamp = 1; + // The amount of working set memory in bytes. + UInt64Value working_set_bytes = 2; +} \ No newline at end of file diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/constants.go b/cri/apis/v1alpha1/constants.go similarity index 99% rename from vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/constants.go rename to cri/apis/v1alpha1/constants.go index 04cac264d1..82ace15179 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/constants.go +++ b/cri/apis/v1alpha1/constants.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package runtime +package v1alpha1 // This file contains all constants defined in CRI. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/BUILD b/cri/apis/v1alpha2/BUILD similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/BUILD rename to cri/apis/v1alpha2/BUILD diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.pb.go b/cri/apis/v1alpha2/api.pb.go similarity index 89% rename from vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.pb.go rename to cri/apis/v1alpha2/api.pb.go index f627e948a2..20d297cd45 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.pb.go +++ b/cri/apis/v1alpha2/api.pb.go @@ -13,7 +13,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ - // Code generated by protoc-gen-gogo. // source: api.proto // DO NOT EDIT! @@ -56,6 +55,9 @@ limitations under the License. ImageSpec KeyValue LinuxContainerResources + WeightDevice + ThrottleDevice + Ulimit SELinuxOption Capability LinuxContainerSecurityContext @@ -80,6 +82,7 @@ limitations under the License. ListContainersResponse ContainerStatusRequest ContainerStatus + Volume ContainerStatusResponse UpdateContainerResourcesRequest UpdateContainerResourcesResponse @@ -1315,6 +1318,23 @@ type LinuxContainerResources struct { CpusetCpus string `protobuf:"bytes,6,opt,name=cpuset_cpus,json=cpusetCpus,proto3" json:"cpuset_cpus,omitempty"` // CpusetMems constrains the allowed set of memory nodes. Default: "" (not specified). CpusetMems string `protobuf:"bytes,7,opt,name=cpuset_mems,json=cpusetMems,proto3" json:"cpuset_mems,omitempty"` + // DiskQuota constrains the disk + DiskQuota map[string]string `protobuf:"bytes,100,rep,name=disk_quota,json=diskQuota" json:"disk_quota,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Block IO weight (relative weight vs. other containers) + BlkioWeight uint32 `protobuf:"varint,101,opt,name=blkio_weight,json=blkioWeight,proto3" json:"blkio_weight,omitempty"` + BlkioWeightDevice []*WeightDevice `protobuf:"bytes,102,rep,name=blkio_weight_device,json=blkioWeightDevice" json:"blkio_weight_device,omitempty"` + BlkioDeviceReadBps []*ThrottleDevice `protobuf:"bytes,103,rep,name=blkio_device_read_bps,json=blkioDeviceReadBps" json:"blkio_device_read_bps,omitempty"` + BlkioDeviceWriteBps []*ThrottleDevice `protobuf:"bytes,104,rep,name=blkio_device_write_bps,json=blkioDeviceWriteBps" json:"blkio_device_write_bps,omitempty"` + BlkioDeviceRead_IOps []*ThrottleDevice `protobuf:"bytes,105,rep,name=blkio_device_read_IOps,json=blkioDeviceReadIOps" json:"blkio_device_read_IOps,omitempty"` + BlkioDeviceWrite_IOps []*ThrottleDevice `protobuf:"bytes,106,rep,name=blkio_device_write_IOps,json=blkioDeviceWriteIOps" json:"blkio_device_write_IOps,omitempty"` + // Kernel memory limit (in bytes) + KernelMemory int64 `protobuf:"varint,107,opt,name=kernel_memory,json=kernelMemory,proto3" json:"kernel_memory,omitempty"` + // Memory soft limit (in bytes) + MemoryReservation int64 `protobuf:"varint,108,opt,name=memory_reservation,json=memoryReservation,proto3" json:"memory_reservation,omitempty"` + // Tuning container memory swappiness behaviour + MemorySwappiness *Int64Value `protobuf:"bytes,109,opt,name=memory_swappiness,json=memorySwappiness" json:"memory_swappiness,omitempty"` + // List of ulimits to be set in the container + Ulimits []*Ulimit `protobuf:"bytes,110,rep,name=ulimits" json:"ulimits,omitempty"` } func (m *LinuxContainerResources) Reset() { *m = LinuxContainerResources{} } @@ -1370,6 +1390,170 @@ func (m *LinuxContainerResources) GetCpusetMems() string { return "" } +func (m *LinuxContainerResources) GetDiskQuota() map[string]string { + if m != nil { + return m.DiskQuota + } + return nil +} + +func (m *LinuxContainerResources) GetBlkioWeight() uint32 { + if m != nil { + return m.BlkioWeight + } + return 0 +} + +func (m *LinuxContainerResources) GetBlkioWeightDevice() []*WeightDevice { + if m != nil { + return m.BlkioWeightDevice + } + return nil +} + +func (m *LinuxContainerResources) GetBlkioDeviceReadBps() []*ThrottleDevice { + if m != nil { + return m.BlkioDeviceReadBps + } + return nil +} + +func (m *LinuxContainerResources) GetBlkioDeviceWriteBps() []*ThrottleDevice { + if m != nil { + return m.BlkioDeviceWriteBps + } + return nil +} + +func (m *LinuxContainerResources) GetBlkioDeviceRead_IOps() []*ThrottleDevice { + if m != nil { + return m.BlkioDeviceRead_IOps + } + return nil +} + +func (m *LinuxContainerResources) GetBlkioDeviceWrite_IOps() []*ThrottleDevice { + if m != nil { + return m.BlkioDeviceWrite_IOps + } + return nil +} + +func (m *LinuxContainerResources) GetKernelMemory() int64 { + if m != nil { + return m.KernelMemory + } + return 0 +} + +func (m *LinuxContainerResources) GetMemoryReservation() int64 { + if m != nil { + return m.MemoryReservation + } + return 0 +} + +func (m *LinuxContainerResources) GetMemorySwappiness() *Int64Value { + if m != nil { + return m.MemorySwappiness + } + return nil +} + +func (m *LinuxContainerResources) GetUlimits() []*Ulimit { + if m != nil { + return m.Ulimits + } + return nil +} + +// WeightDevice is a structure that holds device:weight pair +type WeightDevice struct { + // Path of weightdevice. + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + // Weight of weightdevice. + Weight uint32 `protobuf:"varint,2,opt,name=Weight,proto3" json:"Weight,omitempty"` +} + +func (m *WeightDevice) Reset() { *m = WeightDevice{} } +func (*WeightDevice) ProtoMessage() {} +func (*WeightDevice) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{31} } + +func (m *WeightDevice) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *WeightDevice) GetWeight() uint32 { + if m != nil { + return m.Weight + } + return 0 +} + +// ThrottleDevice is a structure that holds device:rate_per_second pair +type ThrottleDevice struct { + // Path of throttledevice. + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + // Rate of throttledevice. + Rate uint64 `protobuf:"varint,2,opt,name=rate,proto3" json:"rate,omitempty"` +} + +func (m *ThrottleDevice) Reset() { *m = ThrottleDevice{} } +func (*ThrottleDevice) ProtoMessage() {} +func (*ThrottleDevice) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{32} } + +func (m *ThrottleDevice) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *ThrottleDevice) GetRate() uint64 { + if m != nil { + return m.Rate + } + return 0 +} + +// Ulimit is a human friendly version of Rlimit. +type Ulimit struct { + // Name of ulimit. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Hard limit of ulimit. + Hard int64 `protobuf:"varint,2,opt,name=hard,proto3" json:"hard,omitempty"` + // Soft limit of Ulimit. + Soft int64 `protobuf:"varint,3,opt,name=soft,proto3" json:"soft,omitempty"` +} + +func (m *Ulimit) Reset() { *m = Ulimit{} } +func (*Ulimit) ProtoMessage() {} +func (*Ulimit) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{33} } + +func (m *Ulimit) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Ulimit) GetHard() int64 { + if m != nil { + return m.Hard + } + return 0 +} + +func (m *Ulimit) GetSoft() int64 { + if m != nil { + return m.Soft + } + return 0 +} + // SELinuxOption are the labels to be applied to the container. type SELinuxOption struct { User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` @@ -1380,7 +1564,7 @@ type SELinuxOption struct { func (m *SELinuxOption) Reset() { *m = SELinuxOption{} } func (*SELinuxOption) ProtoMessage() {} -func (*SELinuxOption) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{31} } +func (*SELinuxOption) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{34} } func (m *SELinuxOption) GetUser() string { if m != nil { @@ -1420,7 +1604,7 @@ type Capability struct { func (m *Capability) Reset() { *m = Capability{} } func (*Capability) ProtoMessage() {} -func (*Capability) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{32} } +func (*Capability) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{35} } func (m *Capability) GetAddCapabilities() []string { if m != nil { @@ -1501,7 +1685,7 @@ type LinuxContainerSecurityContext struct { func (m *LinuxContainerSecurityContext) Reset() { *m = LinuxContainerSecurityContext{} } func (*LinuxContainerSecurityContext) ProtoMessage() {} func (*LinuxContainerSecurityContext) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{33} + return fileDescriptorApi, []int{36} } func (m *LinuxContainerSecurityContext) GetCapabilities() *Capability { @@ -1599,7 +1783,7 @@ type LinuxContainerConfig struct { func (m *LinuxContainerConfig) Reset() { *m = LinuxContainerConfig{} } func (*LinuxContainerConfig) ProtoMessage() {} -func (*LinuxContainerConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{34} } +func (*LinuxContainerConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{37} } func (m *LinuxContainerConfig) GetResources() *LinuxContainerResources { if m != nil { @@ -1624,7 +1808,7 @@ type WindowsContainerConfig struct { func (m *WindowsContainerConfig) Reset() { *m = WindowsContainerConfig{} } func (*WindowsContainerConfig) ProtoMessage() {} -func (*WindowsContainerConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{35} } +func (*WindowsContainerConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{38} } func (m *WindowsContainerConfig) GetResources() *WindowsContainerResources { if m != nil { @@ -1648,7 +1832,7 @@ type WindowsContainerResources struct { func (m *WindowsContainerResources) Reset() { *m = WindowsContainerResources{} } func (*WindowsContainerResources) ProtoMessage() {} -func (*WindowsContainerResources) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{36} } +func (*WindowsContainerResources) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{39} } func (m *WindowsContainerResources) GetCpuShares() int64 { if m != nil { @@ -1692,7 +1876,7 @@ type ContainerMetadata struct { func (m *ContainerMetadata) Reset() { *m = ContainerMetadata{} } func (*ContainerMetadata) ProtoMessage() {} -func (*ContainerMetadata) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{37} } +func (*ContainerMetadata) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{40} } func (m *ContainerMetadata) GetName() string { if m != nil { @@ -1723,7 +1907,7 @@ type Device struct { func (m *Device) Reset() { *m = Device{} } func (*Device) ProtoMessage() {} -func (*Device) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{38} } +func (*Device) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{41} } func (m *Device) GetContainerPath() string { if m != nil { @@ -1808,11 +1992,13 @@ type ContainerConfig struct { Linux *LinuxContainerConfig `protobuf:"bytes,15,opt,name=linux" json:"linux,omitempty"` // Configuration specific to Windows containers. Windows *WindowsContainerConfig `protobuf:"bytes,16,opt,name=windows" json:"windows,omitempty"` + // NetPriority of the container + NetPriority int64 `protobuf:"varint,100,opt,name=net_priority,json=netPriority,proto3" json:"net_priority,omitempty"` } func (m *ContainerConfig) Reset() { *m = ContainerConfig{} } func (*ContainerConfig) ProtoMessage() {} -func (*ContainerConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{39} } +func (*ContainerConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{42} } func (m *ContainerConfig) GetMetadata() *ContainerMetadata { if m != nil { @@ -1926,6 +2112,13 @@ func (m *ContainerConfig) GetWindows() *WindowsContainerConfig { return nil } +func (m *ContainerConfig) GetNetPriority() int64 { + if m != nil { + return m.NetPriority + } + return 0 +} + type CreateContainerRequest struct { // ID of the PodSandbox in which the container should be created. PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` @@ -1940,7 +2133,7 @@ type CreateContainerRequest struct { func (m *CreateContainerRequest) Reset() { *m = CreateContainerRequest{} } func (*CreateContainerRequest) ProtoMessage() {} -func (*CreateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{40} } +func (*CreateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{43} } func (m *CreateContainerRequest) GetPodSandboxId() string { if m != nil { @@ -1970,7 +2163,7 @@ type CreateContainerResponse struct { func (m *CreateContainerResponse) Reset() { *m = CreateContainerResponse{} } func (*CreateContainerResponse) ProtoMessage() {} -func (*CreateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{41} } +func (*CreateContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{44} } func (m *CreateContainerResponse) GetContainerId() string { if m != nil { @@ -1986,7 +2179,7 @@ type StartContainerRequest struct { func (m *StartContainerRequest) Reset() { *m = StartContainerRequest{} } func (*StartContainerRequest) ProtoMessage() {} -func (*StartContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{42} } +func (*StartContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{45} } func (m *StartContainerRequest) GetContainerId() string { if m != nil { @@ -2000,7 +2193,7 @@ type StartContainerResponse struct { func (m *StartContainerResponse) Reset() { *m = StartContainerResponse{} } func (*StartContainerResponse) ProtoMessage() {} -func (*StartContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{43} } +func (*StartContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{46} } type StopContainerRequest struct { // ID of the container to stop. @@ -2012,7 +2205,7 @@ type StopContainerRequest struct { func (m *StopContainerRequest) Reset() { *m = StopContainerRequest{} } func (*StopContainerRequest) ProtoMessage() {} -func (*StopContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{44} } +func (*StopContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{47} } func (m *StopContainerRequest) GetContainerId() string { if m != nil { @@ -2033,7 +2226,7 @@ type StopContainerResponse struct { func (m *StopContainerResponse) Reset() { *m = StopContainerResponse{} } func (*StopContainerResponse) ProtoMessage() {} -func (*StopContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{45} } +func (*StopContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{48} } type RemoveContainerRequest struct { // ID of the container to remove. @@ -2042,7 +2235,7 @@ type RemoveContainerRequest struct { func (m *RemoveContainerRequest) Reset() { *m = RemoveContainerRequest{} } func (*RemoveContainerRequest) ProtoMessage() {} -func (*RemoveContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{46} } +func (*RemoveContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{49} } func (m *RemoveContainerRequest) GetContainerId() string { if m != nil { @@ -2056,7 +2249,7 @@ type RemoveContainerResponse struct { func (m *RemoveContainerResponse) Reset() { *m = RemoveContainerResponse{} } func (*RemoveContainerResponse) ProtoMessage() {} -func (*RemoveContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{47} } +func (*RemoveContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{50} } // ContainerStateValue is the wrapper of ContainerState. type ContainerStateValue struct { @@ -2066,7 +2259,7 @@ type ContainerStateValue struct { func (m *ContainerStateValue) Reset() { *m = ContainerStateValue{} } func (*ContainerStateValue) ProtoMessage() {} -func (*ContainerStateValue) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{48} } +func (*ContainerStateValue) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{51} } func (m *ContainerStateValue) GetState() ContainerState { if m != nil { @@ -2092,7 +2285,7 @@ type ContainerFilter struct { func (m *ContainerFilter) Reset() { *m = ContainerFilter{} } func (*ContainerFilter) ProtoMessage() {} -func (*ContainerFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{49} } +func (*ContainerFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{52} } func (m *ContainerFilter) GetId() string { if m != nil { @@ -2128,7 +2321,7 @@ type ListContainersRequest struct { func (m *ListContainersRequest) Reset() { *m = ListContainersRequest{} } func (*ListContainersRequest) ProtoMessage() {} -func (*ListContainersRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{50} } +func (*ListContainersRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{53} } func (m *ListContainersRequest) GetFilter() *ContainerFilter { if m != nil { @@ -2167,7 +2360,7 @@ type Container struct { func (m *Container) Reset() { *m = Container{} } func (*Container) ProtoMessage() {} -func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{51} } +func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{54} } func (m *Container) GetId() string { if m != nil { @@ -2239,7 +2432,7 @@ type ListContainersResponse struct { func (m *ListContainersResponse) Reset() { *m = ListContainersResponse{} } func (*ListContainersResponse) ProtoMessage() {} -func (*ListContainersResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{52} } +func (*ListContainersResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{55} } func (m *ListContainersResponse) GetContainers() []*Container { if m != nil { @@ -2257,7 +2450,7 @@ type ContainerStatusRequest struct { func (m *ContainerStatusRequest) Reset() { *m = ContainerStatusRequest{} } func (*ContainerStatusRequest) ProtoMessage() {} -func (*ContainerStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{53} } +func (*ContainerStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{56} } func (m *ContainerStatusRequest) GetContainerId() string { if m != nil { @@ -2310,11 +2503,15 @@ type ContainerStatus struct { Mounts []*Mount `protobuf:"bytes,14,rep,name=mounts" json:"mounts,omitempty"` // Log path of container. LogPath string `protobuf:"bytes,15,opt,name=log_path,json=logPath,proto3" json:"log_path,omitempty"` + // Volumes of container + Volumes map[string]*Volume `protobuf:"bytes,100,rep,name=volumes" json:"volumes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` + // Resources specification for the container + Resources *LinuxContainerResources `protobuf:"bytes,101,opt,name=resources" json:"resources,omitempty"` } func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } func (*ContainerStatus) ProtoMessage() {} -func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{54} } +func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{57} } func (m *ContainerStatus) GetId() string { if m != nil { @@ -2421,6 +2618,27 @@ func (m *ContainerStatus) GetLogPath() string { return "" } +func (m *ContainerStatus) GetVolumes() map[string]*Volume { + if m != nil { + return m.Volumes + } + return nil +} + +func (m *ContainerStatus) GetResources() *LinuxContainerResources { + if m != nil { + return m.Resources + } + return nil +} + +type Volume struct { +} + +func (m *Volume) Reset() { *m = Volume{} } +func (*Volume) ProtoMessage() {} +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{58} } + type ContainerStatusResponse struct { // Status of the container. Status *ContainerStatus `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` @@ -2433,7 +2651,7 @@ type ContainerStatusResponse struct { func (m *ContainerStatusResponse) Reset() { *m = ContainerStatusResponse{} } func (*ContainerStatusResponse) ProtoMessage() {} -func (*ContainerStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{55} } +func (*ContainerStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{59} } func (m *ContainerStatusResponse) GetStatus() *ContainerStatus { if m != nil { @@ -2459,7 +2677,7 @@ type UpdateContainerResourcesRequest struct { func (m *UpdateContainerResourcesRequest) Reset() { *m = UpdateContainerResourcesRequest{} } func (*UpdateContainerResourcesRequest) ProtoMessage() {} func (*UpdateContainerResourcesRequest) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{56} + return fileDescriptorApi, []int{60} } func (m *UpdateContainerResourcesRequest) GetContainerId() string { @@ -2482,7 +2700,7 @@ type UpdateContainerResourcesResponse struct { func (m *UpdateContainerResourcesResponse) Reset() { *m = UpdateContainerResourcesResponse{} } func (*UpdateContainerResourcesResponse) ProtoMessage() {} func (*UpdateContainerResourcesResponse) Descriptor() ([]byte, []int) { - return fileDescriptorApi, []int{57} + return fileDescriptorApi, []int{61} } type ExecSyncRequest struct { @@ -2496,7 +2714,7 @@ type ExecSyncRequest struct { func (m *ExecSyncRequest) Reset() { *m = ExecSyncRequest{} } func (*ExecSyncRequest) ProtoMessage() {} -func (*ExecSyncRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{58} } +func (*ExecSyncRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{62} } func (m *ExecSyncRequest) GetContainerId() string { if m != nil { @@ -2530,7 +2748,7 @@ type ExecSyncResponse struct { func (m *ExecSyncResponse) Reset() { *m = ExecSyncResponse{} } func (*ExecSyncResponse) ProtoMessage() {} -func (*ExecSyncResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{59} } +func (*ExecSyncResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{63} } func (m *ExecSyncResponse) GetStdout() []byte { if m != nil { @@ -2576,7 +2794,7 @@ type ExecRequest struct { func (m *ExecRequest) Reset() { *m = ExecRequest{} } func (*ExecRequest) ProtoMessage() {} -func (*ExecRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{60} } +func (*ExecRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{64} } func (m *ExecRequest) GetContainerId() string { if m != nil { @@ -2627,7 +2845,7 @@ type ExecResponse struct { func (m *ExecResponse) Reset() { *m = ExecResponse{} } func (*ExecResponse) ProtoMessage() {} -func (*ExecResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{61} } +func (*ExecResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{65} } func (m *ExecResponse) GetUrl() string { if m != nil { @@ -2658,7 +2876,7 @@ type AttachRequest struct { func (m *AttachRequest) Reset() { *m = AttachRequest{} } func (*AttachRequest) ProtoMessage() {} -func (*AttachRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{62} } +func (*AttachRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66} } func (m *AttachRequest) GetContainerId() string { if m != nil { @@ -2702,7 +2920,7 @@ type AttachResponse struct { func (m *AttachResponse) Reset() { *m = AttachResponse{} } func (*AttachResponse) ProtoMessage() {} -func (*AttachResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{63} } +func (*AttachResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{67} } func (m *AttachResponse) GetUrl() string { if m != nil { @@ -2720,7 +2938,7 @@ type PortForwardRequest struct { func (m *PortForwardRequest) Reset() { *m = PortForwardRequest{} } func (*PortForwardRequest) ProtoMessage() {} -func (*PortForwardRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{64} } +func (*PortForwardRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68} } func (m *PortForwardRequest) GetPodSandboxId() string { if m != nil { @@ -2743,7 +2961,7 @@ type PortForwardResponse struct { func (m *PortForwardResponse) Reset() { *m = PortForwardResponse{} } func (*PortForwardResponse) ProtoMessage() {} -func (*PortForwardResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{65} } +func (*PortForwardResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{69} } func (m *PortForwardResponse) GetUrl() string { if m != nil { @@ -2759,7 +2977,7 @@ type ImageFilter struct { func (m *ImageFilter) Reset() { *m = ImageFilter{} } func (*ImageFilter) ProtoMessage() {} -func (*ImageFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{66} } +func (*ImageFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{70} } func (m *ImageFilter) GetImage() *ImageSpec { if m != nil { @@ -2775,7 +2993,7 @@ type ListImagesRequest struct { func (m *ListImagesRequest) Reset() { *m = ListImagesRequest{} } func (*ListImagesRequest) ProtoMessage() {} -func (*ListImagesRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{67} } +func (*ListImagesRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{71} } func (m *ListImagesRequest) GetFilter() *ImageFilter { if m != nil { @@ -2801,11 +3019,13 @@ type Image struct { // User name that will run the command(s). This is used if UID is not set // and no user is specified when creating container. Username string `protobuf:"bytes,6,opt,name=username,proto3" json:"username,omitempty"` + // Volumes of image + Volumes map[string]*Volume `protobuf:"bytes,100,rep,name=volumes" json:"volumes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` } func (m *Image) Reset() { *m = Image{} } func (*Image) ProtoMessage() {} -func (*Image) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{68} } +func (*Image) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72} } func (m *Image) GetId() string { if m != nil { @@ -2849,6 +3069,13 @@ func (m *Image) GetUsername() string { return "" } +func (m *Image) GetVolumes() map[string]*Volume { + if m != nil { + return m.Volumes + } + return nil +} + type ListImagesResponse struct { // List of images. Images []*Image `protobuf:"bytes,1,rep,name=images" json:"images,omitempty"` @@ -2856,7 +3083,7 @@ type ListImagesResponse struct { func (m *ListImagesResponse) Reset() { *m = ListImagesResponse{} } func (*ListImagesResponse) ProtoMessage() {} -func (*ListImagesResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{69} } +func (*ListImagesResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73} } func (m *ListImagesResponse) GetImages() []*Image { if m != nil { @@ -2874,7 +3101,7 @@ type ImageStatusRequest struct { func (m *ImageStatusRequest) Reset() { *m = ImageStatusRequest{} } func (*ImageStatusRequest) ProtoMessage() {} -func (*ImageStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{70} } +func (*ImageStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74} } func (m *ImageStatusRequest) GetImage() *ImageSpec { if m != nil { @@ -2902,7 +3129,7 @@ type ImageStatusResponse struct { func (m *ImageStatusResponse) Reset() { *m = ImageStatusResponse{} } func (*ImageStatusResponse) ProtoMessage() {} -func (*ImageStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{71} } +func (*ImageStatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{75} } func (m *ImageStatusResponse) GetImage() *Image { if m != nil { @@ -2933,7 +3160,7 @@ type AuthConfig struct { func (m *AuthConfig) Reset() { *m = AuthConfig{} } func (*AuthConfig) ProtoMessage() {} -func (*AuthConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{72} } +func (*AuthConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{76} } func (m *AuthConfig) GetUsername() string { if m != nil { @@ -2988,7 +3215,7 @@ type PullImageRequest struct { func (m *PullImageRequest) Reset() { *m = PullImageRequest{} } func (*PullImageRequest) ProtoMessage() {} -func (*PullImageRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{73} } +func (*PullImageRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{77} } func (m *PullImageRequest) GetImage() *ImageSpec { if m != nil { @@ -3019,7 +3246,7 @@ type PullImageResponse struct { func (m *PullImageResponse) Reset() { *m = PullImageResponse{} } func (*PullImageResponse) ProtoMessage() {} -func (*PullImageResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{74} } +func (*PullImageResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{78} } func (m *PullImageResponse) GetImageRef() string { if m != nil { @@ -3035,7 +3262,7 @@ type RemoveImageRequest struct { func (m *RemoveImageRequest) Reset() { *m = RemoveImageRequest{} } func (*RemoveImageRequest) ProtoMessage() {} -func (*RemoveImageRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{75} } +func (*RemoveImageRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{79} } func (m *RemoveImageRequest) GetImage() *ImageSpec { if m != nil { @@ -3049,7 +3276,7 @@ type RemoveImageResponse struct { func (m *RemoveImageResponse) Reset() { *m = RemoveImageResponse{} } func (*RemoveImageResponse) ProtoMessage() {} -func (*RemoveImageResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{76} } +func (*RemoveImageResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{80} } type NetworkConfig struct { // CIDR to use for pod IP addresses. If the CIDR is empty, runtimes @@ -3059,7 +3286,7 @@ type NetworkConfig struct { func (m *NetworkConfig) Reset() { *m = NetworkConfig{} } func (*NetworkConfig) ProtoMessage() {} -func (*NetworkConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{77} } +func (*NetworkConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{81} } func (m *NetworkConfig) GetPodCidr() string { if m != nil { @@ -3074,7 +3301,7 @@ type RuntimeConfig struct { func (m *RuntimeConfig) Reset() { *m = RuntimeConfig{} } func (*RuntimeConfig) ProtoMessage() {} -func (*RuntimeConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{78} } +func (*RuntimeConfig) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{82} } func (m *RuntimeConfig) GetNetworkConfig() *NetworkConfig { if m != nil { @@ -3089,7 +3316,7 @@ type UpdateRuntimeConfigRequest struct { func (m *UpdateRuntimeConfigRequest) Reset() { *m = UpdateRuntimeConfigRequest{} } func (*UpdateRuntimeConfigRequest) ProtoMessage() {} -func (*UpdateRuntimeConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{79} } +func (*UpdateRuntimeConfigRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{83} } func (m *UpdateRuntimeConfigRequest) GetRuntimeConfig() *RuntimeConfig { if m != nil { @@ -3103,7 +3330,7 @@ type UpdateRuntimeConfigResponse struct { func (m *UpdateRuntimeConfigResponse) Reset() { *m = UpdateRuntimeConfigResponse{} } func (*UpdateRuntimeConfigResponse) ProtoMessage() {} -func (*UpdateRuntimeConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{80} } +func (*UpdateRuntimeConfigResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{84} } // RuntimeCondition contains condition information for the runtime. // There are 2 kinds of runtime conditions: @@ -3131,7 +3358,7 @@ type RuntimeCondition struct { func (m *RuntimeCondition) Reset() { *m = RuntimeCondition{} } func (*RuntimeCondition) ProtoMessage() {} -func (*RuntimeCondition) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{81} } +func (*RuntimeCondition) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{85} } func (m *RuntimeCondition) GetType() string { if m != nil { @@ -3169,7 +3396,7 @@ type RuntimeStatus struct { func (m *RuntimeStatus) Reset() { *m = RuntimeStatus{} } func (*RuntimeStatus) ProtoMessage() {} -func (*RuntimeStatus) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{82} } +func (*RuntimeStatus) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{86} } func (m *RuntimeStatus) GetConditions() []*RuntimeCondition { if m != nil { @@ -3185,7 +3412,7 @@ type StatusRequest struct { func (m *StatusRequest) Reset() { *m = StatusRequest{} } func (*StatusRequest) ProtoMessage() {} -func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{83} } +func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{87} } func (m *StatusRequest) GetVerbose() bool { if m != nil { @@ -3206,7 +3433,7 @@ type StatusResponse struct { func (m *StatusResponse) Reset() { *m = StatusResponse{} } func (*StatusResponse) ProtoMessage() {} -func (*StatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{84} } +func (*StatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{88} } func (m *StatusResponse) GetStatus() *RuntimeStatus { if m != nil { @@ -3227,7 +3454,7 @@ type ImageFsInfoRequest struct { func (m *ImageFsInfoRequest) Reset() { *m = ImageFsInfoRequest{} } func (*ImageFsInfoRequest) ProtoMessage() {} -func (*ImageFsInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{85} } +func (*ImageFsInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{89} } // UInt64Value is the wrapper of uint64. type UInt64Value struct { @@ -3237,7 +3464,7 @@ type UInt64Value struct { func (m *UInt64Value) Reset() { *m = UInt64Value{} } func (*UInt64Value) ProtoMessage() {} -func (*UInt64Value) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{86} } +func (*UInt64Value) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{90} } func (m *UInt64Value) GetValue() uint64 { if m != nil { @@ -3254,7 +3481,7 @@ type FilesystemIdentifier struct { func (m *FilesystemIdentifier) Reset() { *m = FilesystemIdentifier{} } func (*FilesystemIdentifier) ProtoMessage() {} -func (*FilesystemIdentifier) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{87} } +func (*FilesystemIdentifier) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{91} } func (m *FilesystemIdentifier) GetMountpoint() string { if m != nil { @@ -3281,7 +3508,7 @@ type FilesystemUsage struct { func (m *FilesystemUsage) Reset() { *m = FilesystemUsage{} } func (*FilesystemUsage) ProtoMessage() {} -func (*FilesystemUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{88} } +func (*FilesystemUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{92} } func (m *FilesystemUsage) GetTimestamp() int64 { if m != nil { @@ -3318,7 +3545,7 @@ type ImageFsInfoResponse struct { func (m *ImageFsInfoResponse) Reset() { *m = ImageFsInfoResponse{} } func (*ImageFsInfoResponse) ProtoMessage() {} -func (*ImageFsInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{89} } +func (*ImageFsInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{93} } func (m *ImageFsInfoResponse) GetImageFilesystems() []*FilesystemUsage { if m != nil { @@ -3334,7 +3561,7 @@ type ContainerStatsRequest struct { func (m *ContainerStatsRequest) Reset() { *m = ContainerStatsRequest{} } func (*ContainerStatsRequest) ProtoMessage() {} -func (*ContainerStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{90} } +func (*ContainerStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{94} } func (m *ContainerStatsRequest) GetContainerId() string { if m != nil { @@ -3350,7 +3577,7 @@ type ContainerStatsResponse struct { func (m *ContainerStatsResponse) Reset() { *m = ContainerStatsResponse{} } func (*ContainerStatsResponse) ProtoMessage() {} -func (*ContainerStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{91} } +func (*ContainerStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{95} } func (m *ContainerStatsResponse) GetStats() *ContainerStats { if m != nil { @@ -3366,7 +3593,7 @@ type ListContainerStatsRequest struct { func (m *ListContainerStatsRequest) Reset() { *m = ListContainerStatsRequest{} } func (*ListContainerStatsRequest) ProtoMessage() {} -func (*ListContainerStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{92} } +func (*ListContainerStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{96} } func (m *ListContainerStatsRequest) GetFilter() *ContainerStatsFilter { if m != nil { @@ -3390,7 +3617,7 @@ type ContainerStatsFilter struct { func (m *ContainerStatsFilter) Reset() { *m = ContainerStatsFilter{} } func (*ContainerStatsFilter) ProtoMessage() {} -func (*ContainerStatsFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{93} } +func (*ContainerStatsFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{97} } func (m *ContainerStatsFilter) GetId() string { if m != nil { @@ -3420,7 +3647,7 @@ type ListContainerStatsResponse struct { func (m *ListContainerStatsResponse) Reset() { *m = ListContainerStatsResponse{} } func (*ListContainerStatsResponse) ProtoMessage() {} -func (*ListContainerStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{94} } +func (*ListContainerStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{98} } func (m *ListContainerStatsResponse) GetStats() []*ContainerStats { if m != nil { @@ -3446,7 +3673,7 @@ type ContainerAttributes struct { func (m *ContainerAttributes) Reset() { *m = ContainerAttributes{} } func (*ContainerAttributes) ProtoMessage() {} -func (*ContainerAttributes) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{95} } +func (*ContainerAttributes) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{99} } func (m *ContainerAttributes) GetId() string { if m != nil { @@ -3490,7 +3717,7 @@ type ContainerStats struct { func (m *ContainerStats) Reset() { *m = ContainerStats{} } func (*ContainerStats) ProtoMessage() {} -func (*ContainerStats) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{96} } +func (*ContainerStats) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{100} } func (m *ContainerStats) GetAttributes() *ContainerAttributes { if m != nil { @@ -3530,7 +3757,7 @@ type CpuUsage struct { func (m *CpuUsage) Reset() { *m = CpuUsage{} } func (*CpuUsage) ProtoMessage() {} -func (*CpuUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{97} } +func (*CpuUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{101} } func (m *CpuUsage) GetTimestamp() int64 { if m != nil { @@ -3556,7 +3783,7 @@ type MemoryUsage struct { func (m *MemoryUsage) Reset() { *m = MemoryUsage{} } func (*MemoryUsage) ProtoMessage() {} -func (*MemoryUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{98} } +func (*MemoryUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{102} } func (m *MemoryUsage) GetTimestamp() int64 { if m != nil { @@ -3579,7 +3806,7 @@ type ReopenContainerLogRequest struct { func (m *ReopenContainerLogRequest) Reset() { *m = ReopenContainerLogRequest{} } func (*ReopenContainerLogRequest) ProtoMessage() {} -func (*ReopenContainerLogRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{99} } +func (*ReopenContainerLogRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{103} } func (m *ReopenContainerLogRequest) GetContainerId() string { if m != nil { @@ -3593,7 +3820,7 @@ type ReopenContainerLogResponse struct { func (m *ReopenContainerLogResponse) Reset() { *m = ReopenContainerLogResponse{} } func (*ReopenContainerLogResponse) ProtoMessage() {} -func (*ReopenContainerLogResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{100} } +func (*ReopenContainerLogResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{104} } func init() { proto.RegisterType((*VersionRequest)(nil), "runtime.v1alpha2.VersionRequest") @@ -3627,6 +3854,9 @@ func init() { proto.RegisterType((*ImageSpec)(nil), "runtime.v1alpha2.ImageSpec") proto.RegisterType((*KeyValue)(nil), "runtime.v1alpha2.KeyValue") proto.RegisterType((*LinuxContainerResources)(nil), "runtime.v1alpha2.LinuxContainerResources") + proto.RegisterType((*WeightDevice)(nil), "runtime.v1alpha2.WeightDevice") + proto.RegisterType((*ThrottleDevice)(nil), "runtime.v1alpha2.ThrottleDevice") + proto.RegisterType((*Ulimit)(nil), "runtime.v1alpha2.Ulimit") proto.RegisterType((*SELinuxOption)(nil), "runtime.v1alpha2.SELinuxOption") proto.RegisterType((*Capability)(nil), "runtime.v1alpha2.Capability") proto.RegisterType((*LinuxContainerSecurityContext)(nil), "runtime.v1alpha2.LinuxContainerSecurityContext") @@ -3651,6 +3881,7 @@ func init() { proto.RegisterType((*ListContainersResponse)(nil), "runtime.v1alpha2.ListContainersResponse") proto.RegisterType((*ContainerStatusRequest)(nil), "runtime.v1alpha2.ContainerStatusRequest") proto.RegisterType((*ContainerStatus)(nil), "runtime.v1alpha2.ContainerStatus") + proto.RegisterType((*Volume)(nil), "runtime.v1alpha2.Volume") proto.RegisterType((*ContainerStatusResponse)(nil), "runtime.v1alpha2.ContainerStatusResponse") proto.RegisterType((*UpdateContainerResourcesRequest)(nil), "runtime.v1alpha2.UpdateContainerResourcesRequest") proto.RegisterType((*UpdateContainerResourcesResponse)(nil), "runtime.v1alpha2.UpdateContainerResourcesResponse") @@ -6065,10 +6296,146 @@ func (m *LinuxContainerResources) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintApi(dAtA, i, uint64(len(m.CpusetMems))) i += copy(dAtA[i:], m.CpusetMems) } + if len(m.DiskQuota) > 0 { + for k := range m.DiskQuota { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x6 + i++ + v := m.DiskQuota[k] + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } + if m.BlkioWeight != 0 { + dAtA[i] = 0xa8 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.BlkioWeight)) + } + if len(m.BlkioWeightDevice) > 0 { + for _, msg := range m.BlkioWeightDevice { + dAtA[i] = 0xb2 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.BlkioDeviceReadBps) > 0 { + for _, msg := range m.BlkioDeviceReadBps { + dAtA[i] = 0xba + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.BlkioDeviceWriteBps) > 0 { + for _, msg := range m.BlkioDeviceWriteBps { + dAtA[i] = 0xc2 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.BlkioDeviceRead_IOps) > 0 { + for _, msg := range m.BlkioDeviceRead_IOps { + dAtA[i] = 0xca + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.BlkioDeviceWrite_IOps) > 0 { + for _, msg := range m.BlkioDeviceWrite_IOps { + dAtA[i] = 0xd2 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.KernelMemory != 0 { + dAtA[i] = 0xd8 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.KernelMemory)) + } + if m.MemoryReservation != 0 { + dAtA[i] = 0xe0 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.MemoryReservation)) + } + if m.MemorySwappiness != nil { + dAtA[i] = 0xea + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.MemorySwappiness.Size())) + n21, err := m.MemorySwappiness.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n21 + } + if len(m.Ulimits) > 0 { + for _, msg := range m.Ulimits { + dAtA[i] = 0xf2 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } return i, nil } -func (m *SELinuxOption) Marshal() (dAtA []byte, err error) { +func (m *WeightDevice) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -6078,39 +6445,55 @@ func (m *SELinuxOption) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *SELinuxOption) MarshalTo(dAtA []byte) (int, error) { +func (m *WeightDevice) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int _ = l - if len(m.User) > 0 { + if len(m.Path) > 0 { dAtA[i] = 0xa i++ - i = encodeVarintApi(dAtA, i, uint64(len(m.User))) - i += copy(dAtA[i:], m.User) + i = encodeVarintApi(dAtA, i, uint64(len(m.Path))) + i += copy(dAtA[i:], m.Path) } - if len(m.Role) > 0 { - dAtA[i] = 0x12 + if m.Weight != 0 { + dAtA[i] = 0x10 i++ - i = encodeVarintApi(dAtA, i, uint64(len(m.Role))) - i += copy(dAtA[i:], m.Role) + i = encodeVarintApi(dAtA, i, uint64(m.Weight)) } - if len(m.Type) > 0 { - dAtA[i] = 0x1a + return i, nil +} + +func (m *ThrottleDevice) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ThrottleDevice) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Path) > 0 { + dAtA[i] = 0xa i++ - i = encodeVarintApi(dAtA, i, uint64(len(m.Type))) - i += copy(dAtA[i:], m.Type) + i = encodeVarintApi(dAtA, i, uint64(len(m.Path))) + i += copy(dAtA[i:], m.Path) } - if len(m.Level) > 0 { - dAtA[i] = 0x22 + if m.Rate != 0 { + dAtA[i] = 0x10 i++ - i = encodeVarintApi(dAtA, i, uint64(len(m.Level))) - i += copy(dAtA[i:], m.Level) + i = encodeVarintApi(dAtA, i, uint64(m.Rate)) } return i, nil } -func (m *Capability) Marshal() (dAtA []byte, err error) { +func (m *Ulimit) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -6120,13 +6503,89 @@ func (m *Capability) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *Capability) MarshalTo(dAtA []byte) (int, error) { +func (m *Ulimit) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int _ = l - if len(m.AddCapabilities) > 0 { - for _, s := range m.AddCapabilities { + if len(m.Name) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + } + if m.Hard != 0 { + dAtA[i] = 0x10 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Hard)) + } + if m.Soft != 0 { + dAtA[i] = 0x18 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Soft)) + } + return i, nil +} + +func (m *SELinuxOption) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SELinuxOption) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.User) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.User))) + i += copy(dAtA[i:], m.User) + } + if len(m.Role) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.Role))) + i += copy(dAtA[i:], m.Role) + } + if len(m.Type) > 0 { + dAtA[i] = 0x1a + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.Type))) + i += copy(dAtA[i:], m.Type) + } + if len(m.Level) > 0 { + dAtA[i] = 0x22 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.Level))) + i += copy(dAtA[i:], m.Level) + } + return i, nil +} + +func (m *Capability) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Capability) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.AddCapabilities) > 0 { + for _, s := range m.AddCapabilities { dAtA[i] = 0xa i++ l = len(s) @@ -6177,11 +6636,11 @@ func (m *LinuxContainerSecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Capabilities.Size())) - n21, err := m.Capabilities.MarshalTo(dAtA[i:]) + n22, err := m.Capabilities.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n21 + i += n22 } if m.Privileged { dAtA[i] = 0x10 @@ -6197,31 +6656,31 @@ func (m *LinuxContainerSecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.NamespaceOptions.Size())) - n22, err := m.NamespaceOptions.MarshalTo(dAtA[i:]) + n23, err := m.NamespaceOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n22 + i += n23 } if m.SelinuxOptions != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.SelinuxOptions.Size())) - n23, err := m.SelinuxOptions.MarshalTo(dAtA[i:]) + n24, err := m.SelinuxOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n23 + i += n24 } if m.RunAsUser != nil { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.RunAsUser.Size())) - n24, err := m.RunAsUser.MarshalTo(dAtA[i:]) + n25, err := m.RunAsUser.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n24 + i += n25 } if len(m.RunAsUsername) > 0 { dAtA[i] = 0x32 @@ -6240,22 +6699,22 @@ func (m *LinuxContainerSecurityContext) MarshalTo(dAtA []byte) (int, error) { i++ } if len(m.SupplementalGroups) > 0 { - dAtA26 := make([]byte, len(m.SupplementalGroups)*10) - var j25 int + dAtA27 := make([]byte, len(m.SupplementalGroups)*10) + var j26 int for _, num1 := range m.SupplementalGroups { num := uint64(num1) for num >= 1<<7 { - dAtA26[j25] = uint8(uint64(num)&0x7f | 0x80) + dAtA27[j26] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j25++ + j26++ } - dAtA26[j25] = uint8(num) - j25++ + dAtA27[j26] = uint8(num) + j26++ } dAtA[i] = 0x42 i++ - i = encodeVarintApi(dAtA, i, uint64(j25)) - i += copy(dAtA[i:], dAtA26[:j25]) + i = encodeVarintApi(dAtA, i, uint64(j26)) + i += copy(dAtA[i:], dAtA27[:j26]) } if len(m.ApparmorProfile) > 0 { dAtA[i] = 0x4a @@ -6283,11 +6742,11 @@ func (m *LinuxContainerSecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x62 i++ i = encodeVarintApi(dAtA, i, uint64(m.RunAsGroup.Size())) - n27, err := m.RunAsGroup.MarshalTo(dAtA[i:]) + n28, err := m.RunAsGroup.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n27 + i += n28 } return i, nil } @@ -6311,21 +6770,21 @@ func (m *LinuxContainerConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Resources.Size())) - n28, err := m.Resources.MarshalTo(dAtA[i:]) + n29, err := m.Resources.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n28 + i += n29 } if m.SecurityContext != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.SecurityContext.Size())) - n29, err := m.SecurityContext.MarshalTo(dAtA[i:]) + n30, err := m.SecurityContext.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n29 + i += n30 } return i, nil } @@ -6349,11 +6808,11 @@ func (m *WindowsContainerConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Resources.Size())) - n30, err := m.Resources.MarshalTo(dAtA[i:]) + n31, err := m.Resources.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n30 + i += n31 } return i, nil } @@ -6480,21 +6939,21 @@ func (m *ContainerConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Metadata.Size())) - n31, err := m.Metadata.MarshalTo(dAtA[i:]) + n32, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n31 + i += n32 } if m.Image != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n32, err := m.Image.MarshalTo(dAtA[i:]) + n33, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n32 + i += n33 } if len(m.Command) > 0 { for _, s := range m.Command { @@ -6642,11 +7101,11 @@ func (m *ContainerConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x7a i++ i = encodeVarintApi(dAtA, i, uint64(m.Linux.Size())) - n33, err := m.Linux.MarshalTo(dAtA[i:]) + n34, err := m.Linux.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n33 + i += n34 } if m.Windows != nil { dAtA[i] = 0x82 @@ -6654,11 +7113,18 @@ func (m *ContainerConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintApi(dAtA, i, uint64(m.Windows.Size())) - n34, err := m.Windows.MarshalTo(dAtA[i:]) + n35, err := m.Windows.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n34 + i += n35 + } + if m.NetPriority != 0 { + dAtA[i] = 0xa0 + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.NetPriority)) } return i, nil } @@ -6688,21 +7154,21 @@ func (m *CreateContainerRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Config.Size())) - n35, err := m.Config.MarshalTo(dAtA[i:]) + n36, err := m.Config.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n35 + i += n36 } if m.SandboxConfig != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.SandboxConfig.Size())) - n36, err := m.SandboxConfig.MarshalTo(dAtA[i:]) + n37, err := m.SandboxConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n36 + i += n37 } return i, nil } @@ -6910,11 +7376,11 @@ func (m *ContainerFilter) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.State.Size())) - n37, err := m.State.MarshalTo(dAtA[i:]) + n38, err := m.State.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n37 + i += n38 } if len(m.PodSandboxId) > 0 { dAtA[i] = 0x1a @@ -6961,11 +7427,11 @@ func (m *ListContainersRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Filter.Size())) - n38, err := m.Filter.MarshalTo(dAtA[i:]) + n39, err := m.Filter.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n38 + i += n39 } return i, nil } @@ -7001,21 +7467,21 @@ func (m *Container) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.Metadata.Size())) - n39, err := m.Metadata.MarshalTo(dAtA[i:]) + n40, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n39 + i += n40 } if m.Image != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n40, err := m.Image.MarshalTo(dAtA[i:]) + n41, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n40 + i += n41 } if len(m.ImageRef) > 0 { dAtA[i] = 0x2a @@ -7159,11 +7625,11 @@ func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Metadata.Size())) - n41, err := m.Metadata.MarshalTo(dAtA[i:]) + n42, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n41 + i += n42 } if m.State != 0 { dAtA[i] = 0x18 @@ -7194,11 +7660,11 @@ func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x42 i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n42, err := m.Image.MarshalTo(dAtA[i:]) + n43, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n42 + i += n43 } if len(m.ImageRef) > 0 { dAtA[i] = 0x4a @@ -7270,6 +7736,66 @@ func (m *ContainerStatus) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintApi(dAtA, i, uint64(len(m.LogPath))) i += copy(dAtA[i:], m.LogPath) } + if len(m.Volumes) > 0 { + for k := range m.Volumes { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x6 + i++ + v := m.Volumes[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovApi(uint64(msgSize)) + } + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + msgSize + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(v.Size())) + n44, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n44 + } + } + } + if m.Resources != nil { + dAtA[i] = 0xaa + i++ + dAtA[i] = 0x6 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Resources.Size())) + n45, err := m.Resources.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n45 + } + return i, nil +} + +func (m *Volume) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Volume) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l return i, nil } @@ -7292,11 +7818,11 @@ func (m *ContainerStatusResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Status.Size())) - n43, err := m.Status.MarshalTo(dAtA[i:]) + n46, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n43 + i += n46 } if len(m.Info) > 0 { for k := range m.Info { @@ -7343,11 +7869,11 @@ func (m *UpdateContainerResourcesRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Linux.Size())) - n44, err := m.Linux.MarshalTo(dAtA[i:]) + n47, err := m.Linux.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n44 + i += n47 } return i, nil } @@ -7662,22 +8188,22 @@ func (m *PortForwardRequest) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], m.PodSandboxId) } if len(m.Port) > 0 { - dAtA46 := make([]byte, len(m.Port)*10) - var j45 int + dAtA49 := make([]byte, len(m.Port)*10) + var j48 int for _, num1 := range m.Port { num := uint64(num1) for num >= 1<<7 { - dAtA46[j45] = uint8(uint64(num)&0x7f | 0x80) + dAtA49[j48] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j45++ + j48++ } - dAtA46[j45] = uint8(num) - j45++ + dAtA49[j48] = uint8(num) + j48++ } dAtA[i] = 0x12 i++ - i = encodeVarintApi(dAtA, i, uint64(j45)) - i += copy(dAtA[i:], dAtA46[:j45]) + i = encodeVarintApi(dAtA, i, uint64(j48)) + i += copy(dAtA[i:], dAtA49[:j48]) } return i, nil } @@ -7725,11 +8251,11 @@ func (m *ImageFilter) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n47, err := m.Image.MarshalTo(dAtA[i:]) + n50, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n47 + i += n50 } return i, nil } @@ -7753,11 +8279,11 @@ func (m *ListImagesRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Filter.Size())) - n48, err := m.Filter.MarshalTo(dAtA[i:]) + n51, err := m.Filter.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n48 + i += n51 } return i, nil } @@ -7822,11 +8348,11 @@ func (m *Image) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintApi(dAtA, i, uint64(m.Uid.Size())) - n49, err := m.Uid.MarshalTo(dAtA[i:]) + n52, err := m.Uid.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n49 + i += n52 } if len(m.Username) > 0 { dAtA[i] = 0x32 @@ -7834,6 +8360,36 @@ func (m *Image) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintApi(dAtA, i, uint64(len(m.Username))) i += copy(dAtA[i:], m.Username) } + if len(m.Volumes) > 0 { + for k := range m.Volumes { + dAtA[i] = 0xa2 + i++ + dAtA[i] = 0x6 + i++ + v := m.Volumes[k] + msgSize := 0 + if v != nil { + msgSize = v.Size() + msgSize += 1 + sovApi(uint64(msgSize)) + } + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + msgSize + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + if v != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(v.Size())) + n53, err := v.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n53 + } + } + } return i, nil } @@ -7886,11 +8442,11 @@ func (m *ImageStatusRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n50, err := m.Image.MarshalTo(dAtA[i:]) + n54, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n50 + i += n54 } if m.Verbose { dAtA[i] = 0x10 @@ -7924,11 +8480,11 @@ func (m *ImageStatusResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n51, err := m.Image.MarshalTo(dAtA[i:]) + n55, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n51 + i += n55 } if len(m.Info) > 0 { for k := range m.Info { @@ -8023,31 +8579,31 @@ func (m *PullImageRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n52, err := m.Image.MarshalTo(dAtA[i:]) + n56, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n52 + i += n56 } if m.Auth != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Auth.Size())) - n53, err := m.Auth.MarshalTo(dAtA[i:]) + n57, err := m.Auth.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n53 + i += n57 } if m.SandboxConfig != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.SandboxConfig.Size())) - n54, err := m.SandboxConfig.MarshalTo(dAtA[i:]) + n58, err := m.SandboxConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n54 + i += n58 } return i, nil } @@ -8095,11 +8651,11 @@ func (m *RemoveImageRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Image.Size())) - n55, err := m.Image.MarshalTo(dAtA[i:]) + n59, err := m.Image.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n55 + i += n59 } return i, nil } @@ -8165,11 +8721,11 @@ func (m *RuntimeConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.NetworkConfig.Size())) - n56, err := m.NetworkConfig.MarshalTo(dAtA[i:]) + n60, err := m.NetworkConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n56 + i += n60 } return i, nil } @@ -8193,11 +8749,11 @@ func (m *UpdateRuntimeConfigRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.RuntimeConfig.Size())) - n57, err := m.RuntimeConfig.MarshalTo(dAtA[i:]) + n61, err := m.RuntimeConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n57 + i += n61 } return i, nil } @@ -8343,11 +8899,11 @@ func (m *StatusResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Status.Size())) - n58, err := m.Status.MarshalTo(dAtA[i:]) + n62, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n58 + i += n62 } if len(m.Info) > 0 { for k := range m.Info { @@ -8458,31 +9014,31 @@ func (m *FilesystemUsage) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.FsId.Size())) - n59, err := m.FsId.MarshalTo(dAtA[i:]) + n63, err := m.FsId.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n59 + i += n63 } if m.UsedBytes != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.UsedBytes.Size())) - n60, err := m.UsedBytes.MarshalTo(dAtA[i:]) + n64, err := m.UsedBytes.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n60 + i += n64 } if m.InodesUsed != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.InodesUsed.Size())) - n61, err := m.InodesUsed.MarshalTo(dAtA[i:]) + n65, err := m.InodesUsed.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n61 + i += n65 } return i, nil } @@ -8560,11 +9116,11 @@ func (m *ContainerStatsResponse) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Stats.Size())) - n62, err := m.Stats.MarshalTo(dAtA[i:]) + n66, err := m.Stats.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n62 + i += n66 } return i, nil } @@ -8588,11 +9144,11 @@ func (m *ListContainerStatsRequest) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Filter.Size())) - n63, err := m.Filter.MarshalTo(dAtA[i:]) + n67, err := m.Filter.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n63 + i += n67 } return i, nil } @@ -8699,11 +9255,11 @@ func (m *ContainerAttributes) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Metadata.Size())) - n64, err := m.Metadata.MarshalTo(dAtA[i:]) + n68, err := m.Metadata.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n64 + i += n68 } if len(m.Labels) > 0 { for k := range m.Labels { @@ -8761,41 +9317,41 @@ func (m *ContainerStats) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintApi(dAtA, i, uint64(m.Attributes.Size())) - n65, err := m.Attributes.MarshalTo(dAtA[i:]) + n69, err := m.Attributes.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n65 + i += n69 } if m.Cpu != nil { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.Cpu.Size())) - n66, err := m.Cpu.MarshalTo(dAtA[i:]) + n70, err := m.Cpu.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n66 + i += n70 } if m.Memory != nil { dAtA[i] = 0x1a i++ i = encodeVarintApi(dAtA, i, uint64(m.Memory.Size())) - n67, err := m.Memory.MarshalTo(dAtA[i:]) + n71, err := m.Memory.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n67 + i += n71 } if m.WritableLayer != nil { dAtA[i] = 0x22 i++ i = encodeVarintApi(dAtA, i, uint64(m.WritableLayer.Size())) - n68, err := m.WritableLayer.MarshalTo(dAtA[i:]) + n72, err := m.WritableLayer.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n68 + i += n72 } return i, nil } @@ -8824,11 +9380,11 @@ func (m *CpuUsage) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.UsageCoreNanoSeconds.Size())) - n69, err := m.UsageCoreNanoSeconds.MarshalTo(dAtA[i:]) + n73, err := m.UsageCoreNanoSeconds.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n69 + i += n73 } return i, nil } @@ -8857,11 +9413,11 @@ func (m *MemoryUsage) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintApi(dAtA, i, uint64(m.WorkingSetBytes.Size())) - n70, err := m.WorkingSetBytes.MarshalTo(dAtA[i:]) + n74, err := m.WorkingSetBytes.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n70 + i += n74 } return i, nil } @@ -9483,25 +10039,124 @@ func (m *LinuxContainerResources) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if len(m.DiskQuota) > 0 { + for k, v := range m.DiskQuota { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + n += mapEntrySize + 2 + sovApi(uint64(mapEntrySize)) + } + } + if m.BlkioWeight != 0 { + n += 2 + sovApi(uint64(m.BlkioWeight)) + } + if len(m.BlkioWeightDevice) > 0 { + for _, e := range m.BlkioWeightDevice { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } + if len(m.BlkioDeviceReadBps) > 0 { + for _, e := range m.BlkioDeviceReadBps { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } + if len(m.BlkioDeviceWriteBps) > 0 { + for _, e := range m.BlkioDeviceWriteBps { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } + if len(m.BlkioDeviceRead_IOps) > 0 { + for _, e := range m.BlkioDeviceRead_IOps { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } + if len(m.BlkioDeviceWrite_IOps) > 0 { + for _, e := range m.BlkioDeviceWrite_IOps { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } + if m.KernelMemory != 0 { + n += 2 + sovApi(uint64(m.KernelMemory)) + } + if m.MemoryReservation != 0 { + n += 2 + sovApi(uint64(m.MemoryReservation)) + } + if m.MemorySwappiness != nil { + l = m.MemorySwappiness.Size() + n += 2 + l + sovApi(uint64(l)) + } + if len(m.Ulimits) > 0 { + for _, e := range m.Ulimits { + l = e.Size() + n += 2 + l + sovApi(uint64(l)) + } + } return n } -func (m *SELinuxOption) Size() (n int) { +func (m *WeightDevice) Size() (n int) { var l int _ = l - l = len(m.User) + l = len(m.Path) if l > 0 { n += 1 + l + sovApi(uint64(l)) } - l = len(m.Role) - if l > 0 { - n += 1 + l + sovApi(uint64(l)) + if m.Weight != 0 { + n += 1 + sovApi(uint64(m.Weight)) } - l = len(m.Type) + return n +} + +func (m *ThrottleDevice) Size() (n int) { + var l int + _ = l + l = len(m.Path) if l > 0 { n += 1 + l + sovApi(uint64(l)) } - l = len(m.Level) + if m.Rate != 0 { + n += 1 + sovApi(uint64(m.Rate)) + } + return n +} + +func (m *Ulimit) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if m.Hard != 0 { + n += 1 + sovApi(uint64(m.Hard)) + } + if m.Soft != 0 { + n += 1 + sovApi(uint64(m.Soft)) + } + return n +} + +func (m *SELinuxOption) Size() (n int) { + var l int + _ = l + l = len(m.User) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.Role) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.Type) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.Level) if l > 0 { n += 1 + l + sovApi(uint64(l)) } @@ -9735,6 +10390,9 @@ func (m *ContainerConfig) Size() (n int) { l = m.Windows.Size() n += 2 + l + sovApi(uint64(l)) } + if m.NetPriority != 0 { + n += 2 + sovApi(uint64(m.NetPriority)) + } return n } @@ -10003,6 +10661,29 @@ func (m *ContainerStatus) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if len(m.Volumes) > 0 { + for k, v := range m.Volumes { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovApi(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + l + n += mapEntrySize + 2 + sovApi(uint64(mapEntrySize)) + } + } + if m.Resources != nil { + l = m.Resources.Size() + n += 2 + l + sovApi(uint64(l)) + } + return n +} + +func (m *Volume) Size() (n int) { + var l int + _ = l return n } @@ -10227,6 +10908,19 @@ func (m *Image) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if len(m.Volumes) > 0 { + for k, v := range m.Volumes { + _ = k + _ = v + l = 0 + if v != nil { + l = v.Size() + l += 1 + sovApi(uint64(l)) + } + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + l + n += mapEntrySize + 2 + sovApi(uint64(mapEntrySize)) + } + } return n } @@ -11114,6 +11808,16 @@ func (this *LinuxContainerResources) String() string { if this == nil { return "nil" } + keysForDiskQuota := make([]string, 0, len(this.DiskQuota)) + for k := range this.DiskQuota { + keysForDiskQuota = append(keysForDiskQuota, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDiskQuota) + mapStringForDiskQuota := "map[string]string{" + for _, k := range keysForDiskQuota { + mapStringForDiskQuota += fmt.Sprintf("%v: %v,", k, this.DiskQuota[k]) + } + mapStringForDiskQuota += "}" s := strings.Join([]string{`&LinuxContainerResources{`, `CpuPeriod:` + fmt.Sprintf("%v", this.CpuPeriod) + `,`, `CpuQuota:` + fmt.Sprintf("%v", this.CpuQuota) + `,`, @@ -11122,6 +11826,51 @@ func (this *LinuxContainerResources) String() string { `OomScoreAdj:` + fmt.Sprintf("%v", this.OomScoreAdj) + `,`, `CpusetCpus:` + fmt.Sprintf("%v", this.CpusetCpus) + `,`, `CpusetMems:` + fmt.Sprintf("%v", this.CpusetMems) + `,`, + `DiskQuota:` + mapStringForDiskQuota + `,`, + `BlkioWeight:` + fmt.Sprintf("%v", this.BlkioWeight) + `,`, + `BlkioWeightDevice:` + strings.Replace(fmt.Sprintf("%v", this.BlkioWeightDevice), "WeightDevice", "WeightDevice", 1) + `,`, + `BlkioDeviceReadBps:` + strings.Replace(fmt.Sprintf("%v", this.BlkioDeviceReadBps), "ThrottleDevice", "ThrottleDevice", 1) + `,`, + `BlkioDeviceWriteBps:` + strings.Replace(fmt.Sprintf("%v", this.BlkioDeviceWriteBps), "ThrottleDevice", "ThrottleDevice", 1) + `,`, + `BlkioDeviceRead_IOps:` + strings.Replace(fmt.Sprintf("%v", this.BlkioDeviceRead_IOps), "ThrottleDevice", "ThrottleDevice", 1) + `,`, + `BlkioDeviceWrite_IOps:` + strings.Replace(fmt.Sprintf("%v", this.BlkioDeviceWrite_IOps), "ThrottleDevice", "ThrottleDevice", 1) + `,`, + `KernelMemory:` + fmt.Sprintf("%v", this.KernelMemory) + `,`, + `MemoryReservation:` + fmt.Sprintf("%v", this.MemoryReservation) + `,`, + `MemorySwappiness:` + strings.Replace(fmt.Sprintf("%v", this.MemorySwappiness), "Int64Value", "Int64Value", 1) + `,`, + `Ulimits:` + strings.Replace(fmt.Sprintf("%v", this.Ulimits), "Ulimit", "Ulimit", 1) + `,`, + `}`, + }, "") + return s +} +func (this *WeightDevice) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WeightDevice{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, + `}`, + }, "") + return s +} +func (this *ThrottleDevice) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ThrottleDevice{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Rate:` + fmt.Sprintf("%v", this.Rate) + `,`, + `}`, + }, "") + return s +} +func (this *Ulimit) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Ulimit{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Hard:` + fmt.Sprintf("%v", this.Hard) + `,`, + `Soft:` + fmt.Sprintf("%v", this.Soft) + `,`, `}`, }, "") return s @@ -11269,6 +12018,7 @@ func (this *ContainerConfig) String() string { `Tty:` + fmt.Sprintf("%v", this.Tty) + `,`, `Linux:` + strings.Replace(fmt.Sprintf("%v", this.Linux), "LinuxContainerConfig", "LinuxContainerConfig", 1) + `,`, `Windows:` + strings.Replace(fmt.Sprintf("%v", this.Windows), "WindowsContainerConfig", "WindowsContainerConfig", 1) + `,`, + `NetPriority:` + fmt.Sprintf("%v", this.NetPriority) + `,`, `}`, }, "") return s @@ -11479,6 +12229,16 @@ func (this *ContainerStatus) String() string { mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) } mapStringForAnnotations += "}" + keysForVolumes := make([]string, 0, len(this.Volumes)) + for k := range this.Volumes { + keysForVolumes = append(keysForVolumes, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumes) + mapStringForVolumes := "map[string]*Volume{" + for _, k := range keysForVolumes { + mapStringForVolumes += fmt.Sprintf("%v: %v,", k, this.Volumes[k]) + } + mapStringForVolumes += "}" s := strings.Join([]string{`&ContainerStatus{`, `Id:` + fmt.Sprintf("%v", this.Id) + `,`, `Metadata:` + strings.Replace(fmt.Sprintf("%v", this.Metadata), "ContainerMetadata", "ContainerMetadata", 1) + `,`, @@ -11495,6 +12255,17 @@ func (this *ContainerStatus) String() string { `Annotations:` + mapStringForAnnotations + `,`, `Mounts:` + strings.Replace(fmt.Sprintf("%v", this.Mounts), "Mount", "Mount", 1) + `,`, `LogPath:` + fmt.Sprintf("%v", this.LogPath) + `,`, + `Volumes:` + mapStringForVolumes + `,`, + `Resources:` + strings.Replace(fmt.Sprintf("%v", this.Resources), "LinuxContainerResources", "LinuxContainerResources", 1) + `,`, + `}`, + }, "") + return s +} +func (this *Volume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Volume{`, `}`, }, "") return s @@ -11658,6 +12429,16 @@ func (this *Image) String() string { if this == nil { return "nil" } + keysForVolumes := make([]string, 0, len(this.Volumes)) + for k := range this.Volumes { + keysForVolumes = append(keysForVolumes, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumes) + mapStringForVolumes := "map[string]*Volume{" + for _, k := range keysForVolumes { + mapStringForVolumes += fmt.Sprintf("%v: %v,", k, this.Volumes[k]) + } + mapStringForVolumes += "}" s := strings.Join([]string{`&Image{`, `Id:` + fmt.Sprintf("%v", this.Id) + `,`, `RepoTags:` + fmt.Sprintf("%v", this.RepoTags) + `,`, @@ -11665,6 +12446,7 @@ func (this *Image) String() string { `Size_:` + fmt.Sprintf("%v", this.Size_) + `,`, `Uid:` + strings.Replace(fmt.Sprintf("%v", this.Uid), "Int64Value", "Int64Value", 1) + `,`, `Username:` + fmt.Sprintf("%v", this.Username) + `,`, + `Volumes:` + mapStringForVolumes + `,`, `}`, }, "") return s @@ -16720,61 +17502,11 @@ func (m *LinuxContainerResources) Unmarshal(dAtA []byte) error { } m.CpusetMems = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipApi(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthApi - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SELinuxOption) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SELinuxOption: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SELinuxOption: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 100: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field DiskQuota", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -16784,26 +17516,34 @@ func (m *SELinuxOption) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthApi } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.User = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } } - var stringLen uint64 + var stringLenmapkey uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -16813,26 +17553,76 @@ func (m *SELinuxOption) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLenmapkey |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { return ErrInvalidLengthApi } - postIndex := iNdEx + intStringLen - if postIndex > l { + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { return io.ErrUnexpectedEOF } - m.Role = string(dAtA[iNdEx:postIndex]) + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.DiskQuota == nil { + m.DiskQuota = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.DiskQuota[mapkey] = mapvalue + } else { + var mapvalue string + m.DiskQuota[mapkey] = mapvalue + } iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + case 101: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlkioWeight", wireType) } - var stringLen uint64 + m.BlkioWeight = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -16842,26 +17632,16 @@ func (m *SELinuxOption) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + m.BlkioWeight |= (uint32(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthApi - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Type = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 4: + case 102: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Level", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field BlkioWeightDevice", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -16871,21 +17651,728 @@ func (m *SELinuxOption) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthApi } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Level = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex + m.BlkioWeightDevice = append(m.BlkioWeightDevice, &WeightDevice{}) + if err := m.BlkioWeightDevice[len(m.BlkioWeightDevice)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 103: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlkioDeviceReadBps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlkioDeviceReadBps = append(m.BlkioDeviceReadBps, &ThrottleDevice{}) + if err := m.BlkioDeviceReadBps[len(m.BlkioDeviceReadBps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 104: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlkioDeviceWriteBps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlkioDeviceWriteBps = append(m.BlkioDeviceWriteBps, &ThrottleDevice{}) + if err := m.BlkioDeviceWriteBps[len(m.BlkioDeviceWriteBps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 105: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlkioDeviceRead_IOps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlkioDeviceRead_IOps = append(m.BlkioDeviceRead_IOps, &ThrottleDevice{}) + if err := m.BlkioDeviceRead_IOps[len(m.BlkioDeviceRead_IOps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 106: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlkioDeviceWrite_IOps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlkioDeviceWrite_IOps = append(m.BlkioDeviceWrite_IOps, &ThrottleDevice{}) + if err := m.BlkioDeviceWrite_IOps[len(m.BlkioDeviceWrite_IOps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 107: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field KernelMemory", wireType) + } + m.KernelMemory = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.KernelMemory |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 108: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MemoryReservation", wireType) + } + m.MemoryReservation = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MemoryReservation |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 109: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MemorySwappiness", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MemorySwappiness == nil { + m.MemorySwappiness = &Int64Value{} + } + if err := m.MemorySwappiness.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 110: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ulimits", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ulimits = append(m.Ulimits, &Ulimit{}) + if err := m.Ulimits[len(m.Ulimits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WeightDevice) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WeightDevice: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WeightDevice: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) + } + m.Weight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Weight |= (uint32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ThrottleDevice) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ThrottleDevice: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ThrottleDevice: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Rate", wireType) + } + m.Rate = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Rate |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Ulimit) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Ulimit: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Ulimit: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Hard", wireType) + } + m.Hard = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Hard |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Soft", wireType) + } + m.Soft = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Soft |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SELinuxOption) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SELinuxOption: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SELinuxOption: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Role = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Level", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Level = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -18661,6 +20148,25 @@ func (m *ContainerConfig) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 100: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NetPriority", wireType) + } + m.NetPriority = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NetPriority |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -20780,25 +22286,201 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { break } } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthApi + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Labels[mapkey] = mapvalue + } else { + var mapvalue string + m.Labels[mapkey] = mapvalue + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Annotations == nil { + m.Annotations = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Annotations[mapkey] = mapvalue + } else { + var mapvalue string + m.Annotations[mapkey] = mapvalue + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Mounts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Mounts = append(m.Mounts, &Mount{}) + if err := m.Mounts[len(m.Mounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LogPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Labels[mapkey] = mapvalue - } else { - var mapvalue string - m.Labels[mapkey] = mapvalue + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF } + m.LogPath = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 13: + case 100: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -20862,8 +22544,8 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { } mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) iNdEx = postStringIndexmapkey - if m.Annotations == nil { - m.Annotations = make(map[string]string) + if m.Volumes == nil { + m.Volumes = make(map[string]*Volume) } if iNdEx < postIndex { var valuekey uint64 @@ -20881,7 +22563,7 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { break } } - var stringLenmapvalue uint64 + var mapmsglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -20891,30 +22573,35 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLenmapvalue |= (uint64(b) & 0x7F) << shift + mapmsglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { + if mapmsglen < 0 { return ErrInvalidLengthApi } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue > l { + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthApi + } + if postmsgIndex > l { return io.ErrUnexpectedEOF } - mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - m.Annotations[mapkey] = mapvalue + mapvalue := &Volume{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + m.Volumes[mapkey] = mapvalue } else { - var mapvalue string - m.Annotations[mapkey] = mapvalue + var mapvalue *Volume + m.Volumes[mapkey] = mapvalue } iNdEx = postIndex - case 14: + case 101: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Mounts", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -20938,40 +22625,63 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Mounts = append(m.Mounts, &Mount{}) - if err := m.Mounts[len(m.Mounts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Resources == nil { + m.Resources = &LinuxContainerResources{} + } + if err := m.Resources.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 15: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LogPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err } - intStringLen := int(stringLen) - if intStringLen < 0 { + if skippy < 0 { return ErrInvalidLengthApi } - postIndex := iNdEx + intStringLen - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - m.LogPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Volume) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Volume: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Volume: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -22700,6 +24410,127 @@ func (m *Image) Unmarshal(dAtA []byte) error { } m.Username = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 100: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Volumes == nil { + m.Volumes = make(map[string]*Volume) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthApi + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthApi + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &Volume{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + m.Volumes[mapkey] = mapvalue + } else { + var mapvalue *Volume + m.Volumes[mapkey] = mapvalue + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -26455,294 +28286,319 @@ var ( func init() { proto.RegisterFile("api.proto", fileDescriptorApi) } var fileDescriptorApi = []byte{ - // 4623 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5c, 0xcd, 0x6f, 0x1b, 0x49, - 0x76, 0x17, 0x49, 0x7d, 0x90, 0x8f, 0xa2, 0x44, 0x95, 0x65, 0x8b, 0xa6, 0x6d, 0x8d, 0xd5, 0x1e, - 0x7f, 0xce, 0x58, 0x1e, 0x6b, 0x76, 0x3d, 0xb1, 0x3d, 0x6b, 0x9b, 0x96, 0x64, 0x9b, 0x59, 0x9b, - 0x52, 0x9a, 0xd2, 0x7c, 0xec, 0x2c, 0xd0, 0xdb, 0x62, 0x97, 0xa8, 0x5e, 0x93, 0x5d, 0x3d, 0xdd, - 0x4d, 0xdb, 0xca, 0x21, 0x58, 0x20, 0xc8, 0x1e, 0x02, 0x04, 0xc8, 0x79, 0x8f, 0x9b, 0x43, 0x0e, - 0xb9, 0x05, 0x08, 0x72, 0xc8, 0x29, 0xc1, 0x1e, 0xf6, 0x12, 0x20, 0xa7, 0x45, 0x3e, 0x2e, 0x99, - 0x09, 0x72, 0xc9, 0x21, 0xc8, 0x1f, 0x90, 0x43, 0x50, 0x5f, 0xfd, 0xdd, 0xfc, 0xd0, 0x78, 0x77, - 0x26, 0x27, 0x75, 0xbd, 0x7a, 0xef, 0xd5, 0xab, 0xaa, 0x57, 0xaf, 0x5e, 0xfd, 0xaa, 0x28, 0x28, - 0xe9, 0xb6, 0xb9, 0x6e, 0x3b, 0xc4, 0x23, 0xa8, 0xea, 0x0c, 0x2c, 0xcf, 0xec, 0xe3, 0xf5, 0x57, - 0xb7, 0xf5, 0x9e, 0x7d, 0xa4, 0x6f, 0xd4, 0x6f, 0x76, 0x4d, 0xef, 0x68, 0x70, 0xb0, 0xde, 0x21, - 0xfd, 0x5b, 0x5d, 0xd2, 0x25, 0xb7, 0x18, 0xe3, 0xc1, 0xe0, 0x90, 0x95, 0x58, 0x81, 0x7d, 0x71, - 0x05, 0xca, 0x0d, 0x58, 0xf8, 0x04, 0x3b, 0xae, 0x49, 0x2c, 0x15, 0x7f, 0x39, 0xc0, 0xae, 0x87, - 0x6a, 0x30, 0xf7, 0x8a, 0x53, 0x6a, 0xb9, 0x8b, 0xb9, 0x6b, 0x25, 0x55, 0x16, 0x95, 0xbf, 0xcc, - 0xc1, 0xa2, 0xcf, 0xec, 0xda, 0xc4, 0x72, 0x71, 0x36, 0x37, 0x5a, 0x83, 0x79, 0x61, 0x9c, 0x66, - 0xe9, 0x7d, 0x5c, 0xcb, 0xb3, 0xea, 0xb2, 0xa0, 0xb5, 0xf4, 0x3e, 0x46, 0x57, 0x61, 0x51, 0xb2, - 0x48, 0x25, 0x05, 0xc6, 0xb5, 0x20, 0xc8, 0xa2, 0x35, 0xb4, 0x0e, 0xa7, 0x24, 0xa3, 0x6e, 0x9b, - 0x3e, 0xf3, 0x34, 0x63, 0x5e, 0x12, 0x55, 0x0d, 0xdb, 0x14, 0xfc, 0xca, 0x17, 0x50, 0xda, 0x6a, - 0xb5, 0x37, 0x89, 0x75, 0x68, 0x76, 0xa9, 0x89, 0x2e, 0x76, 0xa8, 0x4c, 0x2d, 0x77, 0xb1, 0x40, - 0x4d, 0x14, 0x45, 0x54, 0x87, 0xa2, 0x8b, 0x75, 0xa7, 0x73, 0x84, 0xdd, 0x5a, 0x9e, 0x55, 0xf9, - 0x65, 0x2a, 0x45, 0x6c, 0xcf, 0x24, 0x96, 0x5b, 0x2b, 0x70, 0x29, 0x51, 0x54, 0x7e, 0x99, 0x83, - 0xf2, 0x2e, 0x71, 0xbc, 0x17, 0xba, 0x6d, 0x9b, 0x56, 0x17, 0xdd, 0x81, 0x22, 0x1b, 0xcb, 0x0e, - 0xe9, 0xb1, 0x31, 0x58, 0xd8, 0xa8, 0xaf, 0xc7, 0xa7, 0x65, 0x7d, 0x57, 0x70, 0xa8, 0x3e, 0x2f, - 0xba, 0x0c, 0x0b, 0x1d, 0x62, 0x79, 0xba, 0x69, 0x61, 0x47, 0xb3, 0x89, 0xe3, 0xb1, 0x21, 0x9a, - 0x51, 0x2b, 0x3e, 0x95, 0xb6, 0x82, 0xce, 0x41, 0xe9, 0x88, 0xb8, 0x1e, 0xe7, 0x28, 0x30, 0x8e, - 0x22, 0x25, 0xb0, 0xca, 0x15, 0x98, 0x63, 0x95, 0xa6, 0x2d, 0x06, 0x63, 0x96, 0x16, 0x9b, 0xb6, - 0xf2, 0x9b, 0x1c, 0xcc, 0xbc, 0x20, 0x03, 0xcb, 0x8b, 0x35, 0xa3, 0x7b, 0x47, 0x62, 0xa2, 0x42, - 0xcd, 0xe8, 0xde, 0x51, 0xd0, 0x0c, 0xe5, 0xe0, 0x73, 0xc5, 0x9b, 0xa1, 0x95, 0x75, 0x28, 0x3a, - 0x58, 0x37, 0x88, 0xd5, 0x3b, 0x66, 0x26, 0x14, 0x55, 0xbf, 0x4c, 0x27, 0xd1, 0xc5, 0x3d, 0xd3, - 0x1a, 0xbc, 0xd1, 0x1c, 0xdc, 0xd3, 0x0f, 0x70, 0x8f, 0x99, 0x52, 0x54, 0x17, 0x04, 0x59, 0xe5, - 0x54, 0xb4, 0x05, 0x65, 0xdb, 0x21, 0xb6, 0xde, 0xd5, 0xe9, 0x38, 0xd6, 0x66, 0xd8, 0x50, 0x29, - 0xc9, 0xa1, 0x62, 0x66, 0xef, 0x06, 0x9c, 0x6a, 0x58, 0x4c, 0xf9, 0xeb, 0x1c, 0x2c, 0x52, 0xe7, - 0x71, 0x6d, 0xbd, 0x83, 0x77, 0xd8, 0x94, 0xa0, 0xbb, 0x30, 0x67, 0x61, 0xef, 0x35, 0x71, 0x5e, - 0x8a, 0x09, 0x78, 0x27, 0xa9, 0xd5, 0x97, 0x79, 0x41, 0x0c, 0xac, 0x4a, 0x7e, 0x74, 0x1b, 0x0a, - 0xb6, 0x69, 0xb0, 0x0e, 0x8f, 0x21, 0x46, 0x79, 0xa9, 0x88, 0x69, 0x77, 0xd8, 0x38, 0x8c, 0x23, - 0x62, 0xda, 0x1d, 0x45, 0x01, 0x68, 0x5a, 0xde, 0x9d, 0xef, 0x7d, 0xa2, 0xf7, 0x06, 0x18, 0x2d, - 0xc3, 0xcc, 0x2b, 0xfa, 0xc1, 0x8c, 0x2d, 0xa8, 0xbc, 0xa0, 0x7c, 0x55, 0x80, 0x73, 0xcf, 0xe9, - 0x78, 0xb5, 0x75, 0xcb, 0x38, 0x20, 0x6f, 0xda, 0xb8, 0x33, 0x70, 0x4c, 0xef, 0x78, 0x93, 0x58, - 0x1e, 0x7e, 0xe3, 0xa1, 0x16, 0x2c, 0x59, 0x52, 0xb3, 0x26, 0x5d, 0x93, 0x6a, 0x28, 0x6f, 0xac, - 0x0d, 0x31, 0x82, 0x0f, 0x91, 0x5a, 0xb5, 0xa2, 0x04, 0x17, 0x3d, 0x0b, 0xe6, 0x4d, 0x6a, 0xcb, - 0x33, 0x6d, 0x29, 0x5d, 0x6a, 0x6f, 0x33, 0xcb, 0x84, 0x2e, 0x39, 0xb1, 0x52, 0xd3, 0xc7, 0x40, - 0x57, 0xb5, 0xa6, 0xbb, 0xda, 0xc0, 0xc5, 0x0e, 0x1b, 0x98, 0xf2, 0xc6, 0xf9, 0xa4, 0x96, 0x60, - 0x08, 0xd4, 0x92, 0x33, 0xb0, 0x1a, 0xee, 0xbe, 0x8b, 0x1d, 0x16, 0x04, 0x84, 0x2f, 0x69, 0x0e, - 0x21, 0xde, 0xa1, 0x2b, 0xfd, 0x47, 0x92, 0x55, 0x46, 0x45, 0xb7, 0xe0, 0x94, 0x3b, 0xb0, 0xed, - 0x1e, 0xee, 0x63, 0xcb, 0xd3, 0x7b, 0x5a, 0xd7, 0x21, 0x03, 0xdb, 0xad, 0xcd, 0x5c, 0x2c, 0x5c, - 0x2b, 0xa8, 0x28, 0x5c, 0xf5, 0x94, 0xd5, 0xa0, 0x55, 0x00, 0xdb, 0x31, 0x5f, 0x99, 0x3d, 0xdc, - 0xc5, 0x46, 0x6d, 0x96, 0x29, 0x0d, 0x51, 0xd0, 0x07, 0xb0, 0xec, 0xe2, 0x4e, 0x87, 0xf4, 0x6d, - 0xcd, 0x76, 0xc8, 0xa1, 0xd9, 0xc3, 0xdc, 0xfb, 0xe7, 0x98, 0xf7, 0x23, 0x51, 0xb7, 0xcb, 0xab, - 0xd8, 0x3a, 0x78, 0xc0, 0x62, 0x1a, 0xed, 0x29, 0x6b, 0xbc, 0x56, 0x1c, 0xa3, 0xab, 0xc0, 0xba, - 0xca, 0x4c, 0x52, 0x7e, 0x99, 0x87, 0xd3, 0x6c, 0x24, 0x77, 0x89, 0x21, 0xa6, 0x59, 0x04, 0xa9, - 0x4b, 0x50, 0xe9, 0x30, 0x9d, 0x9a, 0xad, 0x3b, 0xd8, 0xf2, 0xc4, 0x22, 0x9d, 0xe7, 0xc4, 0x5d, - 0x46, 0x43, 0x9f, 0x41, 0xd5, 0x15, 0x5e, 0xa1, 0x75, 0xb8, 0x5b, 0x88, 0x39, 0xbb, 0x99, 0x34, - 0x61, 0x88, 0x2f, 0xa9, 0x8b, 0x6e, 0xc2, 0xb9, 0xe6, 0xdc, 0x63, 0xb7, 0xe3, 0xf5, 0x78, 0xb4, - 0x2b, 0x6f, 0x7c, 0x2f, 0x43, 0x61, 0xdc, 0xf0, 0xf5, 0x36, 0x17, 0xdb, 0xb6, 0x3c, 0xe7, 0x58, - 0x95, 0x4a, 0xea, 0xf7, 0x60, 0x3e, 0x5c, 0x81, 0xaa, 0x50, 0x78, 0x89, 0x8f, 0x45, 0xa7, 0xe8, - 0x67, 0xb0, 0x08, 0x78, 0xac, 0xe1, 0x85, 0x7b, 0xf9, 0xdf, 0xcb, 0x29, 0x0e, 0xa0, 0xa0, 0x95, - 0x17, 0xd8, 0xd3, 0x0d, 0xdd, 0xd3, 0x11, 0x82, 0x69, 0xb6, 0x8d, 0x70, 0x15, 0xec, 0x9b, 0x6a, - 0x1d, 0x88, 0xc5, 0x5b, 0x52, 0xe9, 0x27, 0x3a, 0x0f, 0x25, 0xdf, 0xd1, 0xc5, 0x5e, 0x12, 0x10, - 0x68, 0x4c, 0xd7, 0x3d, 0x0f, 0xf7, 0x6d, 0x8f, 0xb9, 0x58, 0x45, 0x95, 0x45, 0xe5, 0xbf, 0xa7, - 0xa1, 0x9a, 0x98, 0x93, 0x47, 0x50, 0xec, 0x8b, 0xe6, 0xc5, 0x42, 0x7b, 0x37, 0x25, 0xb0, 0x27, - 0x4c, 0x55, 0x7d, 0x29, 0x1a, 0x37, 0x69, 0x0c, 0x0d, 0xed, 0x7f, 0x7e, 0x99, 0xce, 0x78, 0x8f, - 0x74, 0x35, 0xc3, 0x74, 0x70, 0xc7, 0x23, 0xce, 0xb1, 0x30, 0x77, 0xbe, 0x47, 0xba, 0x5b, 0x92, - 0x86, 0xee, 0x01, 0x18, 0x96, 0x4b, 0x27, 0xfb, 0xd0, 0xec, 0x32, 0xa3, 0xcb, 0x1b, 0xe7, 0x92, - 0x46, 0xf8, 0x9b, 0x9d, 0x5a, 0x32, 0x2c, 0x57, 0x98, 0xff, 0x18, 0x2a, 0x74, 0xcf, 0xd0, 0xfa, - 0x7c, 0x9f, 0xe2, 0x2b, 0xa5, 0xbc, 0x71, 0x21, 0xad, 0x0f, 0xfe, 0x6e, 0xa6, 0xce, 0xdb, 0x41, - 0xc1, 0x45, 0x4f, 0x60, 0x96, 0x05, 0x6f, 0xb7, 0x36, 0xcb, 0x84, 0xd7, 0x87, 0x0d, 0x80, 0xf0, - 0x88, 0xe7, 0x4c, 0x80, 0x3b, 0x84, 0x90, 0x46, 0xfb, 0x50, 0xd6, 0x2d, 0x8b, 0x78, 0x3a, 0x0f, - 0x34, 0x73, 0x4c, 0xd9, 0x87, 0x63, 0x28, 0x6b, 0x04, 0x52, 0x5c, 0x63, 0x58, 0x0f, 0xfa, 0x01, - 0xcc, 0xb0, 0x48, 0x24, 0x16, 0xe2, 0xd5, 0x31, 0x9d, 0x56, 0xe5, 0x52, 0xf5, 0xbb, 0x50, 0x0e, - 0x19, 0x3b, 0x89, 0x93, 0xd6, 0x1f, 0x40, 0x35, 0x6e, 0xda, 0x44, 0x4e, 0xae, 0xc2, 0xb2, 0x3a, - 0xb0, 0x02, 0xc3, 0x64, 0xf6, 0x75, 0x0f, 0x66, 0xc5, 0x64, 0x73, 0x8f, 0x53, 0x46, 0x8f, 0x91, - 0x2a, 0x24, 0x94, 0x1f, 0xc0, 0xe9, 0x98, 0x4e, 0x91, 0xa4, 0xbd, 0x0b, 0x0b, 0x36, 0x31, 0x34, - 0x97, 0x93, 0x35, 0xd3, 0x90, 0xd1, 0xc5, 0xf6, 0x79, 0x9b, 0x06, 0x15, 0x6f, 0x7b, 0xc4, 0x4e, - 0xda, 0x34, 0x9e, 0x78, 0x0d, 0xce, 0xc4, 0xc5, 0x79, 0xf3, 0xca, 0x43, 0x58, 0x51, 0x71, 0x9f, - 0xbc, 0xc2, 0x27, 0x55, 0x5d, 0x87, 0x5a, 0x52, 0x81, 0x50, 0xfe, 0x39, 0xac, 0x04, 0xd4, 0xb6, - 0xa7, 0x7b, 0x03, 0x77, 0x22, 0xe5, 0x22, 0x83, 0x3d, 0x20, 0x2e, 0x9f, 0xa5, 0xa2, 0x2a, 0x8b, - 0xca, 0xf5, 0xb0, 0xea, 0x16, 0x4f, 0x18, 0x78, 0x0b, 0x68, 0x01, 0xf2, 0xa6, 0x2d, 0xd4, 0xe5, - 0x4d, 0x5b, 0x79, 0x06, 0x25, 0x7f, 0xc7, 0x45, 0xf7, 0x83, 0xd4, 0x31, 0x3f, 0xee, 0xfe, 0xec, - 0x67, 0x97, 0x7b, 0x89, 0x1d, 0x42, 0x34, 0x79, 0x1f, 0xc0, 0x8f, 0x64, 0x72, 0xe3, 0x3f, 0x37, - 0x44, 0xb1, 0x1a, 0x62, 0x57, 0xfe, 0x35, 0x12, 0xdf, 0x42, 0x9d, 0x30, 0xfc, 0x4e, 0x18, 0x91, - 0x78, 0x97, 0x3f, 0x51, 0xbc, 0xfb, 0x08, 0x66, 0x5c, 0x4f, 0xf7, 0xb0, 0x48, 0x8e, 0xd6, 0x86, - 0x89, 0x53, 0x23, 0xb0, 0xca, 0xf9, 0xd1, 0x05, 0x80, 0x8e, 0x83, 0x75, 0x0f, 0x1b, 0x9a, 0xce, - 0x83, 0x73, 0x41, 0x2d, 0x09, 0x4a, 0xc3, 0x43, 0x9b, 0x41, 0x82, 0x37, 0xc3, 0x0c, 0xbb, 0x3e, - 0x4c, 0x73, 0x64, 0xaa, 0x82, 0x54, 0xcf, 0x0f, 0x16, 0xb3, 0x63, 0x06, 0x0b, 0xa1, 0x80, 0x4b, - 0x85, 0x42, 0xe1, 0xdc, 0xe8, 0x50, 0xc8, 0x45, 0xc7, 0x09, 0x85, 0xc5, 0xd1, 0xa1, 0x50, 0x28, - 0x1b, 0x1a, 0x0a, 0xbf, 0xcd, 0x58, 0xf6, 0x2f, 0x39, 0xa8, 0x25, 0xd7, 0xa0, 0x88, 0x3d, 0xf7, - 0x60, 0xd6, 0x65, 0x94, 0x71, 0x02, 0x9a, 0x90, 0x15, 0x12, 0xe8, 0x19, 0x4c, 0x9b, 0xd6, 0x21, - 0x61, 0x67, 0xb3, 0xd4, 0x94, 0x24, 0xab, 0xd5, 0xf5, 0xa6, 0x75, 0x48, 0xf8, 0x20, 0x31, 0x0d, - 0xf5, 0x8f, 0xa0, 0xe4, 0x93, 0x26, 0xea, 0xdb, 0x0e, 0x2c, 0xc7, 0x5c, 0x96, 0xe7, 0xf0, 0xbe, - 0xa7, 0xe7, 0x26, 0xf3, 0x74, 0xe5, 0x67, 0xf9, 0xf0, 0x4a, 0x7c, 0x62, 0xf6, 0x3c, 0xec, 0x24, - 0x56, 0xe2, 0xc7, 0x52, 0x3b, 0x5f, 0x86, 0x57, 0x46, 0x6a, 0xe7, 0xa9, 0xa6, 0x58, 0x4c, 0x3f, - 0x86, 0x05, 0xe6, 0x6b, 0x9a, 0x8b, 0x7b, 0x2c, 0x8f, 0x10, 0x39, 0xdd, 0xf7, 0x87, 0xa9, 0xe1, - 0x96, 0x70, 0x8f, 0x6d, 0x0b, 0x39, 0x3e, 0x82, 0x95, 0x5e, 0x98, 0x56, 0x7f, 0x04, 0x28, 0xc9, - 0x34, 0xd1, 0x98, 0xb6, 0x69, 0x88, 0xa3, 0x07, 0xd8, 0x94, 0xcd, 0xef, 0x90, 0x99, 0x31, 0x8e, - 0xaf, 0x70, 0x83, 0x55, 0x21, 0xa1, 0xfc, 0xaa, 0x00, 0x10, 0x54, 0xfe, 0x3f, 0x8a, 0x6d, 0x8f, - 0xfc, 0xb8, 0xc2, 0xf3, 0xb3, 0x6b, 0xc3, 0x14, 0xa7, 0x46, 0x94, 0x9d, 0x68, 0x44, 0xe1, 0x99, - 0xda, 0xcd, 0xa1, 0x6a, 0xbe, 0xb3, 0xb1, 0xe4, 0x39, 0x9c, 0x89, 0xfb, 0x86, 0x08, 0x24, 0x1b, - 0x30, 0x63, 0x7a, 0xb8, 0xcf, 0x41, 0x9c, 0xd4, 0x43, 0x57, 0x48, 0x88, 0xb3, 0x2a, 0x6b, 0x50, - 0x6a, 0xf6, 0xf5, 0x2e, 0x6e, 0xdb, 0xb8, 0x43, 0x1b, 0x35, 0x69, 0x41, 0x18, 0xc2, 0x0b, 0xca, - 0x06, 0x14, 0x7f, 0x88, 0x8f, 0xf9, 0xa2, 0x1e, 0xd3, 0x50, 0xe5, 0xcf, 0xf2, 0xb0, 0xc2, 0xf6, - 0x8a, 0x4d, 0x09, 0xa1, 0xa8, 0xd8, 0x25, 0x03, 0xa7, 0x83, 0x5d, 0x36, 0xdb, 0xf6, 0x40, 0xb3, - 0xb1, 0x63, 0x12, 0x43, 0x9c, 0xf0, 0x4b, 0x1d, 0x7b, 0xb0, 0xcb, 0x08, 0xe8, 0x1c, 0xd0, 0x82, - 0xf6, 0xe5, 0x80, 0x08, 0x47, 0x2c, 0xa8, 0xc5, 0x8e, 0x3d, 0xf8, 0x03, 0x5a, 0x96, 0xb2, 0xee, - 0x91, 0xee, 0x60, 0x97, 0xf9, 0x19, 0x97, 0x6d, 0x33, 0x02, 0xba, 0x0d, 0xa7, 0xfb, 0xb8, 0x4f, - 0x9c, 0x63, 0xad, 0x67, 0xf6, 0x4d, 0x4f, 0x33, 0x2d, 0xed, 0xe0, 0xd8, 0xc3, 0xae, 0xf0, 0x29, - 0xc4, 0x2b, 0x9f, 0xd3, 0xba, 0xa6, 0xf5, 0x98, 0xd6, 0x20, 0x05, 0x2a, 0x84, 0xf4, 0x35, 0xb7, - 0x43, 0x1c, 0xac, 0xe9, 0xc6, 0x4f, 0xd9, 0xf6, 0x59, 0x50, 0xcb, 0x84, 0xf4, 0xdb, 0x94, 0xd6, - 0x30, 0x7e, 0x8a, 0xde, 0x81, 0x72, 0xc7, 0x1e, 0xb8, 0xd8, 0xd3, 0xe8, 0x1f, 0xb6, 0x3b, 0x96, - 0x54, 0xe0, 0xa4, 0x4d, 0x7b, 0xe0, 0x86, 0x18, 0xfa, 0x74, 0xfc, 0xe7, 0xc2, 0x0c, 0x2f, 0xe8, - 0x30, 0xeb, 0x50, 0x89, 0x20, 0x04, 0xf4, 0xb0, 0xc6, 0xa0, 0x00, 0x71, 0x58, 0xa3, 0xdf, 0x94, - 0xe6, 0x90, 0x9e, 0x1c, 0x49, 0xf6, 0x4d, 0x69, 0xde, 0xb1, 0x2d, 0x4f, 0x6a, 0xec, 0x9b, 0x0e, - 0x79, 0x0f, 0xbf, 0x12, 0x28, 0x52, 0x49, 0xe5, 0x05, 0xc5, 0x00, 0xd8, 0xd4, 0x6d, 0xfd, 0xc0, - 0xec, 0x99, 0xde, 0x31, 0xba, 0x0e, 0x55, 0xdd, 0x30, 0xb4, 0x8e, 0xa4, 0x98, 0x58, 0x62, 0x7b, - 0x8b, 0xba, 0x61, 0x6c, 0x86, 0xc8, 0xe8, 0x3d, 0x58, 0x32, 0x1c, 0x62, 0x47, 0x79, 0x39, 0xd8, - 0x57, 0xa5, 0x15, 0x61, 0x66, 0xe5, 0x17, 0x33, 0x70, 0x21, 0x3a, 0xb1, 0x71, 0x14, 0xe6, 0x11, - 0xcc, 0xc7, 0x5a, 0xcd, 0x40, 0x00, 0x02, 0x6b, 0xd5, 0x88, 0x44, 0x0c, 0x95, 0xc8, 0x27, 0x50, - 0x89, 0x54, 0x9c, 0xa7, 0xf0, 0x56, 0x71, 0x9e, 0xe9, 0xb7, 0x82, 0xf3, 0xcc, 0x4c, 0x86, 0xf3, - 0x5c, 0x61, 0x60, 0xaf, 0x94, 0x66, 0x47, 0x62, 0xee, 0x6a, 0x15, 0x9f, 0xc7, 0x92, 0xa0, 0x70, - 0x0c, 0x0f, 0x9a, 0x9b, 0x04, 0x0f, 0x2a, 0x66, 0xe2, 0x41, 0xd4, 0x6b, 0x6c, 0x5b, 0x77, 0xfa, - 0xc4, 0x91, 0x80, 0x4f, 0xad, 0xc4, 0x4c, 0x58, 0x94, 0x74, 0x01, 0xf6, 0x64, 0x42, 0x43, 0x90, - 0x09, 0x0d, 0x5d, 0x84, 0x79, 0x8b, 0x68, 0x16, 0x7e, 0xad, 0xd1, 0xb9, 0x74, 0x6b, 0x65, 0x3e, - 0xb1, 0x16, 0x69, 0xe1, 0xd7, 0xbb, 0x94, 0x92, 0x00, 0x8f, 0xe6, 0x27, 0x04, 0x8f, 0xfe, 0x2e, - 0x07, 0xcb, 0x51, 0xe7, 0x14, 0x07, 0xfd, 0xa7, 0x50, 0x72, 0x64, 0xfc, 0x11, 0x0e, 0x79, 0x3d, - 0x23, 0xb9, 0x4d, 0x06, 0x2c, 0x35, 0x90, 0x45, 0x3f, 0xca, 0xc4, 0x97, 0x6e, 0x8d, 0xd2, 0x37, - 0x0a, 0x61, 0x52, 0x3a, 0x70, 0xe6, 0x53, 0xd3, 0x32, 0xc8, 0x6b, 0x37, 0x6e, 0x7e, 0x33, 0x69, - 0xfe, 0x7b, 0xc9, 0xe6, 0xe2, 0xc2, 0x69, 0x1d, 0x50, 0xfe, 0x2a, 0x07, 0x67, 0x33, 0x19, 0x63, - 0xe1, 0x35, 0x17, 0x0f, 0xaf, 0x22, 0x34, 0x77, 0xc8, 0xc0, 0xf2, 0x42, 0xa1, 0x79, 0x93, 0xa1, - 0xe8, 0x3c, 0x06, 0x6a, 0x7d, 0xfd, 0x8d, 0xd9, 0x1f, 0xf4, 0x45, 0x6c, 0xa6, 0xea, 0x5e, 0x70, - 0xca, 0x09, 0x82, 0xb3, 0xd2, 0x80, 0x25, 0xdf, 0xca, 0xa1, 0x38, 0x57, 0x08, 0xb7, 0xca, 0x47, - 0x71, 0x2b, 0x0b, 0x66, 0xb7, 0xf0, 0x2b, 0xb3, 0x83, 0xdf, 0x0a, 0xcc, 0x7f, 0x11, 0xca, 0x36, - 0x76, 0xfa, 0xa6, 0xeb, 0xfa, 0x41, 0xa7, 0xa4, 0x86, 0x49, 0xca, 0x7f, 0xce, 0xc2, 0x62, 0x7c, - 0xfe, 0x1e, 0x26, 0x60, 0xb2, 0x4b, 0x29, 0xe1, 0x30, 0xde, 0xd1, 0x50, 0x66, 0x75, 0x5b, 0x6e, - 0xcc, 0xf9, 0xac, 0x43, 0xad, 0xbf, 0x89, 0x8b, 0x5d, 0x9b, 0x8e, 0x48, 0x87, 0xf4, 0xfb, 0xba, - 0x65, 0xc8, 0xdb, 0x19, 0x51, 0xa4, 0xe3, 0xa7, 0x3b, 0x5d, 0x3a, 0xec, 0x94, 0xcc, 0xbe, 0xe9, - 0xe4, 0xd1, 0x13, 0xa0, 0x69, 0x31, 0xb8, 0x8d, 0x05, 0xae, 0x92, 0x0a, 0x82, 0xb4, 0x65, 0x3a, - 0x68, 0x1d, 0xa6, 0xb1, 0xf5, 0x4a, 0xa6, 0x4e, 0x29, 0xd7, 0x37, 0x32, 0x45, 0x50, 0x19, 0x1f, - 0xba, 0x05, 0xb3, 0x7d, 0xea, 0x16, 0xf2, 0x2c, 0xb8, 0x92, 0x71, 0x8b, 0xa1, 0x0a, 0x36, 0xb4, - 0x01, 0x73, 0x06, 0x9b, 0x27, 0x79, 0xe0, 0xab, 0xa5, 0x80, 0x78, 0x8c, 0x41, 0x95, 0x8c, 0x68, - 0xdb, 0x4f, 0x0c, 0x4b, 0x59, 0x19, 0x5d, 0x6c, 0x2a, 0x52, 0xb3, 0xc3, 0xbd, 0x68, 0x76, 0x08, - 0x4c, 0xd7, 0xc6, 0x68, 0x5d, 0xc3, 0x91, 0xb7, 0xb3, 0x50, 0xec, 0x91, 0x2e, 0x77, 0xa3, 0x32, - 0xbf, 0xf8, 0xeb, 0x91, 0x2e, 0xf3, 0xa2, 0x65, 0x9a, 0x28, 0x1b, 0xa6, 0xc5, 0x02, 0x5c, 0x51, - 0xe5, 0x05, 0xba, 0xf8, 0xd8, 0x87, 0x46, 0xac, 0x0e, 0xae, 0x55, 0x58, 0x55, 0x89, 0x51, 0x76, - 0xac, 0x0e, 0x4b, 0xbd, 0x3c, 0xef, 0xb8, 0xb6, 0xc0, 0xe8, 0xf4, 0x93, 0x9e, 0x81, 0xf8, 0x71, - 0x7d, 0x31, 0xeb, 0x0c, 0x94, 0x16, 0x0c, 0xe5, 0x69, 0xfd, 0x31, 0xcc, 0xbd, 0xe6, 0x81, 0xa0, - 0x56, 0x65, 0xf2, 0xd7, 0x46, 0x87, 0x14, 0xa1, 0x41, 0x0a, 0x7e, 0x9b, 0x69, 0xf0, 0xaf, 0x72, - 0x70, 0x66, 0x93, 0x1d, 0x11, 0x42, 0x71, 0x6c, 0x12, 0x54, 0xeb, 0xae, 0x8f, 0x23, 0x66, 0x42, - 0x50, 0xf1, 0x7e, 0x0b, 0x01, 0xd4, 0x84, 0x05, 0xa9, 0x5c, 0xa8, 0x28, 0x8c, 0x0d, 0x45, 0x56, - 0xdc, 0x70, 0x51, 0xf9, 0x18, 0x56, 0x12, 0xbd, 0x10, 0xe9, 0xfc, 0x1a, 0xcc, 0x07, 0xf1, 0xca, - 0xef, 0x44, 0xd9, 0xa7, 0x35, 0x0d, 0xe5, 0x1e, 0x9c, 0x6e, 0x7b, 0xba, 0xe3, 0x25, 0x86, 0x60, - 0x0c, 0x59, 0x86, 0x46, 0x46, 0x65, 0x05, 0x60, 0xd8, 0x86, 0xe5, 0xb6, 0x47, 0xec, 0x13, 0x28, - 0xa5, 0x51, 0x87, 0xf6, 0x9f, 0x0c, 0xe4, 0xfe, 0x20, 0x8b, 0xca, 0x0a, 0xc7, 0x4e, 0x93, 0xad, - 0xdd, 0x87, 0x33, 0x1c, 0xba, 0x3c, 0x49, 0x27, 0xce, 0x4a, 0xe0, 0x34, 0xa9, 0xf7, 0x05, 0x9c, - 0x0a, 0xf6, 0xde, 0x00, 0x96, 0xb8, 0x13, 0x85, 0x25, 0x2e, 0x0e, 0x99, 0xf5, 0x08, 0x2a, 0xf1, - 0x17, 0xf9, 0x50, 0x5c, 0xcf, 0x00, 0x25, 0xee, 0x47, 0x41, 0x89, 0xcb, 0xa3, 0x74, 0x47, 0x30, - 0x89, 0xa4, 0xd7, 0x16, 0x52, 0xbc, 0xf6, 0x8b, 0x04, 0x72, 0x31, 0x9d, 0x05, 0xfd, 0xc4, 0xac, - 0xfd, 0x9d, 0x00, 0x17, 0x2a, 0x07, 0x2e, 0xfc, 0xa6, 0x7d, 0xa4, 0xf9, 0x6e, 0x0c, 0xb8, 0x58, - 0x1b, 0x69, 0xaf, 0x8f, 0x5b, 0xfc, 0xcd, 0x34, 0x94, 0xfc, 0xba, 0xc4, 0x98, 0x27, 0x87, 0x2d, - 0x9f, 0x32, 0x6c, 0xe1, 0x1d, 0xb8, 0xf0, 0x8d, 0x76, 0xe0, 0xe9, 0xb1, 0x77, 0xe0, 0x73, 0x50, - 0x62, 0x1f, 0x9a, 0x83, 0x0f, 0xc5, 0x8e, 0x5a, 0x64, 0x04, 0x15, 0x1f, 0x06, 0x6e, 0x38, 0x3b, - 0x91, 0x1b, 0xc6, 0xa0, 0x92, 0xb9, 0x38, 0x54, 0xf2, 0xd0, 0xdf, 0x11, 0xf9, 0x26, 0x7a, 0x75, - 0x88, 0xde, 0xd4, 0xbd, 0xb0, 0x15, 0xdd, 0x0b, 0xf9, 0xbe, 0xfa, 0xfe, 0x30, 0x2d, 0xdf, 0x59, - 0xa0, 0x64, 0x9f, 0x03, 0x25, 0x61, 0x5f, 0x14, 0x91, 0xf5, 0x3e, 0x80, 0x1f, 0x44, 0x24, 0x5a, - 0x72, 0x6e, 0x48, 0x1f, 0xd5, 0x10, 0x3b, 0x55, 0x1b, 0x99, 0x9a, 0xe0, 0x36, 0x65, 0xbc, 0xf8, - 0x98, 0x71, 0x95, 0xf2, 0xbf, 0x33, 0xa1, 0xf8, 0x92, 0x71, 0xfd, 0xf0, 0x30, 0x01, 0xd1, 0x4d, - 0xe8, 0xc5, 0x77, 0xa2, 0x08, 0xdd, 0x09, 0xbd, 0x2e, 0x01, 0xd0, 0xb1, 0xcc, 0x45, 0x77, 0x44, - 0x35, 0x07, 0x50, 0x4a, 0x82, 0xd2, 0x60, 0x27, 0x83, 0x43, 0xd3, 0x32, 0xdd, 0x23, 0x5e, 0x3f, - 0xcb, 0x4f, 0x06, 0x92, 0xd4, 0x60, 0x0f, 0x78, 0xf0, 0x1b, 0xd3, 0xd3, 0x3a, 0xc4, 0xc0, 0xcc, - 0xa7, 0x67, 0xd4, 0x22, 0x25, 0x6c, 0x12, 0x03, 0x07, 0x2b, 0xaf, 0x78, 0xb2, 0x95, 0x57, 0x8a, - 0xad, 0xbc, 0x33, 0x30, 0xeb, 0x60, 0xdd, 0x25, 0x96, 0x38, 0xaa, 0x8a, 0x12, 0x9d, 0x9a, 0x3e, - 0x76, 0x5d, 0xda, 0x92, 0x48, 0xd7, 0x44, 0x31, 0x94, 0x66, 0xce, 0x8f, 0x4c, 0x33, 0x87, 0x5c, - 0x6b, 0xc4, 0xd2, 0xcc, 0xca, 0xc8, 0x34, 0x73, 0x9c, 0x5b, 0x8d, 0x50, 0xa2, 0xbd, 0x30, 0x5e, - 0xa2, 0x1d, 0xce, 0x4b, 0x17, 0x23, 0x79, 0xe9, 0xb7, 0xb9, 0x58, 0x7f, 0x93, 0x83, 0x95, 0xc4, - 0xb2, 0x12, 0xcb, 0xf5, 0x6e, 0xec, 0x82, 0x64, 0x6d, 0xe4, 0x98, 0xf9, 0xf7, 0x23, 0x4f, 0x23, - 0xf7, 0x23, 0x1f, 0x8e, 0x16, 0x7c, 0xeb, 0xd7, 0x23, 0x7f, 0x92, 0x83, 0x77, 0xf6, 0x6d, 0x23, - 0x96, 0xe1, 0x89, 0x83, 0xf9, 0xf8, 0x81, 0xe3, 0xa1, 0xcc, 0xf5, 0xf3, 0x93, 0xa2, 0x17, 0x5c, - 0x4e, 0x51, 0xe0, 0x62, 0xb6, 0x19, 0x22, 0x65, 0xfa, 0x09, 0x2c, 0x6e, 0xbf, 0xc1, 0x9d, 0xf6, - 0xb1, 0xd5, 0x99, 0xc0, 0xb4, 0x2a, 0x14, 0x3a, 0x7d, 0x43, 0x20, 0x86, 0xf4, 0x33, 0x9c, 0x05, - 0x16, 0xa2, 0x59, 0xa0, 0x06, 0xd5, 0xa0, 0x05, 0x31, 0xbd, 0x67, 0xe8, 0xf4, 0x1a, 0x94, 0x99, - 0x2a, 0x9f, 0x57, 0x45, 0x49, 0xd0, 0xb1, 0xe3, 0xb0, 0x3e, 0x73, 0x3a, 0x76, 0x9c, 0x68, 0xb4, - 0x28, 0x44, 0xa3, 0x85, 0xf2, 0x8b, 0x1c, 0x94, 0x69, 0x0b, 0xdf, 0xc8, 0x7e, 0x71, 0xd4, 0x2a, - 0x04, 0x47, 0x2d, 0xff, 0xc4, 0x36, 0x1d, 0x3e, 0xb1, 0x05, 0x96, 0xcf, 0x30, 0x72, 0xd2, 0xf2, - 0x59, 0x9f, 0x8e, 0x1d, 0x47, 0xb9, 0x08, 0xf3, 0xdc, 0x36, 0xd1, 0xf3, 0x2a, 0x14, 0x06, 0x4e, - 0x4f, 0xfa, 0xd1, 0xc0, 0xe9, 0x29, 0x7f, 0x9a, 0x83, 0x4a, 0xc3, 0xf3, 0xf4, 0xce, 0xd1, 0x04, - 0x1d, 0xf0, 0x8d, 0xcb, 0x87, 0x8d, 0x4b, 0x76, 0x22, 0x30, 0x77, 0x3a, 0xc3, 0xdc, 0x99, 0x88, - 0xb9, 0x0a, 0x2c, 0x48, 0x5b, 0x32, 0x0d, 0x6e, 0x01, 0xda, 0x25, 0x8e, 0xf7, 0x84, 0x38, 0xaf, - 0x75, 0xc7, 0x98, 0xec, 0x04, 0x86, 0x60, 0x5a, 0x3c, 0xea, 0x2c, 0x5c, 0x9b, 0x51, 0xd9, 0xb7, - 0x72, 0x15, 0x4e, 0x45, 0xf4, 0x65, 0x36, 0xfc, 0x08, 0xca, 0x2c, 0xee, 0x8b, 0x54, 0xfc, 0x76, - 0xf8, 0xea, 0x62, 0xac, 0x5d, 0x42, 0xf9, 0x7d, 0x58, 0xa2, 0xf9, 0x01, 0xa3, 0xfb, 0x4b, 0xf1, - 0xfb, 0xb1, 0x3c, 0xf5, 0x42, 0x86, 0xa2, 0x58, 0x8e, 0xfa, 0xb7, 0x39, 0x98, 0x61, 0xf4, 0xc4, - 0x9e, 0x7d, 0x0e, 0x4a, 0x0e, 0xb6, 0x89, 0xe6, 0xe9, 0x5d, 0xff, 0x09, 0x2d, 0x25, 0xec, 0xe9, - 0x5d, 0x97, 0xbd, 0x00, 0xa6, 0x95, 0x86, 0xd9, 0xc5, 0xae, 0x27, 0xdf, 0xd1, 0x96, 0x29, 0x6d, - 0x8b, 0x93, 0xe8, 0x20, 0xb9, 0xe6, 0x1f, 0xf2, 0xbc, 0x73, 0x5a, 0x65, 0xdf, 0x68, 0x9d, 0xbf, - 0xea, 0x1a, 0x07, 0x5e, 0x66, 0x6f, 0xbe, 0xea, 0x50, 0x8c, 0x21, 0xca, 0x7e, 0x59, 0xd9, 0x06, - 0x14, 0x1e, 0x05, 0x31, 0xde, 0xb7, 0x60, 0x96, 0x0d, 0x92, 0xcc, 0x8e, 0x56, 0x32, 0x86, 0x41, - 0x15, 0x6c, 0x8a, 0x0e, 0x88, 0x0f, 0x70, 0x24, 0x23, 0x9a, 0x7c, 0x56, 0x86, 0x64, 0x48, 0xff, - 0x90, 0x83, 0x53, 0x91, 0x36, 0x84, 0xad, 0x37, 0xa3, 0x8d, 0x64, 0x9a, 0x2a, 0x1a, 0xd8, 0x8c, - 0x6c, 0x09, 0xb7, 0xb2, 0x4c, 0xfa, 0x2d, 0x6d, 0x07, 0xff, 0x98, 0x03, 0x68, 0x0c, 0xbc, 0x23, - 0x81, 0x0c, 0x86, 0x67, 0x26, 0x17, 0x9d, 0x19, 0x5a, 0x67, 0xeb, 0xae, 0xfb, 0x9a, 0x38, 0xf2, - 0x4c, 0xe3, 0x97, 0x19, 0x86, 0x37, 0xf0, 0x8e, 0xe4, 0xb5, 0x10, 0xfd, 0x46, 0x97, 0x61, 0x81, - 0x3f, 0xdb, 0xd6, 0x74, 0xc3, 0x70, 0xb0, 0xeb, 0x8a, 0xfb, 0xa1, 0x0a, 0xa7, 0x36, 0x38, 0x91, - 0xb2, 0x99, 0x06, 0xb6, 0x3c, 0xd3, 0x3b, 0xd6, 0x3c, 0xf2, 0x12, 0x5b, 0xe2, 0x6c, 0x52, 0x91, - 0xd4, 0x3d, 0x4a, 0xa4, 0x6c, 0x0e, 0xee, 0x9a, 0xae, 0xe7, 0x48, 0x36, 0x79, 0x17, 0x21, 0xa8, - 0x8c, 0x8d, 0x4e, 0x4a, 0x75, 0x77, 0xd0, 0xeb, 0xf1, 0x21, 0x3e, 0xf9, 0xb4, 0x7f, 0x20, 0x3a, - 0x94, 0xcf, 0xf2, 0xe9, 0x60, 0xd0, 0x44, 0x77, 0xdf, 0x22, 0x08, 0xf3, 0x01, 0x2c, 0x85, 0xfa, - 0x20, 0xdc, 0x2a, 0x92, 0x44, 0xe6, 0xa2, 0x49, 0xa4, 0xf2, 0x14, 0x10, 0xc7, 0x1d, 0xbe, 0x61, - 0xbf, 0x95, 0xd3, 0x70, 0x2a, 0xa2, 0x48, 0xec, 0xc4, 0x37, 0xa0, 0x22, 0xde, 0xe8, 0x08, 0x47, - 0x39, 0x0b, 0x45, 0x1a, 0x51, 0x3b, 0xa6, 0x21, 0xef, 0x0c, 0xe7, 0x6c, 0x62, 0x6c, 0x9a, 0x86, - 0xa3, 0x7c, 0x0a, 0x15, 0x95, 0xb7, 0x23, 0x78, 0x9f, 0xc0, 0x82, 0x78, 0xd1, 0xa3, 0x45, 0x5e, - 0xca, 0xa5, 0xbd, 0xc4, 0x0e, 0x37, 0xa2, 0x56, 0xac, 0x70, 0x51, 0x31, 0xa0, 0xce, 0x53, 0x86, - 0x88, 0x7a, 0xd9, 0xd9, 0x27, 0x20, 0x7f, 0x83, 0x30, 0xb2, 0x95, 0xa8, 0x7c, 0xc5, 0x09, 0x17, - 0x95, 0x0b, 0x70, 0x2e, 0xb5, 0x15, 0x31, 0x12, 0x36, 0x54, 0x83, 0x0a, 0xc3, 0x94, 0x97, 0xa7, - 0xec, 0x52, 0x34, 0x17, 0xba, 0x14, 0x3d, 0xe3, 0x27, 0x89, 0x79, 0xb9, 0x89, 0xb1, 0x0c, 0x30, - 0x48, 0xf7, 0x0b, 0x59, 0xe9, 0xfe, 0x74, 0x24, 0xdd, 0x57, 0xda, 0xfe, 0x78, 0x8a, 0x63, 0xd8, - 0x63, 0x76, 0x5c, 0xe4, 0x6d, 0xcb, 0x80, 0xa8, 0x0c, 0xeb, 0x25, 0x67, 0x55, 0x43, 0x52, 0xca, - 0x75, 0xa8, 0x44, 0x43, 0x63, 0x28, 0xce, 0xe5, 0x12, 0x71, 0x6e, 0x21, 0x16, 0xe2, 0x3e, 0x8a, - 0x65, 0xc0, 0xd9, 0x63, 0x1c, 0xcb, 0x7f, 0x1f, 0x44, 0x82, 0xdd, 0x8d, 0x94, 0xfb, 0xcc, 0xdf, - 0x52, 0x9c, 0x5b, 0x16, 0xfb, 0xc1, 0x13, 0x97, 0xca, 0x8b, 0x4e, 0x2b, 0x97, 0xa0, 0xbc, 0x9f, - 0xf5, 0xcc, 0x7f, 0x5a, 0xbe, 0x1d, 0xb8, 0x03, 0xcb, 0x4f, 0xcc, 0x1e, 0x76, 0x8f, 0x5d, 0x0f, - 0xf7, 0x9b, 0x2c, 0x28, 0x1d, 0x9a, 0xd8, 0x41, 0xab, 0x00, 0xec, 0x08, 0x63, 0x13, 0xd3, 0x7f, - 0xfd, 0x1d, 0xa2, 0x28, 0xff, 0x95, 0x83, 0xc5, 0x40, 0x70, 0x9f, 0x1d, 0xdd, 0xce, 0x43, 0x89, - 0xf6, 0xd7, 0xf5, 0xf4, 0xbe, 0x2d, 0xef, 0xb3, 0x7c, 0x02, 0xba, 0x0f, 0x33, 0x87, 0xae, 0x84, - 0x8c, 0x52, 0x01, 0xf4, 0x34, 0x43, 0xd4, 0xe9, 0x43, 0xb7, 0x69, 0xa0, 0x8f, 0x01, 0x06, 0x2e, - 0x36, 0xc4, 0x1d, 0x56, 0x21, 0x2b, 0x5b, 0xd8, 0x0f, 0xdf, 0xf5, 0x52, 0x01, 0xfe, 0xec, 0xe0, - 0x01, 0x94, 0x4d, 0x8b, 0x18, 0x98, 0xdd, 0xf5, 0x1a, 0x02, 0x55, 0x1a, 0x21, 0x0e, 0x5c, 0x62, - 0xdf, 0xc5, 0x86, 0x82, 0xc5, 0x5e, 0x28, 0xc7, 0x57, 0x38, 0x4a, 0x0b, 0x96, 0x78, 0xd0, 0x3a, - 0xf4, 0x0d, 0x97, 0x1e, 0xbb, 0x36, 0xac, 0x77, 0x6c, 0xb4, 0xd4, 0xaa, 0x29, 0x52, 0x1b, 0x29, - 0xaa, 0xdc, 0x83, 0xd3, 0x91, 0x13, 0xd2, 0x04, 0x47, 0x16, 0x65, 0x37, 0x06, 0x94, 0x04, 0xee, - 0x2c, 0x60, 0x08, 0xe9, 0xcd, 0xa3, 0x60, 0x08, 0x97, 0xc3, 0x10, 0xae, 0xf2, 0x05, 0x9c, 0x8d, - 0x20, 0x3a, 0x11, 0x8b, 0x1e, 0xc4, 0x32, 0xb7, 0x2b, 0xa3, 0xb4, 0xc6, 0x52, 0xb8, 0xff, 0xc9, - 0xc1, 0x72, 0x1a, 0xc3, 0x09, 0x11, 0xc7, 0x9f, 0x64, 0x3c, 0x31, 0xbb, 0x3b, 0x9e, 0x59, 0xbf, - 0x13, 0xb4, 0x76, 0x0f, 0xea, 0x69, 0xe3, 0x99, 0x9c, 0xa5, 0xc2, 0x24, 0xb3, 0xf4, 0xf3, 0x42, - 0x08, 0x79, 0x6f, 0x78, 0x9e, 0x63, 0x1e, 0x0c, 0xa8, 0xcb, 0xbf, 0x75, 0x34, 0xab, 0xe9, 0xe3, - 0x32, 0x7c, 0x68, 0x6f, 0x0f, 0x11, 0x0f, 0xec, 0x48, 0xc5, 0x66, 0x3e, 0x8b, 0x62, 0x33, 0x1c, - 0x53, 0xbf, 0x33, 0x9e, 0xbe, 0xef, 0x2c, 0x00, 0xfa, 0xf3, 0x3c, 0x2c, 0x44, 0xa7, 0x08, 0x6d, - 0x03, 0xe8, 0xbe, 0xe5, 0x62, 0xa1, 0x5c, 0x1e, 0xab, 0x9b, 0x6a, 0x48, 0x10, 0xbd, 0x0f, 0x85, - 0x8e, 0x3d, 0x10, 0xb3, 0x96, 0x72, 0x19, 0xbc, 0x69, 0x0f, 0x78, 0x44, 0xa1, 0x6c, 0xf4, 0x4c, - 0xc5, 0xef, 0xf6, 0xb3, 0xa3, 0xe4, 0x0b, 0x56, 0xcf, 0x65, 0x04, 0x33, 0x7a, 0x06, 0x0b, 0xaf, - 0x1d, 0xd3, 0xd3, 0x0f, 0x7a, 0x58, 0xeb, 0xe9, 0xc7, 0xd8, 0x11, 0x51, 0x72, 0x8c, 0x40, 0x56, - 0x91, 0x82, 0xcf, 0xa9, 0x9c, 0xf2, 0x47, 0x50, 0x94, 0x16, 0x8d, 0xd8, 0x11, 0xf6, 0x60, 0x65, - 0x40, 0xd9, 0x34, 0xf6, 0x1c, 0xcc, 0xd2, 0x2d, 0xa2, 0xb9, 0x98, 0x6e, 0xe3, 0xf2, 0xa1, 0xfa, - 0x88, 0x10, 0xbd, 0xcc, 0xa4, 0x37, 0x89, 0x83, 0x5b, 0xba, 0x45, 0xda, 0x5c, 0x54, 0x79, 0x05, - 0xe5, 0x50, 0x07, 0x47, 0x98, 0xd0, 0x84, 0x25, 0x79, 0x15, 0xef, 0x62, 0x4f, 0x6c, 0x2f, 0x63, - 0x35, 0xbe, 0x28, 0xe4, 0xda, 0xd8, 0xe3, 0xcf, 0x27, 0x1e, 0xc0, 0x59, 0x15, 0x13, 0x1b, 0x5b, - 0xfe, 0x7c, 0x3e, 0x27, 0xdd, 0x09, 0x22, 0xf8, 0x79, 0xa8, 0xa7, 0xc9, 0xf3, 0xf8, 0x70, 0xe3, - 0x3c, 0x14, 0xe5, 0x6f, 0x36, 0xd1, 0x1c, 0x14, 0xf6, 0x36, 0x77, 0xab, 0x53, 0xf4, 0x63, 0x7f, - 0x6b, 0xb7, 0x9a, 0xbb, 0xd1, 0x87, 0x6a, 0xfc, 0x67, 0x8a, 0x68, 0x05, 0x4e, 0xed, 0xaa, 0x3b, - 0xbb, 0x8d, 0xa7, 0x8d, 0xbd, 0xe6, 0x4e, 0x4b, 0xdb, 0x55, 0x9b, 0x9f, 0x34, 0xf6, 0xb6, 0xab, - 0x53, 0x68, 0x0d, 0x2e, 0x84, 0x2b, 0x9e, 0xed, 0xb4, 0xf7, 0xb4, 0xbd, 0x1d, 0x6d, 0x73, 0xa7, - 0xb5, 0xd7, 0x68, 0xb6, 0xb6, 0xd5, 0x6a, 0x0e, 0x5d, 0x80, 0xb3, 0x61, 0x96, 0xc7, 0xcd, 0xad, - 0xa6, 0xba, 0xbd, 0x49, 0xbf, 0x1b, 0xcf, 0xab, 0xf9, 0x1b, 0xb7, 0xa1, 0x12, 0xf9, 0x55, 0x21, - 0x35, 0x64, 0x77, 0x67, 0xab, 0x3a, 0x85, 0x2a, 0x50, 0x0a, 0xeb, 0x29, 0xc2, 0x74, 0x6b, 0x67, - 0x6b, 0xbb, 0x9a, 0xbf, 0x71, 0x0f, 0x16, 0x63, 0xef, 0x51, 0xd1, 0x12, 0x54, 0xda, 0x8d, 0xd6, - 0xd6, 0xe3, 0x9d, 0xcf, 0x34, 0x75, 0xbb, 0xb1, 0xf5, 0x79, 0x75, 0x0a, 0x2d, 0x43, 0x55, 0x92, - 0x5a, 0x3b, 0x7b, 0x9c, 0x9a, 0xbb, 0xf1, 0x32, 0xb6, 0xb2, 0x30, 0x3a, 0x0d, 0x4b, 0x7e, 0x33, - 0xda, 0xa6, 0xba, 0xdd, 0xd8, 0xdb, 0xa6, 0xad, 0x47, 0xc8, 0xea, 0x7e, 0xab, 0xd5, 0x6c, 0x3d, - 0xad, 0xe6, 0xa8, 0xd6, 0x80, 0xbc, 0xfd, 0x59, 0x93, 0x32, 0xe7, 0xa3, 0xcc, 0xfb, 0xad, 0x1f, - 0xb6, 0x76, 0x3e, 0x6d, 0x55, 0x0b, 0x1b, 0x7f, 0xbf, 0x04, 0x0b, 0x32, 0xbd, 0xc3, 0x0e, 0x7b, - 0xcb, 0xb2, 0x0b, 0x73, 0xf2, 0x97, 0xbf, 0x29, 0x71, 0x39, 0xfa, 0x7b, 0xe5, 0xfa, 0xda, 0x10, - 0x0e, 0x91, 0x65, 0x4f, 0xa1, 0x03, 0x96, 0xf5, 0x86, 0xde, 0x07, 0x5f, 0x49, 0xcd, 0x31, 0x13, - 0x4f, 0x92, 0xeb, 0x57, 0x47, 0xf2, 0xf9, 0x6d, 0x60, 0x9a, 0xd8, 0x86, 0x7f, 0x00, 0x83, 0xae, - 0xa6, 0x65, 0xa4, 0x29, 0xbf, 0xb0, 0xa9, 0x5f, 0x1b, 0xcd, 0xe8, 0x37, 0xf3, 0x12, 0xaa, 0xf1, - 0x1f, 0xc3, 0xa0, 0x14, 0xc0, 0x34, 0xe3, 0x17, 0x37, 0xf5, 0x1b, 0xe3, 0xb0, 0x86, 0x1b, 0x4b, - 0xfc, 0x6c, 0xe4, 0xfa, 0x38, 0xef, 0xf0, 0x33, 0x1b, 0xcb, 0x7a, 0xb2, 0xcf, 0x07, 0x30, 0xfa, - 0xf6, 0x17, 0xa5, 0xfe, 0x46, 0x23, 0xe5, 0xe5, 0x78, 0xda, 0x00, 0xa6, 0x3f, 0x23, 0x56, 0xa6, - 0xd0, 0x11, 0x2c, 0xc6, 0x1e, 0x25, 0xa0, 0x14, 0xf1, 0xf4, 0xd7, 0x17, 0xf5, 0xeb, 0x63, 0x70, - 0x46, 0x3d, 0x22, 0xfc, 0x08, 0x21, 0xdd, 0x23, 0x52, 0x9e, 0x38, 0xa4, 0x7b, 0x44, 0xea, 0x7b, - 0x06, 0xe6, 0xdc, 0x91, 0xc7, 0x07, 0x69, 0xce, 0x9d, 0xf6, 0xe4, 0xa1, 0x7e, 0x75, 0x24, 0x5f, - 0x78, 0xd0, 0x62, 0x4f, 0x11, 0xd2, 0x06, 0x2d, 0xfd, 0xa9, 0x43, 0xfd, 0xfa, 0x18, 0x9c, 0x71, - 0x2f, 0x08, 0x2e, 0x36, 0xb3, 0xbc, 0x20, 0x71, 0x0d, 0x9f, 0xe5, 0x05, 0xc9, 0x3b, 0x52, 0xe1, - 0x05, 0xb1, 0x0b, 0xc9, 0x6b, 0x63, 0x5c, 0xa0, 0x64, 0x7b, 0x41, 0xfa, 0x55, 0x8b, 0x32, 0x85, - 0xfe, 0x38, 0x07, 0xb5, 0xac, 0xcb, 0x09, 0x94, 0x92, 0xd5, 0x8d, 0xb8, 0x4f, 0xa9, 0x6f, 0x4c, - 0x22, 0xe2, 0x5b, 0xf1, 0x25, 0xa0, 0xe4, 0x6e, 0x87, 0xde, 0x4b, 0x9b, 0x99, 0x8c, 0x3d, 0xb5, - 0xfe, 0xfe, 0x78, 0xcc, 0x7e, 0x93, 0x6d, 0x28, 0xca, 0xeb, 0x10, 0x94, 0x12, 0xa5, 0x63, 0x97, - 0x31, 0x75, 0x65, 0x18, 0x8b, 0xaf, 0xf4, 0x29, 0x4c, 0x53, 0x2a, 0xba, 0x90, 0xce, 0x2d, 0x95, - 0xad, 0x66, 0x55, 0xfb, 0x8a, 0x5e, 0xc0, 0x2c, 0xc7, 0xff, 0x51, 0x0a, 0xde, 0x10, 0xb9, 0xa5, - 0xa8, 0x5f, 0xcc, 0x66, 0xf0, 0xd5, 0xfd, 0x98, 0xff, 0x53, 0x08, 0x01, 0xed, 0xa3, 0x77, 0xd3, - 0x7f, 0x65, 0x1b, 0xbd, 0x49, 0xa8, 0x5f, 0x1e, 0xc1, 0x15, 0x5e, 0x14, 0xb1, 0x5c, 0xf7, 0xea, - 0xc8, 0x03, 0x4b, 0xf6, 0xa2, 0x48, 0x3f, 0x12, 0x71, 0x27, 0x49, 0x1e, 0x99, 0xd2, 0x9c, 0x24, - 0xf3, 0xa0, 0x9a, 0xe6, 0x24, 0xd9, 0xa7, 0x30, 0x65, 0x0a, 0x79, 0x70, 0x2a, 0x05, 0x20, 0x43, - 0xef, 0x67, 0x39, 0x79, 0x1a, 0x5a, 0x57, 0xbf, 0x39, 0x26, 0x77, 0x78, 0xf2, 0xc5, 0xa2, 0x7f, - 0x27, 0x1b, 0x35, 0xca, 0x9c, 0xfc, 0xf8, 0x12, 0xdf, 0xf8, 0xb7, 0x02, 0xcc, 0x73, 0xf0, 0x53, - 0x64, 0x30, 0x9f, 0x03, 0x04, 0xf7, 0x0e, 0xe8, 0x52, 0xfa, 0x98, 0x44, 0xee, 0x66, 0xea, 0xef, - 0x0e, 0x67, 0x0a, 0x3b, 0x5a, 0x08, 0xc3, 0x4f, 0x73, 0xb4, 0xe4, 0x55, 0x45, 0x9a, 0xa3, 0xa5, - 0x5c, 0x04, 0x28, 0x53, 0xe8, 0x13, 0x28, 0xf9, 0x60, 0x31, 0x4a, 0x03, 0x9b, 0x63, 0x68, 0x78, - 0xfd, 0xd2, 0x50, 0x9e, 0xb0, 0xd5, 0x21, 0x24, 0x38, 0xcd, 0xea, 0x24, 0xe2, 0x9c, 0x66, 0x75, - 0x1a, 0x9c, 0x1c, 0x8c, 0x09, 0xc7, 0x8b, 0x32, 0xc7, 0x24, 0x02, 0xd7, 0x65, 0x8e, 0x49, 0x14, - 0x74, 0x52, 0xa6, 0x1e, 0x5f, 0xf9, 0xf5, 0x57, 0xab, 0xb9, 0x7f, 0xfe, 0x6a, 0x75, 0xea, 0x67, - 0x5f, 0xaf, 0xe6, 0x7e, 0xfd, 0xf5, 0x6a, 0xee, 0x9f, 0xbe, 0x5e, 0xcd, 0xfd, 0xfb, 0xd7, 0xab, - 0xb9, 0x3f, 0xff, 0x8f, 0xd5, 0xa9, 0x1f, 0x15, 0xa5, 0xf4, 0xc1, 0x2c, 0xfb, 0xd7, 0x2e, 0x1f, - 0xfe, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x44, 0x4e, 0x61, 0x00, 0xa0, 0x47, 0x00, 0x00, + // 5018 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5c, 0xcd, 0x73, 0x1b, 0x47, + 0x76, 0x27, 0x3e, 0x48, 0x02, 0x0f, 0x04, 0x09, 0xb6, 0x28, 0x11, 0x82, 0x2c, 0x9a, 0x1c, 0xc9, + 0xd6, 0x87, 0x2d, 0xca, 0xa2, 0x77, 0x65, 0xeb, 0x63, 0x65, 0x53, 0x24, 0x25, 0x21, 0x2b, 0x81, + 0xcc, 0x80, 0xb4, 0xec, 0xf5, 0x56, 0xcd, 0x0e, 0x31, 0x4d, 0x70, 0x4c, 0x60, 0x7a, 0x3c, 0x33, + 0x20, 0xc5, 0x1c, 0x52, 0x5b, 0x95, 0xca, 0x56, 0x2a, 0xa7, 0x9c, 0xf7, 0xb8, 0x39, 0xe4, 0x90, + 0x5b, 0xaa, 0x72, 0xca, 0x29, 0xa9, 0xad, 0xd4, 0x5e, 0xb6, 0x2a, 0xa7, 0xad, 0x7c, 0x5c, 0x62, + 0xa7, 0x72, 0xc9, 0x21, 0x95, 0x3f, 0x21, 0xd5, 0x5f, 0x83, 0xf9, 0xc4, 0x07, 0x2d, 0xaf, 0xbd, + 0x27, 0x4c, 0xbf, 0x79, 0xef, 0xf5, 0xeb, 0xee, 0x37, 0xaf, 0x5f, 0xff, 0xde, 0x0c, 0xa0, 0xa8, + 0xdb, 0xe6, 0xaa, 0xed, 0x10, 0x8f, 0xa0, 0x8a, 0xd3, 0xb3, 0x3c, 0xb3, 0x8b, 0x57, 0x8f, 0xef, + 0xe8, 0x1d, 0xfb, 0x50, 0x5f, 0xab, 0xdd, 0x6a, 0x9b, 0xde, 0x61, 0x6f, 0x7f, 0xb5, 0x45, 0xba, + 0xb7, 0xdb, 0xa4, 0x4d, 0x6e, 0x33, 0xc6, 0xfd, 0xde, 0x01, 0x6b, 0xb1, 0x06, 0xbb, 0xe2, 0x0a, + 0x94, 0x9b, 0x30, 0xfb, 0x09, 0x76, 0x5c, 0x93, 0x58, 0x2a, 0xfe, 0xb2, 0x87, 0x5d, 0x0f, 0x55, + 0x61, 0xfa, 0x98, 0x53, 0xaa, 0x99, 0xe5, 0xcc, 0xf5, 0xa2, 0x2a, 0x9b, 0xca, 0xdf, 0x64, 0x60, + 0xce, 0x67, 0x76, 0x6d, 0x62, 0xb9, 0x38, 0x9d, 0x1b, 0xad, 0xc0, 0x8c, 0x30, 0x4e, 0xb3, 0xf4, + 0x2e, 0xae, 0x66, 0xd9, 0xed, 0x92, 0xa0, 0x35, 0xf4, 0x2e, 0x46, 0xd7, 0x60, 0x4e, 0xb2, 0x48, + 0x25, 0x39, 0xc6, 0x35, 0x2b, 0xc8, 0xa2, 0x37, 0xb4, 0x0a, 0xe7, 0x24, 0xa3, 0x6e, 0x9b, 0x3e, + 0x73, 0x9e, 0x31, 0xcf, 0x8b, 0x5b, 0xeb, 0xb6, 0x29, 0xf8, 0x95, 0xcf, 0xa1, 0xb8, 0xd9, 0x68, + 0x6e, 0x10, 0xeb, 0xc0, 0x6c, 0x53, 0x13, 0x5d, 0xec, 0x50, 0x99, 0x6a, 0x66, 0x39, 0x47, 0x4d, + 0x14, 0x4d, 0x54, 0x83, 0x82, 0x8b, 0x75, 0xa7, 0x75, 0x88, 0xdd, 0x6a, 0x96, 0xdd, 0xf2, 0xdb, + 0x54, 0x8a, 0xd8, 0x9e, 0x49, 0x2c, 0xb7, 0x9a, 0xe3, 0x52, 0xa2, 0xa9, 0xfc, 0x2a, 0x03, 0xa5, + 0x1d, 0xe2, 0x78, 0x2f, 0x74, 0xdb, 0x36, 0xad, 0x36, 0xba, 0x0b, 0x05, 0x36, 0x97, 0x2d, 0xd2, + 0x61, 0x73, 0x30, 0xbb, 0x56, 0x5b, 0x8d, 0x2e, 0xcb, 0xea, 0x8e, 0xe0, 0x50, 0x7d, 0x5e, 0xf4, + 0x16, 0xcc, 0xb6, 0x88, 0xe5, 0xe9, 0xa6, 0x85, 0x1d, 0xcd, 0x26, 0x8e, 0xc7, 0xa6, 0x68, 0x52, + 0x2d, 0xfb, 0x54, 0xda, 0x0b, 0xba, 0x04, 0xc5, 0x43, 0xe2, 0x7a, 0x9c, 0x23, 0xc7, 0x38, 0x0a, + 0x94, 0xc0, 0x6e, 0x2e, 0xc2, 0x34, 0xbb, 0x69, 0xda, 0x62, 0x32, 0xa6, 0x68, 0xb3, 0x6e, 0x2b, + 0xbf, 0xcb, 0xc0, 0xe4, 0x0b, 0xd2, 0xb3, 0xbc, 0x48, 0x37, 0xba, 0x77, 0x28, 0x16, 0x2a, 0xd0, + 0x8d, 0xee, 0x1d, 0xf6, 0xbb, 0xa1, 0x1c, 0x7c, 0xad, 0x78, 0x37, 0xf4, 0x66, 0x0d, 0x0a, 0x0e, + 0xd6, 0x0d, 0x62, 0x75, 0x4e, 0x99, 0x09, 0x05, 0xd5, 0x6f, 0xd3, 0x45, 0x74, 0x71, 0xc7, 0xb4, + 0x7a, 0xaf, 0x34, 0x07, 0x77, 0xf4, 0x7d, 0xdc, 0x61, 0xa6, 0x14, 0xd4, 0x59, 0x41, 0x56, 0x39, + 0x15, 0x6d, 0x42, 0xc9, 0x76, 0x88, 0xad, 0xb7, 0x75, 0x3a, 0x8f, 0xd5, 0x49, 0x36, 0x55, 0x4a, + 0x7c, 0xaa, 0x98, 0xd9, 0x3b, 0x7d, 0x4e, 0x35, 0x28, 0xa6, 0xfc, 0x5d, 0x06, 0xe6, 0xa8, 0xf3, + 0xb8, 0xb6, 0xde, 0xc2, 0xdb, 0x6c, 0x49, 0xd0, 0x3d, 0x98, 0xb6, 0xb0, 0x77, 0x42, 0x9c, 0x23, + 0xb1, 0x00, 0x6f, 0xc6, 0xb5, 0xfa, 0x32, 0x2f, 0x88, 0x81, 0x55, 0xc9, 0x8f, 0xee, 0x40, 0xce, + 0x36, 0x0d, 0x36, 0xe0, 0x11, 0xc4, 0x28, 0x2f, 0x15, 0x31, 0xed, 0x16, 0x9b, 0x87, 0x51, 0x44, + 0x4c, 0xbb, 0xa5, 0x28, 0x00, 0x75, 0xcb, 0xbb, 0xfb, 0x83, 0x4f, 0xf4, 0x4e, 0x0f, 0xa3, 0x05, + 0x98, 0x3c, 0xa6, 0x17, 0xcc, 0xd8, 0x9c, 0xca, 0x1b, 0xca, 0x57, 0x39, 0xb8, 0xf4, 0x9c, 0xce, + 0x57, 0x53, 0xb7, 0x8c, 0x7d, 0xf2, 0xaa, 0x89, 0x5b, 0x3d, 0xc7, 0xf4, 0x4e, 0x37, 0x88, 0xe5, + 0xe1, 0x57, 0x1e, 0x6a, 0xc0, 0xbc, 0x25, 0x35, 0x6b, 0xd2, 0x35, 0xa9, 0x86, 0xd2, 0xda, 0xca, + 0x00, 0x23, 0xf8, 0x14, 0xa9, 0x15, 0x2b, 0x4c, 0x70, 0xd1, 0xb3, 0xfe, 0xba, 0x49, 0x6d, 0x59, + 0xa6, 0x2d, 0x61, 0x48, 0xcd, 0x2d, 0x66, 0x99, 0xd0, 0x25, 0x17, 0x56, 0x6a, 0x7a, 0x08, 0xf4, + 0xa9, 0xd6, 0x74, 0x57, 0xeb, 0xb9, 0xd8, 0x61, 0x13, 0x53, 0x5a, 0x7b, 0x23, 0xae, 0xa5, 0x3f, + 0x05, 0x6a, 0xd1, 0xe9, 0x59, 0xeb, 0xee, 0x9e, 0x8b, 0x1d, 0x16, 0x04, 0x84, 0x2f, 0x69, 0x0e, + 0x21, 0xde, 0x81, 0x2b, 0xfd, 0x47, 0x92, 0x55, 0x46, 0x45, 0xb7, 0xe1, 0x9c, 0xdb, 0xb3, 0xed, + 0x0e, 0xee, 0x62, 0xcb, 0xd3, 0x3b, 0x5a, 0xdb, 0x21, 0x3d, 0xdb, 0xad, 0x4e, 0x2e, 0xe7, 0xae, + 0xe7, 0x54, 0x14, 0xbc, 0xf5, 0x94, 0xdd, 0x41, 0x4b, 0x00, 0xb6, 0x63, 0x1e, 0x9b, 0x1d, 0xdc, + 0xc6, 0x46, 0x75, 0x8a, 0x29, 0x0d, 0x50, 0xd0, 0x7b, 0xb0, 0xe0, 0xe2, 0x56, 0x8b, 0x74, 0x6d, + 0xcd, 0x76, 0xc8, 0x81, 0xd9, 0xc1, 0xdc, 0xfb, 0xa7, 0x99, 0xf7, 0x23, 0x71, 0x6f, 0x87, 0xdf, + 0x62, 0xcf, 0xc1, 0x23, 0x16, 0xd3, 0xe8, 0x48, 0x59, 0xe7, 0xd5, 0xc2, 0x08, 0x43, 0x05, 0x36, + 0x54, 0x66, 0x92, 0xf2, 0xab, 0x2c, 0x9c, 0x67, 0x33, 0xb9, 0x43, 0x0c, 0xb1, 0xcc, 0x22, 0x48, + 0x5d, 0x81, 0x72, 0x8b, 0xe9, 0xd4, 0x6c, 0xdd, 0xc1, 0x96, 0x27, 0x1e, 0xd2, 0x19, 0x4e, 0xdc, + 0x61, 0x34, 0xf4, 0x29, 0x54, 0x5c, 0xe1, 0x15, 0x5a, 0x8b, 0xbb, 0x85, 0x58, 0xb3, 0x5b, 0x71, + 0x13, 0x06, 0xf8, 0x92, 0x3a, 0xe7, 0xc6, 0x9c, 0x6b, 0xda, 0x3d, 0x75, 0x5b, 0x5e, 0x87, 0x47, + 0xbb, 0xd2, 0xda, 0x0f, 0x52, 0x14, 0x46, 0x0d, 0x5f, 0x6d, 0x72, 0xb1, 0x2d, 0xcb, 0x73, 0x4e, + 0x55, 0xa9, 0xa4, 0x76, 0x1f, 0x66, 0x82, 0x37, 0x50, 0x05, 0x72, 0x47, 0xf8, 0x54, 0x0c, 0x8a, + 0x5e, 0xf6, 0x1f, 0x02, 0x1e, 0x6b, 0x78, 0xe3, 0x7e, 0xf6, 0xc3, 0x8c, 0xe2, 0x00, 0xea, 0xf7, + 0xf2, 0x02, 0x7b, 0xba, 0xa1, 0x7b, 0x3a, 0x42, 0x90, 0x67, 0xdb, 0x08, 0x57, 0xc1, 0xae, 0xa9, + 0xd6, 0x9e, 0x78, 0x78, 0x8b, 0x2a, 0xbd, 0x44, 0x6f, 0x40, 0xd1, 0x77, 0x74, 0xb1, 0x97, 0xf4, + 0x09, 0x34, 0xa6, 0xeb, 0x9e, 0x87, 0xbb, 0xb6, 0xc7, 0x5c, 0xac, 0xac, 0xca, 0xa6, 0xf2, 0xbf, + 0x79, 0xa8, 0xc4, 0xd6, 0xe4, 0x63, 0x28, 0x74, 0x45, 0xf7, 0xe2, 0x41, 0xbb, 0x9a, 0x10, 0xd8, + 0x63, 0xa6, 0xaa, 0xbe, 0x14, 0x8d, 0x9b, 0x34, 0x86, 0x06, 0xf6, 0x3f, 0xbf, 0x4d, 0x57, 0xbc, + 0x43, 0xda, 0x9a, 0x61, 0x3a, 0xb8, 0xe5, 0x11, 0xe7, 0x54, 0x98, 0x3b, 0xd3, 0x21, 0xed, 0x4d, + 0x49, 0x43, 0xf7, 0x01, 0x0c, 0xcb, 0xa5, 0x8b, 0x7d, 0x60, 0xb6, 0x99, 0xd1, 0xa5, 0xb5, 0x4b, + 0x71, 0x23, 0xfc, 0xcd, 0x4e, 0x2d, 0x1a, 0x96, 0x2b, 0xcc, 0x7f, 0x0c, 0x65, 0xba, 0x67, 0x68, + 0x5d, 0xbe, 0x4f, 0xf1, 0x27, 0xa5, 0xb4, 0x76, 0x39, 0x69, 0x0c, 0xfe, 0x6e, 0xa6, 0xce, 0xd8, + 0xfd, 0x86, 0x8b, 0x9e, 0xc0, 0x14, 0x0b, 0xde, 0x6e, 0x75, 0x8a, 0x09, 0xaf, 0x0e, 0x9a, 0x00, + 0xe1, 0x11, 0xcf, 0x99, 0x00, 0x77, 0x08, 0x21, 0x8d, 0xf6, 0xa0, 0xa4, 0x5b, 0x16, 0xf1, 0x74, + 0x1e, 0x68, 0xa6, 0x99, 0xb2, 0xf7, 0x47, 0x50, 0xb6, 0xde, 0x97, 0xe2, 0x1a, 0x83, 0x7a, 0xd0, + 0x8f, 0x60, 0x92, 0x45, 0x22, 0xf1, 0x20, 0x5e, 0x1b, 0xd1, 0x69, 0x55, 0x2e, 0x55, 0xbb, 0x07, + 0xa5, 0x80, 0xb1, 0xe3, 0x38, 0x69, 0xed, 0x11, 0x54, 0xa2, 0xa6, 0x8d, 0xe5, 0xe4, 0x2a, 0x2c, + 0xa8, 0x3d, 0xab, 0x6f, 0x98, 0xcc, 0xbe, 0xee, 0xc3, 0x94, 0x58, 0x6c, 0xee, 0x71, 0xca, 0xf0, + 0x39, 0x52, 0x85, 0x84, 0xf2, 0x23, 0x38, 0x1f, 0xd1, 0x29, 0x92, 0xb4, 0xab, 0x30, 0x6b, 0x13, + 0x43, 0x73, 0x39, 0x59, 0x33, 0x0d, 0x19, 0x5d, 0x6c, 0x9f, 0xb7, 0x6e, 0x50, 0xf1, 0xa6, 0x47, + 0xec, 0xb8, 0x4d, 0xa3, 0x89, 0x57, 0xe1, 0x42, 0x54, 0x9c, 0x77, 0xaf, 0x7c, 0x04, 0x8b, 0x2a, + 0xee, 0x92, 0x63, 0x7c, 0x56, 0xd5, 0x35, 0xa8, 0xc6, 0x15, 0x08, 0xe5, 0x9f, 0xc1, 0x62, 0x9f, + 0xda, 0xf4, 0x74, 0xaf, 0xe7, 0x8e, 0xa5, 0x5c, 0x64, 0xb0, 0xfb, 0xc4, 0xe5, 0xab, 0x54, 0x50, + 0x65, 0x53, 0xb9, 0x11, 0x54, 0xdd, 0xe0, 0x09, 0x03, 0xef, 0x01, 0xcd, 0x42, 0xd6, 0xb4, 0x85, + 0xba, 0xac, 0x69, 0x2b, 0xcf, 0xa0, 0xe8, 0xef, 0xb8, 0xe8, 0x41, 0x3f, 0x75, 0xcc, 0x8e, 0xba, + 0x3f, 0xfb, 0xd9, 0xe5, 0x6e, 0x6c, 0x87, 0x10, 0x5d, 0x3e, 0x00, 0xf0, 0x23, 0x99, 0xdc, 0xf8, + 0x2f, 0x0d, 0x50, 0xac, 0x06, 0xd8, 0x95, 0x7f, 0x0f, 0xc5, 0xb7, 0xc0, 0x20, 0x0c, 0x7f, 0x10, + 0x46, 0x28, 0xde, 0x65, 0xcf, 0x14, 0xef, 0x3e, 0x80, 0x49, 0xd7, 0xd3, 0x3d, 0x2c, 0x92, 0xa3, + 0x95, 0x41, 0xe2, 0xd4, 0x08, 0xac, 0x72, 0x7e, 0x74, 0x19, 0xa0, 0xe5, 0x60, 0xdd, 0xc3, 0x86, + 0xa6, 0xf3, 0xe0, 0x9c, 0x53, 0x8b, 0x82, 0xb2, 0xee, 0xa1, 0x8d, 0x7e, 0x82, 0x37, 0xc9, 0x0c, + 0xbb, 0x31, 0x48, 0x73, 0x68, 0xa9, 0xfa, 0xa9, 0x9e, 0x1f, 0x2c, 0xa6, 0x46, 0x0c, 0x16, 0x42, + 0x01, 0x97, 0x0a, 0x84, 0xc2, 0xe9, 0xe1, 0xa1, 0x90, 0x8b, 0x8e, 0x12, 0x0a, 0x0b, 0xc3, 0x43, + 0xa1, 0x50, 0x36, 0x30, 0x14, 0x7e, 0x97, 0xb1, 0xec, 0xdf, 0x32, 0x50, 0x8d, 0x3f, 0x83, 0x22, + 0xf6, 0xdc, 0x87, 0x29, 0x97, 0x51, 0x46, 0x09, 0x68, 0x42, 0x56, 0x48, 0xa0, 0x67, 0x90, 0x37, + 0xad, 0x03, 0xc2, 0xce, 0x66, 0x89, 0x29, 0x49, 0x5a, 0xaf, 0xab, 0x75, 0xeb, 0x80, 0xf0, 0x49, + 0x62, 0x1a, 0x6a, 0x1f, 0x40, 0xd1, 0x27, 0x8d, 0x35, 0xb6, 0x6d, 0x58, 0x88, 0xb8, 0x2c, 0xcf, + 0xe1, 0x7d, 0x4f, 0xcf, 0x8c, 0xe7, 0xe9, 0xca, 0xcf, 0xb3, 0xc1, 0x27, 0xf1, 0x89, 0xd9, 0xf1, + 0xb0, 0x13, 0x7b, 0x12, 0x1f, 0x4a, 0xed, 0xfc, 0x31, 0x7c, 0x7b, 0xa8, 0x76, 0x9e, 0x6a, 0x8a, + 0x87, 0xe9, 0xa7, 0x30, 0xcb, 0x7c, 0x4d, 0x73, 0x71, 0x87, 0xe5, 0x11, 0x22, 0xa7, 0xfb, 0xe1, + 0x20, 0x35, 0xdc, 0x12, 0xee, 0xb1, 0x4d, 0x21, 0xc7, 0x67, 0xb0, 0xdc, 0x09, 0xd2, 0x6a, 0x1f, + 0x03, 0x8a, 0x33, 0x8d, 0x35, 0xa7, 0x4d, 0x1a, 0xe2, 0xe8, 0x01, 0x36, 0x61, 0xf3, 0x3b, 0x60, + 0x66, 0x8c, 0xe2, 0x2b, 0xdc, 0x60, 0x55, 0x48, 0x28, 0xbf, 0xce, 0x01, 0xf4, 0x6f, 0xfe, 0x01, + 0xc5, 0xb6, 0x8f, 0xfd, 0xb8, 0xc2, 0xf3, 0xb3, 0xeb, 0x83, 0x14, 0x27, 0x46, 0x94, 0xed, 0x70, + 0x44, 0xe1, 0x99, 0xda, 0xad, 0x81, 0x6a, 0xbe, 0xb7, 0xb1, 0xe4, 0x39, 0x5c, 0x88, 0xfa, 0x86, + 0x08, 0x24, 0x6b, 0x30, 0x69, 0x7a, 0xb8, 0xcb, 0x41, 0x9c, 0xc4, 0x43, 0x57, 0x40, 0x88, 0xb3, + 0x2a, 0x2b, 0x50, 0xac, 0x77, 0xf5, 0x36, 0x6e, 0xda, 0xb8, 0x45, 0x3b, 0x35, 0x69, 0x43, 0x18, + 0xc2, 0x1b, 0xca, 0x1a, 0x14, 0x7e, 0x8c, 0x4f, 0xf9, 0x43, 0x3d, 0xa2, 0xa1, 0xca, 0x3f, 0x17, + 0x60, 0x91, 0xed, 0x15, 0x1b, 0x12, 0x42, 0x51, 0xb1, 0x4b, 0x7a, 0x4e, 0x0b, 0xbb, 0x6c, 0xb5, + 0xed, 0x9e, 0x66, 0x63, 0xc7, 0x24, 0x86, 0x38, 0xe1, 0x17, 0x5b, 0x76, 0x6f, 0x87, 0x11, 0xd0, + 0x25, 0xa0, 0x0d, 0xed, 0xcb, 0x1e, 0x11, 0x8e, 0x98, 0x53, 0x0b, 0x2d, 0xbb, 0xf7, 0xc7, 0xb4, + 0x2d, 0x65, 0xdd, 0x43, 0xdd, 0xc1, 0x2e, 0xf3, 0x33, 0x2e, 0xdb, 0x64, 0x04, 0x74, 0x07, 0xce, + 0x77, 0x71, 0x97, 0x38, 0xa7, 0x5a, 0xc7, 0xec, 0x9a, 0x9e, 0x66, 0x5a, 0xda, 0xfe, 0xa9, 0x87, + 0x5d, 0xe1, 0x53, 0x88, 0xdf, 0x7c, 0x4e, 0xef, 0xd5, 0xad, 0xc7, 0xf4, 0x0e, 0x52, 0xa0, 0x4c, + 0x48, 0x57, 0x73, 0x5b, 0xc4, 0xc1, 0x9a, 0x6e, 0x7c, 0xc1, 0xb6, 0xcf, 0x9c, 0x5a, 0x22, 0xa4, + 0xdb, 0xa4, 0xb4, 0x75, 0xe3, 0x0b, 0xf4, 0x26, 0x94, 0x5a, 0x76, 0xcf, 0xc5, 0x9e, 0x46, 0x7f, + 0xd8, 0xee, 0x58, 0x54, 0x81, 0x93, 0x36, 0xec, 0x9e, 0x1b, 0x60, 0xe8, 0xd2, 0xf9, 0x9f, 0x0e, + 0x32, 0xbc, 0xc0, 0x5d, 0x17, 0xbd, 0x04, 0x30, 0x4c, 0xf7, 0x48, 0x8c, 0xca, 0x60, 0xeb, 0xf3, + 0x61, 0xca, 0xf6, 0x1a, 0x9f, 0xb2, 0xd5, 0x4d, 0xd3, 0x3d, 0x62, 0x13, 0xc0, 0x5d, 0xb1, 0x68, + 0xc8, 0x36, 0x5a, 0x81, 0x99, 0xfd, 0xce, 0x91, 0x49, 0xb4, 0x13, 0x6c, 0xb6, 0x0f, 0xbd, 0x2a, + 0x66, 0xa7, 0xb6, 0x12, 0xa3, 0xbd, 0x64, 0x24, 0xd4, 0x80, 0x73, 0x41, 0x16, 0xcd, 0xc0, 0xc7, + 0x66, 0x0b, 0x57, 0x0f, 0x98, 0x11, 0x4b, 0x71, 0x23, 0xb8, 0xd8, 0x26, 0xe3, 0x52, 0xe7, 0x03, + 0x9a, 0x38, 0x09, 0x35, 0xe1, 0x3c, 0xd7, 0xc7, 0x15, 0x69, 0x0e, 0xd6, 0x0d, 0x6d, 0xdf, 0x76, + 0xab, 0x6d, 0xa6, 0x71, 0x39, 0xae, 0x71, 0xf7, 0xd0, 0x21, 0x9e, 0xd7, 0xc1, 0x42, 0x27, 0x62, + 0xe2, 0xa2, 0x81, 0x75, 0xe3, 0xb1, 0x4d, 0xf7, 0xfc, 0x0b, 0x21, 0xa5, 0x27, 0x8e, 0xe9, 0x61, + 0xa6, 0xf5, 0x70, 0x44, 0xad, 0xe7, 0x02, 0x5a, 0x5f, 0x52, 0xe9, 0x24, 0xb5, 0xcc, 0xd6, 0xfa, + 0xb6, 0xed, 0x56, 0xcd, 0x33, 0xa8, 0xa5, 0xc6, 0x52, 0x61, 0xf4, 0x12, 0x16, 0x13, 0xac, 0x65, + 0x7a, 0xbf, 0x18, 0x51, 0xef, 0x42, 0xd4, 0x5c, 0xa6, 0xf8, 0x0a, 0x94, 0x8f, 0xb0, 0x63, 0xe1, + 0x8e, 0xc6, 0x5d, 0xb5, 0x7a, 0xc4, 0xbc, 0x71, 0x86, 0x13, 0x5f, 0x30, 0x1a, 0xba, 0x05, 0xc2, + 0x91, 0x35, 0x07, 0xbb, 0xd8, 0x39, 0xe6, 0x68, 0x61, 0x87, 0x71, 0xce, 0xf3, 0x3b, 0x6a, 0xff, + 0x06, 0xaa, 0x83, 0x20, 0x6a, 0xee, 0x09, 0x3b, 0xb5, 0x62, 0xd7, 0xad, 0x76, 0x47, 0xc0, 0x65, + 0x2a, 0x5c, 0xac, 0xe9, 0x4b, 0xa1, 0x35, 0x98, 0xee, 0xb1, 0x27, 0xcb, 0xad, 0x5a, 0x6c, 0x9c, + 0xd5, 0xb8, 0x82, 0x3d, 0xc6, 0xa0, 0x4a, 0xc6, 0xda, 0x43, 0x98, 0x0d, 0xbb, 0xef, 0x58, 0xd1, + 0xee, 0x3e, 0xcc, 0x84, 0x9c, 0x0f, 0x41, 0x3e, 0x80, 0xd0, 0xb2, 0x6b, 0x74, 0x01, 0xa6, 0x38, + 0x0f, 0x13, 0x2f, 0xab, 0xa2, 0xa5, 0x7c, 0x08, 0xb3, 0xe1, 0x49, 0x4f, 0x94, 0x46, 0x90, 0x77, + 0x64, 0x22, 0x91, 0x57, 0xd9, 0xb5, 0xb2, 0x09, 0x53, 0x7c, 0x18, 0x89, 0xa0, 0x0a, 0x82, 0xfc, + 0xa1, 0xee, 0x18, 0x22, 0x38, 0xb1, 0x6b, 0x4a, 0x73, 0xc9, 0x81, 0x27, 0x42, 0x12, 0xbb, 0x56, + 0x74, 0x28, 0x87, 0x60, 0x41, 0xca, 0xc4, 0xf0, 0x3f, 0xa1, 0x8c, 0x5e, 0xb3, 0xee, 0x49, 0x47, + 0x8e, 0x9c, 0x5d, 0x53, 0x9a, 0x77, 0x6a, 0x4b, 0x78, 0x86, 0x5d, 0xd3, 0x29, 0xea, 0xe0, 0x63, + 0x01, 0x1d, 0x17, 0x55, 0xde, 0x50, 0x0c, 0x80, 0x0d, 0xdd, 0xd6, 0xf7, 0xcd, 0x8e, 0xe9, 0x9d, + 0xa2, 0x1b, 0x50, 0xd1, 0x0d, 0x43, 0x6b, 0x49, 0x8a, 0x89, 0x25, 0xa0, 0x3f, 0xa7, 0x1b, 0xc6, + 0x46, 0x80, 0x8c, 0xde, 0x81, 0x79, 0xc3, 0x21, 0x76, 0x98, 0x97, 0x23, 0xfc, 0x15, 0x7a, 0x23, + 0xc8, 0xac, 0xfc, 0x72, 0x12, 0x2e, 0x87, 0x43, 0x53, 0x14, 0x7a, 0xfd, 0x18, 0x66, 0x22, 0xbd, + 0xa6, 0xb8, 0x57, 0xdf, 0x5a, 0x35, 0x24, 0x11, 0x81, 0x22, 0xb3, 0x31, 0x28, 0x32, 0x11, 0xdc, + 0xcd, 0xbd, 0x56, 0x70, 0x37, 0xff, 0x5a, 0xc0, 0xdd, 0xc9, 0xf1, 0xc0, 0xdd, 0xb7, 0x59, 0x85, + 0x47, 0x4a, 0x33, 0x5f, 0xe3, 0xfb, 0x4b, 0xd9, 0xe7, 0xb1, 0x64, 0x25, 0x28, 0x02, 0x02, 0x4f, + 0x8f, 0x03, 0x02, 0x17, 0x52, 0x41, 0x60, 0xea, 0x35, 0xb6, 0xad, 0x3b, 0x5d, 0xe2, 0x48, 0x94, + 0xb7, 0x5a, 0x64, 0x26, 0xcc, 0x49, 0xba, 0x40, 0x78, 0x53, 0xf1, 0x60, 0x48, 0xc5, 0x83, 0x97, + 0x61, 0xc6, 0x22, 0x9a, 0x85, 0x4f, 0x34, 0xba, 0x96, 0x6e, 0xb5, 0xc4, 0x17, 0xd6, 0x22, 0x0d, + 0x7c, 0xb2, 0x43, 0x29, 0x31, 0xc4, 0x78, 0x66, 0x4c, 0xc4, 0xf8, 0x1f, 0x32, 0xb0, 0x10, 0x76, + 0x4e, 0x81, 0xee, 0x3d, 0x85, 0xa2, 0x23, 0x77, 0x50, 0xe1, 0x90, 0x37, 0x46, 0xde, 0x72, 0xd5, + 0xbe, 0x2c, 0xfa, 0x49, 0x2a, 0xa8, 0x7c, 0x7b, 0x98, 0xbe, 0x61, 0xb0, 0xb2, 0xd2, 0x82, 0x0b, + 0x2f, 0x4d, 0xcb, 0x20, 0x27, 0x6e, 0xd4, 0xfc, 0x7a, 0xdc, 0xfc, 0x77, 0x12, 0x36, 0xeb, 0x88, + 0x70, 0xd2, 0x00, 0x94, 0xbf, 0xcd, 0xc0, 0xc5, 0x54, 0xc6, 0x48, 0x4e, 0x95, 0x89, 0xe6, 0x54, + 0x22, 0x1f, 0x6b, 0x91, 0x9e, 0xe5, 0x05, 0xf2, 0xb1, 0x0d, 0x56, 0x3a, 0xe3, 0x89, 0x8f, 0xd6, + 0xd5, 0x5f, 0x99, 0xdd, 0x5e, 0x57, 0x44, 0x3f, 0xaa, 0xee, 0x05, 0xa7, 0x9c, 0x21, 0x23, 0x53, + 0xd6, 0x61, 0xde, 0xb7, 0x72, 0x20, 0xb8, 0x1d, 0x00, 0xab, 0xb3, 0x61, 0xb0, 0xda, 0x82, 0x29, + 0x11, 0xf1, 0x5f, 0x47, 0x6d, 0x6f, 0x19, 0x4a, 0x36, 0x76, 0xba, 0xa6, 0xeb, 0xfa, 0x41, 0xa7, + 0xa8, 0x06, 0x49, 0xca, 0x5f, 0x4c, 0xc3, 0x5c, 0x74, 0xfd, 0x3e, 0x8a, 0x61, 0xe3, 0x57, 0x12, + 0xc2, 0x61, 0x74, 0xa0, 0x81, 0xe3, 0xd4, 0x1d, 0x99, 0x8d, 0x67, 0xd3, 0x90, 0x2c, 0x3f, 0x73, + 0x17, 0xa9, 0x3a, 0x9d, 0x91, 0x16, 0xe9, 0x76, 0x75, 0xcb, 0x90, 0x25, 0x59, 0xd1, 0xa4, 0xf3, + 0xa7, 0x3b, 0x6d, 0x3a, 0xed, 0x94, 0xcc, 0xae, 0xe9, 0xe2, 0x9d, 0x10, 0xe7, 0xc8, 0xb4, 0x18, + 0xc6, 0xce, 0x02, 0x57, 0x51, 0x05, 0x41, 0xda, 0x34, 0x1d, 0xb4, 0x0a, 0x79, 0x6c, 0x1d, 0xcb, + 0xf3, 0x52, 0x42, 0xcd, 0x56, 0x9e, 0x0b, 0x54, 0xc6, 0x87, 0x6e, 0xc3, 0x54, 0x97, 0xba, 0x85, + 0x04, 0x80, 0x16, 0x53, 0x4a, 0x97, 0xaa, 0x60, 0xa3, 0xf9, 0x04, 0xcf, 0xa0, 0x24, 0xca, 0x93, + 0x90, 0x4f, 0x88, 0x7c, 0x49, 0x32, 0xa2, 0x2d, 0xff, 0x34, 0x58, 0x4c, 0x3b, 0xc6, 0x45, 0x96, + 0x22, 0xf1, 0x48, 0xb8, 0x1b, 0x3e, 0x12, 0x02, 0xd3, 0xb5, 0x36, 0x5c, 0xd7, 0x60, 0xb8, 0xfd, + 0x22, 0x14, 0x3a, 0xa4, 0xcd, 0xdd, 0xa8, 0xc4, 0xab, 0xfd, 0x1d, 0xd2, 0x66, 0x5e, 0xb4, 0x40, + 0x4f, 0xc7, 0x86, 0x69, 0xb1, 0x00, 0x57, 0x50, 0x79, 0x83, 0x3e, 0x7c, 0xec, 0x42, 0x23, 0x56, + 0x0b, 0x57, 0xcb, 0xec, 0x56, 0x91, 0x51, 0xb6, 0xad, 0x16, 0x3b, 0x6f, 0x79, 0xde, 0x69, 0x75, + 0x96, 0xd1, 0xe9, 0x25, 0x7a, 0x28, 0x31, 0xba, 0xb9, 0x34, 0xe0, 0x23, 0x29, 0x18, 0x4a, 0x88, + 0xee, 0x31, 0x4c, 0x9f, 0xf0, 0x40, 0x50, 0xad, 0x30, 0xf9, 0xeb, 0xc3, 0x43, 0x8a, 0xd0, 0x20, + 0x05, 0xe9, 0x91, 0xc3, 0xc2, 0x1e, 0x8d, 0xe7, 0x84, 0x46, 0xb2, 0xaa, 0xc1, 0x0f, 0x4c, 0x16, + 0xf6, 0x76, 0x04, 0xe9, 0xbb, 0x3c, 0x1e, 0xff, 0x3a, 0x03, 0x17, 0x36, 0x18, 0x74, 0x10, 0x08, + 0x75, 0xe3, 0xa0, 0xdd, 0xf7, 0xfc, 0xfa, 0x42, 0x2a, 0x34, 0x1d, 0x9d, 0x1a, 0x21, 0x80, 0xea, + 0x30, 0x2b, 0x95, 0x0b, 0x15, 0xb9, 0x91, 0x4b, 0x14, 0x65, 0x37, 0xd8, 0x54, 0x1e, 0xc2, 0x62, + 0x6c, 0x14, 0xe2, 0x98, 0xbf, 0x02, 0x33, 0xfd, 0x90, 0xe6, 0x0f, 0xa2, 0xe4, 0xd3, 0xea, 0x86, + 0x72, 0x1f, 0xce, 0x37, 0x3d, 0xdd, 0xf1, 0x62, 0x53, 0x30, 0x82, 0x2c, 0xab, 0x52, 0x84, 0x65, + 0x45, 0x21, 0xa1, 0x09, 0x0b, 0x4d, 0x8f, 0xd8, 0x67, 0x50, 0x4a, 0x03, 0x13, 0x1d, 0x3f, 0xe9, + 0xc9, 0x2d, 0x44, 0x36, 0x95, 0x45, 0x5e, 0x53, 0x89, 0xf7, 0xf6, 0x00, 0x2e, 0xf0, 0x92, 0xc6, + 0x59, 0x06, 0x71, 0x51, 0x16, 0x54, 0xe2, 0x7a, 0x5f, 0xc0, 0xb9, 0xfe, 0xf6, 0xdc, 0x87, 0x2b, + 0xef, 0x86, 0xe1, 0xca, 0xe5, 0x01, 0xab, 0x1e, 0x42, 0x2b, 0xff, 0x3a, 0x1b, 0x08, 0xfd, 0x29, + 0x60, 0xe5, 0x83, 0x30, 0x58, 0xf9, 0xd6, 0x30, 0xdd, 0x21, 0xac, 0x32, 0xee, 0xb5, 0xb9, 0x04, + 0xaf, 0xfd, 0x3c, 0x86, 0x68, 0xe6, 0xd3, 0x20, 0xe1, 0x88, 0xb5, 0xbf, 0x17, 0x40, 0x53, 0xe5, + 0x80, 0xa6, 0xdf, 0xb5, 0x5f, 0x81, 0xba, 0x17, 0x01, 0x34, 0x57, 0x86, 0xda, 0xeb, 0xe3, 0x99, + 0x7f, 0x9f, 0x87, 0xa2, 0x7f, 0x2f, 0x36, 0xe7, 0xf1, 0x69, 0xcb, 0x26, 0x4c, 0x5b, 0x70, 0x93, + 0xce, 0x7d, 0xa3, 0x4d, 0x3a, 0x3f, 0xf2, 0x26, 0x7d, 0x09, 0x8a, 0xec, 0x42, 0x73, 0xf0, 0x81, + 0xd8, 0x74, 0x0b, 0x8c, 0xa0, 0xe2, 0x83, 0xbe, 0x1b, 0x4e, 0x8d, 0xe5, 0x86, 0x11, 0x08, 0x75, + 0x3a, 0x0a, 0xa1, 0x7e, 0xe4, 0x6f, 0x9a, 0x7c, 0x9f, 0xbd, 0x36, 0x40, 0x6f, 0xe2, 0x76, 0xd9, + 0x08, 0x6f, 0x97, 0x7c, 0xeb, 0x7d, 0x77, 0x90, 0x96, 0xef, 0x2d, 0x80, 0xba, 0xc7, 0x01, 0xd4, + 0xa0, 0x2f, 0x8a, 0xc8, 0xfa, 0x00, 0xc0, 0x0f, 0x22, 0x12, 0x45, 0xbd, 0x34, 0x60, 0x8c, 0x6a, + 0x80, 0x9d, 0xaa, 0x0d, 0x2d, 0x4d, 0xbf, 0xca, 0x3a, 0x5a, 0x7c, 0x4c, 0x29, 0xb1, 0xfe, 0x77, + 0x30, 0xb5, 0x4c, 0x29, 0x4b, 0x7e, 0x14, 0x83, 0xee, 0xc7, 0xf4, 0xe2, 0xbb, 0x61, 0xe4, 0xfe, + 0x8c, 0x5e, 0x17, 0x03, 0xee, 0x59, 0x72, 0xa3, 0x3b, 0xe2, 0x36, 0x07, 0x56, 0x8b, 0x82, 0xb2, + 0xce, 0x0e, 0x0f, 0x07, 0xa6, 0x65, 0xba, 0x87, 0xfc, 0xfe, 0x14, 0x3f, 0x3c, 0x48, 0xd2, 0x3a, + 0x7b, 0xb1, 0x0f, 0xbf, 0x32, 0x3d, 0xad, 0x45, 0x0c, 0xcc, 0x7c, 0x7a, 0x52, 0x2d, 0x50, 0xc2, + 0x06, 0x31, 0x70, 0xff, 0xc9, 0x2b, 0x9c, 0xed, 0xc9, 0x2b, 0x46, 0x9e, 0xbc, 0x0b, 0x30, 0xe5, + 0x60, 0xdd, 0x25, 0x96, 0x38, 0xcd, 0x8a, 0x16, 0x5d, 0x9a, 0x2e, 0x76, 0x5d, 0xda, 0x93, 0xc8, + 0xe8, 0x44, 0x33, 0x90, 0x89, 0xce, 0x0c, 0xcd, 0x44, 0x07, 0x94, 0x3b, 0x23, 0x99, 0x68, 0x79, + 0x68, 0x26, 0x3a, 0x4a, 0xb5, 0x33, 0x90, 0x8b, 0xcf, 0x8e, 0x96, 0x8b, 0x07, 0x53, 0xd7, 0xb9, + 0x70, 0xea, 0xfa, 0x0c, 0xa6, 0x8f, 0x49, 0xa7, 0xd7, 0xc5, 0xae, 0x80, 0xae, 0x57, 0x87, 0x5b, + 0xf7, 0x09, 0x17, 0x10, 0x6f, 0x3d, 0x09, 0xf1, 0xf0, 0x99, 0x1c, 0x9f, 0xfd, 0x4c, 0xfe, 0x1d, + 0xc6, 0x8f, 0xda, 0x2e, 0xcc, 0x04, 0x07, 0x97, 0x20, 0xbb, 0x1a, 0x94, 0x4d, 0x3c, 0xd4, 0x70, + 0x05, 0xc1, 0xa8, 0x54, 0x80, 0x29, 0x4e, 0x54, 0x7e, 0x97, 0x81, 0xc5, 0x58, 0x24, 0x11, 0x11, + 0xea, 0x5e, 0xa4, 0x56, 0xbc, 0x32, 0x74, 0x21, 0xfc, 0x52, 0xf1, 0xd3, 0x50, 0xa9, 0xf8, 0xfd, + 0xe1, 0x82, 0xaf, 0xbd, 0x52, 0xfc, 0xe7, 0x19, 0x78, 0x73, 0xcf, 0x36, 0x22, 0x49, 0xad, 0x58, + 0xdb, 0xd1, 0x63, 0xe5, 0x47, 0xf2, 0x04, 0x94, 0x1d, 0xd7, 0x7f, 0xb8, 0x9c, 0xa2, 0xc0, 0x72, + 0xba, 0x19, 0x22, 0x4b, 0xfc, 0x19, 0xcc, 0x6d, 0xbd, 0xc2, 0xad, 0xe6, 0xa9, 0xd5, 0x1a, 0xc3, + 0xb4, 0x0a, 0xe4, 0x5a, 0x5d, 0x43, 0xe0, 0xa8, 0xf4, 0x32, 0x98, 0xf8, 0xe6, 0xc2, 0x89, 0xaf, + 0x06, 0x95, 0x7e, 0x0f, 0x62, 0x79, 0x2f, 0xd0, 0xe5, 0x35, 0x28, 0x33, 0x55, 0x3e, 0xa3, 0x8a, + 0x96, 0xa0, 0x63, 0xc7, 0x61, 0x63, 0xe6, 0x74, 0xec, 0x38, 0xe1, 0x00, 0x99, 0x0b, 0x07, 0x48, + 0xe5, 0x97, 0x19, 0x28, 0xd1, 0x1e, 0xbe, 0x91, 0xfd, 0xe2, 0x00, 0x9a, 0xeb, 0x1f, 0x40, 0xfd, + 0x73, 0x6c, 0x3e, 0x78, 0x8e, 0xed, 0x5b, 0x3e, 0xc9, 0xc8, 0x71, 0xcb, 0xa7, 0x7c, 0x3a, 0x76, + 0x1c, 0x65, 0x19, 0x66, 0xb8, 0x6d, 0x62, 0xe4, 0x15, 0xc8, 0xf5, 0x9c, 0x8e, 0xf4, 0xa3, 0x9e, + 0xd3, 0x51, 0xfe, 0x32, 0x03, 0xe5, 0x75, 0xcf, 0xd3, 0x5b, 0x87, 0x63, 0x0c, 0xc0, 0x37, 0x2e, + 0x1b, 0x34, 0x2e, 0x3e, 0x88, 0xbe, 0xb9, 0xf9, 0x14, 0x73, 0x27, 0x43, 0xe6, 0x2a, 0x30, 0x2b, + 0x6d, 0x49, 0x35, 0xb8, 0x01, 0x68, 0x87, 0x38, 0xde, 0x13, 0xe2, 0x9c, 0xe8, 0x8e, 0x31, 0xde, + 0xa1, 0x13, 0x41, 0x5e, 0xbc, 0xdf, 0x9e, 0xbb, 0x3e, 0xa9, 0xb2, 0x6b, 0xe5, 0x1a, 0x9c, 0x0b, + 0xe9, 0x4b, 0xed, 0xf8, 0x63, 0x28, 0xb1, 0xad, 0x4e, 0x9c, 0x3e, 0xee, 0x04, 0xab, 0xb8, 0x23, + 0x6d, 0x8c, 0xca, 0x1f, 0xc1, 0x3c, 0x4d, 0x89, 0x18, 0xdd, 0x7f, 0x14, 0x7f, 0x18, 0x49, 0xcd, + 0x2f, 0xa7, 0x28, 0x8a, 0xa4, 0xe5, 0xbf, 0xcd, 0xc2, 0x24, 0xa3, 0xc7, 0xd2, 0x94, 0x4b, 0x34, + 0xf8, 0xdb, 0x44, 0xf3, 0xf4, 0xb6, 0xff, 0x35, 0x01, 0x25, 0xec, 0xea, 0x6d, 0x86, 0x2a, 0xb0, + 0x9b, 0x86, 0xd9, 0xc6, 0xae, 0x27, 0x3f, 0x29, 0x28, 0x51, 0xda, 0x26, 0x27, 0xb1, 0x1a, 0x8b, + 0xf9, 0x27, 0x3c, 0xd5, 0xce, 0xab, 0xec, 0x1a, 0xad, 0xf2, 0x17, 0x5c, 0x47, 0x01, 0xdd, 0xd9, + 0xeb, 0xaf, 0x35, 0x28, 0x44, 0x70, 0x76, 0xbf, 0x8d, 0x1e, 0x45, 0xb7, 0xb9, 0xab, 0x29, 0x23, + 0x4e, 0xde, 0xdc, 0xbe, 0xa5, 0x8d, 0x61, 0x0b, 0x50, 0x70, 0x6d, 0x84, 0x17, 0xdc, 0x86, 0x29, + 0xb6, 0x74, 0x32, 0x4d, 0x5d, 0x4c, 0x31, 0x55, 0x15, 0x6c, 0x8a, 0x0e, 0x88, 0x2f, 0x7b, 0x28, + 0x35, 0x1d, 0xdf, 0x57, 0x06, 0xa4, 0xaa, 0xff, 0x94, 0x81, 0x73, 0xa1, 0x3e, 0x84, 0xad, 0xb7, + 0xc2, 0x9d, 0xa4, 0x9a, 0x2a, 0x3a, 0xd8, 0x08, 0x6d, 0x54, 0xb7, 0xd3, 0x4c, 0xfa, 0x96, 0x36, + 0xa9, 0xdf, 0x66, 0x00, 0xd6, 0x7b, 0xde, 0xa1, 0x40, 0x71, 0x83, 0xfe, 0x92, 0x89, 0xf8, 0x4b, + 0x0d, 0x0a, 0xb6, 0xee, 0xba, 0x27, 0xc4, 0x91, 0x87, 0x4b, 0xbf, 0xcd, 0xf0, 0xd6, 0x9e, 0x77, + 0x28, 0x4b, 0x78, 0xf4, 0x1a, 0xbd, 0x05, 0xb3, 0xfc, 0xbb, 0x1a, 0x4d, 0x37, 0x0c, 0x07, 0xbb, + 0xae, 0xa8, 0xe5, 0x95, 0x39, 0x75, 0x9d, 0x13, 0x29, 0x9b, 0x69, 0x60, 0xcb, 0x33, 0xbd, 0x53, + 0xcd, 0x23, 0x47, 0xd8, 0x12, 0x87, 0xc4, 0xb2, 0xa4, 0xee, 0x52, 0x22, 0x65, 0x73, 0x70, 0xdb, + 0x74, 0x3d, 0x47, 0xb2, 0xc9, 0xba, 0x91, 0xa0, 0x32, 0x36, 0xba, 0x28, 0x95, 0x9d, 0x5e, 0xa7, + 0xc3, 0xa7, 0xf8, 0xec, 0xcb, 0xfe, 0x9e, 0x18, 0x50, 0x36, 0xed, 0x49, 0xeb, 0x4f, 0x9a, 0x18, + 0xee, 0x6b, 0x44, 0xc3, 0xde, 0x83, 0xf9, 0xc0, 0x18, 0x84, 0x5b, 0x85, 0xb2, 0xf9, 0x4c, 0x38, + 0x9b, 0x57, 0x9e, 0x02, 0xe2, 0x00, 0xd0, 0x37, 0x1c, 0xb7, 0x72, 0x1e, 0xce, 0x85, 0x14, 0x89, + 0xfc, 0xe0, 0x26, 0x94, 0xc5, 0x4b, 0x94, 0xc2, 0x51, 0x2e, 0x42, 0x81, 0xc6, 0xf9, 0x96, 0x69, + 0xc8, 0xfa, 0xee, 0xb4, 0x4d, 0x8c, 0x0d, 0xd3, 0x70, 0x94, 0x97, 0x50, 0x56, 0x79, 0x3f, 0x82, + 0xf7, 0x09, 0xcc, 0x8a, 0x57, 0x2e, 0xb5, 0xd0, 0xab, 0xcc, 0x49, 0x9f, 0xca, 0x04, 0x3b, 0x51, + 0xcb, 0x56, 0xb0, 0xa9, 0x18, 0x50, 0xe3, 0x89, 0x4c, 0x48, 0xbd, 0x1c, 0xec, 0x13, 0x90, 0x1f, + 0x89, 0x0d, 0xed, 0x25, 0x2c, 0x5f, 0x76, 0x82, 0x4d, 0xe5, 0x32, 0x5c, 0x4a, 0xec, 0x45, 0xcc, + 0x84, 0x0d, 0x95, 0xfe, 0x0d, 0xc3, 0x94, 0x85, 0x6e, 0x56, 0xc0, 0xce, 0x04, 0x0a, 0xd8, 0x17, + 0xfc, 0xd4, 0x35, 0x2b, 0xb7, 0x56, 0x96, 0x97, 0xf6, 0xcf, 0x5d, 0xb9, 0xb4, 0x73, 0x57, 0x3e, + 0x74, 0xee, 0x52, 0x9a, 0xfe, 0x7c, 0x8a, 0xf3, 0xf0, 0x63, 0x76, 0x6e, 0xe7, 0x7d, 0xcb, 0x80, + 0xa8, 0x0c, 0x1a, 0x25, 0x67, 0x55, 0x03, 0x52, 0xca, 0x0d, 0x28, 0x87, 0x43, 0x63, 0x20, 0xce, + 0x65, 0x62, 0x71, 0x6e, 0x36, 0x12, 0xe2, 0x3e, 0x88, 0xe4, 0xe5, 0xe9, 0x73, 0x1c, 0xc9, 0xca, + 0x1f, 0x85, 0x82, 0xdd, 0xcd, 0x84, 0xda, 0xf3, 0xb7, 0x14, 0xe7, 0x16, 0xc4, 0x7e, 0xf0, 0xc4, + 0xa5, 0xf2, 0x62, 0xd0, 0xca, 0x15, 0x28, 0xed, 0xa5, 0x7d, 0x87, 0x95, 0x97, 0x2f, 0x77, 0xdd, + 0x85, 0x85, 0x27, 0x66, 0x07, 0xbb, 0xa7, 0xae, 0x87, 0xbb, 0x75, 0x16, 0x94, 0x0e, 0x4c, 0xec, + 0xa0, 0x25, 0x00, 0x76, 0x96, 0xb4, 0x89, 0xe9, 0x7f, 0x9e, 0x13, 0xa0, 0x28, 0xff, 0x93, 0x81, + 0xb9, 0xbe, 0xe0, 0x1e, 0x3b, 0x43, 0xbf, 0x01, 0x45, 0x3a, 0x5e, 0xd7, 0xd3, 0xbb, 0xb6, 0xac, + 0x3d, 0xfa, 0x04, 0xf4, 0x00, 0x26, 0x0f, 0x5c, 0x89, 0xdd, 0x25, 0x16, 0x3b, 0x92, 0x0c, 0x51, + 0xf3, 0x07, 0x6e, 0xdd, 0x40, 0x0f, 0x01, 0x7a, 0x2e, 0x36, 0x44, 0xbd, 0x31, 0x97, 0x96, 0xc3, + 0xec, 0x05, 0xeb, 0xf2, 0x54, 0x80, 0xbf, 0x17, 0xf6, 0x08, 0x4a, 0xa6, 0x45, 0x0c, 0xcc, 0xea, + 0xf2, 0x86, 0x80, 0xf7, 0x86, 0x88, 0x03, 0x97, 0xd8, 0x73, 0xb1, 0xa1, 0x60, 0xb1, 0x17, 0xca, + 0xf9, 0x15, 0x8e, 0xd2, 0x80, 0x79, 0x1e, 0xb4, 0x0e, 0x7c, 0xc3, 0xa5, 0xc7, 0xae, 0x0c, 0x1a, + 0x1d, 0x9b, 0x2d, 0xb5, 0x62, 0x8a, 0x84, 0x4b, 0x8a, 0x2a, 0xf7, 0xe1, 0x7c, 0xe8, 0xdc, 0x36, + 0xc6, 0x41, 0x4a, 0xd9, 0x89, 0x20, 0x56, 0x7d, 0x77, 0x16, 0x78, 0x90, 0xf4, 0xe6, 0x61, 0x78, + 0x90, 0xcb, 0xf1, 0x20, 0x57, 0xf9, 0x1c, 0x2e, 0x86, 0xa0, 0xb5, 0x90, 0x45, 0x8f, 0x22, 0xf9, + 0xe4, 0xdb, 0xc3, 0xb4, 0x46, 0x12, 0xcb, 0xff, 0xcb, 0xc0, 0x42, 0x12, 0xc3, 0x19, 0xa1, 0xdf, + 0x9f, 0xa5, 0xbc, 0x03, 0x7c, 0x6f, 0x34, 0xb3, 0x7e, 0x2f, 0xb0, 0xf9, 0x2e, 0xd4, 0x92, 0xe6, + 0x33, 0xbe, 0x4a, 0xb9, 0x71, 0x56, 0xe9, 0x17, 0xb9, 0x40, 0x09, 0x64, 0xdd, 0xf3, 0x1c, 0x73, + 0xbf, 0x47, 0x5d, 0xfe, 0xb5, 0xc3, 0x8a, 0x75, 0x1f, 0x20, 0xe3, 0x53, 0x7b, 0x67, 0x80, 0x78, + 0xdf, 0x8e, 0x44, 0x90, 0xec, 0xd3, 0x30, 0x48, 0xc6, 0x8b, 0x1b, 0x77, 0x47, 0xd3, 0xf7, 0xbd, + 0x45, 0xa2, 0x7f, 0x91, 0x85, 0xd9, 0xf0, 0x12, 0xa1, 0x2d, 0x00, 0xdd, 0xb7, 0x5c, 0x3c, 0x28, + 0x6f, 0x8d, 0x34, 0x4c, 0x35, 0x20, 0x88, 0xde, 0x85, 0x5c, 0xcb, 0xee, 0x89, 0x55, 0x4b, 0x28, + 0xdc, 0x6f, 0xd8, 0x3d, 0x1e, 0x51, 0x28, 0x1b, 0x3d, 0xe9, 0x89, 0xd7, 0x0d, 0x53, 0xa3, 0x24, + 0x7f, 0xf5, 0x90, 0xcb, 0x08, 0x66, 0xf4, 0x0c, 0x66, 0x4f, 0x1c, 0xd3, 0xd3, 0xf7, 0x3b, 0x58, + 0xeb, 0xe8, 0xa7, 0xd8, 0x11, 0x51, 0x72, 0x84, 0x40, 0x56, 0x96, 0x82, 0xcf, 0xa9, 0x9c, 0xf2, + 0xa7, 0x50, 0x90, 0x16, 0x0d, 0xd9, 0x11, 0x76, 0x61, 0xb1, 0x47, 0xd9, 0x34, 0xf6, 0xbe, 0xae, + 0xa5, 0x5b, 0x44, 0x73, 0x31, 0xdd, 0xc6, 0xe5, 0x97, 0x44, 0x43, 0x42, 0xf4, 0x02, 0x93, 0xde, + 0x20, 0x0e, 0x6e, 0xe8, 0x16, 0x69, 0x72, 0x51, 0xe5, 0x18, 0x4a, 0x81, 0x01, 0x0e, 0x31, 0xa1, + 0x0e, 0xf3, 0xf2, 0xb5, 0x09, 0x17, 0x7b, 0x62, 0x7b, 0x19, 0xa9, 0xf3, 0x39, 0x21, 0xd7, 0xc4, + 0x1e, 0x7f, 0xd5, 0xe5, 0x11, 0x5c, 0x54, 0x31, 0xb1, 0xb1, 0xe5, 0xaf, 0xe7, 0x73, 0xd2, 0x1e, + 0x23, 0x82, 0xbf, 0x01, 0xb5, 0x24, 0x79, 0x1e, 0x1f, 0x6e, 0xbe, 0x01, 0x05, 0xf9, 0x51, 0x3d, + 0x9a, 0x86, 0xdc, 0xee, 0xc6, 0x4e, 0x65, 0x82, 0x5e, 0xec, 0x6d, 0xee, 0x54, 0x32, 0x37, 0xbb, + 0x50, 0x89, 0x7e, 0x47, 0x8e, 0x16, 0xe1, 0xdc, 0x8e, 0xba, 0xbd, 0xb3, 0xfe, 0x74, 0x7d, 0xb7, + 0xbe, 0xdd, 0xd0, 0x76, 0xd4, 0xfa, 0x27, 0xeb, 0xbb, 0x5b, 0x95, 0x09, 0xb4, 0x02, 0x97, 0x83, + 0x37, 0x9e, 0x6d, 0x37, 0x77, 0xb5, 0xdd, 0x6d, 0x6d, 0x63, 0xbb, 0xb1, 0xbb, 0x5e, 0x6f, 0x6c, + 0xa9, 0x95, 0x0c, 0xba, 0x0c, 0x17, 0x83, 0x2c, 0x8f, 0xeb, 0x9b, 0x75, 0x75, 0x6b, 0x83, 0x5e, + 0xaf, 0x3f, 0xaf, 0x64, 0x6f, 0xde, 0x81, 0x72, 0xe8, 0xb3, 0x6f, 0x6a, 0xc8, 0xce, 0xf6, 0x66, + 0x65, 0x02, 0x95, 0xa1, 0x18, 0xd4, 0x53, 0x80, 0x7c, 0x63, 0x7b, 0x73, 0xab, 0x92, 0xbd, 0x79, + 0x1f, 0xe6, 0x22, 0x1f, 0x0c, 0xa0, 0x79, 0x28, 0x37, 0xd7, 0x1b, 0x9b, 0x8f, 0xb7, 0x3f, 0xd5, + 0xd4, 0xad, 0xf5, 0xcd, 0xcf, 0x2a, 0x13, 0x68, 0x01, 0x2a, 0x92, 0xd4, 0xd8, 0xde, 0xe5, 0xd4, + 0xcc, 0xcd, 0xa3, 0xc8, 0x93, 0x85, 0xd1, 0x79, 0x98, 0xf7, 0xbb, 0xd1, 0x36, 0xd4, 0xad, 0xf5, + 0xdd, 0x2d, 0xda, 0x7b, 0x88, 0xac, 0xee, 0x35, 0x1a, 0xf5, 0xc6, 0xd3, 0x4a, 0x86, 0x6a, 0xed, + 0x93, 0xb7, 0x3e, 0xad, 0x53, 0xe6, 0x6c, 0x98, 0x79, 0xaf, 0xf1, 0xe3, 0xc6, 0xf6, 0xcb, 0x46, + 0x25, 0xb7, 0xf6, 0x8f, 0xf3, 0x30, 0x2b, 0xd3, 0x3b, 0xec, 0xb0, 0xf7, 0x8e, 0x76, 0x60, 0x5a, + 0xfe, 0x35, 0x43, 0x42, 0x5c, 0x0e, 0xff, 0xa1, 0x44, 0x6d, 0x65, 0x00, 0x87, 0xc8, 0xb2, 0x27, + 0xd0, 0x3e, 0xcb, 0x7a, 0x03, 0x1f, 0x70, 0xbc, 0x9d, 0x98, 0x63, 0xc6, 0xbe, 0x19, 0xa9, 0x5d, + 0x1b, 0xca, 0xe7, 0xf7, 0x81, 0x69, 0x62, 0x1b, 0xfc, 0x42, 0x11, 0x5d, 0x4b, 0xca, 0x48, 0x13, + 0x3e, 0x81, 0xac, 0x5d, 0x1f, 0xce, 0xe8, 0x77, 0x73, 0x04, 0x95, 0xe8, 0xd7, 0x8a, 0x28, 0x01, + 0xc6, 0x4d, 0xf9, 0x24, 0xb2, 0x76, 0x73, 0x14, 0xd6, 0x60, 0x67, 0xb1, 0xef, 0xfa, 0x6e, 0x8c, + 0xf2, 0xa1, 0x54, 0x6a, 0x67, 0x69, 0xdf, 0x54, 0xf1, 0x09, 0x0c, 0x7f, 0x9c, 0x81, 0x12, 0x3f, + 0xa2, 0x4b, 0xf8, 0xb4, 0x27, 0x69, 0x02, 0x93, 0xbf, 0xf3, 0x50, 0x26, 0xd0, 0x21, 0xcc, 0x45, + 0xde, 0x0e, 0x41, 0x09, 0xe2, 0xc9, 0xaf, 0xc1, 0xd4, 0x6e, 0x8c, 0xc0, 0x19, 0xf6, 0x88, 0xe0, + 0xdb, 0x20, 0xc9, 0x1e, 0x91, 0xf0, 0xae, 0x49, 0xb2, 0x47, 0x24, 0xbe, 0x58, 0xc2, 0x9c, 0x3b, + 0xf4, 0x16, 0x48, 0x92, 0x73, 0x27, 0xbd, 0x7b, 0x52, 0xbb, 0x36, 0x94, 0x2f, 0x38, 0x69, 0x91, + 0x77, 0x42, 0x92, 0x26, 0x2d, 0xf9, 0x9d, 0x93, 0xda, 0x8d, 0x11, 0x38, 0xa3, 0x5e, 0xd0, 0xaf, + 0x30, 0xa7, 0x79, 0x41, 0xec, 0x7d, 0x88, 0x34, 0x2f, 0x88, 0x17, 0xab, 0x85, 0x17, 0x44, 0x2a, + 0xc3, 0xd7, 0x47, 0x28, 0xeb, 0xa4, 0x7b, 0x41, 0x72, 0x01, 0x48, 0x99, 0x40, 0x7f, 0x96, 0x81, + 0x6a, 0x5a, 0xc9, 0x04, 0x25, 0x64, 0x75, 0x43, 0xaa, 0x3c, 0xb5, 0xb5, 0x71, 0x44, 0x7c, 0x2b, + 0xbe, 0x04, 0x14, 0xdf, 0xed, 0xd0, 0x3b, 0x49, 0x2b, 0x93, 0xb2, 0xa7, 0xd6, 0xde, 0x1d, 0x8d, + 0xd9, 0xef, 0xb2, 0x09, 0x05, 0x59, 0xa4, 0x41, 0x09, 0x51, 0x3a, 0x52, 0x22, 0xaa, 0x29, 0x83, + 0x58, 0x7c, 0xa5, 0x4f, 0x21, 0x4f, 0xa9, 0xe8, 0x72, 0x32, 0xb7, 0x54, 0xb6, 0x94, 0x76, 0xdb, + 0x57, 0xf4, 0x02, 0xa6, 0x78, 0x55, 0x02, 0x25, 0xe0, 0x0d, 0xa1, 0xda, 0x49, 0x6d, 0x39, 0x9d, + 0xc1, 0x57, 0xf7, 0x53, 0xfe, 0xaf, 0x3d, 0xa2, 0xe0, 0x80, 0xae, 0x26, 0xff, 0x0d, 0x42, 0xb8, + 0xbe, 0x51, 0x7b, 0x6b, 0x08, 0x57, 0xf0, 0xa1, 0x88, 0xe4, 0xba, 0xd7, 0x86, 0x1e, 0x58, 0xd2, + 0x1f, 0x8a, 0xe4, 0x23, 0x11, 0x77, 0x92, 0xf8, 0x91, 0x29, 0xc9, 0x49, 0x52, 0x0f, 0xaa, 0x49, + 0x4e, 0x92, 0x7e, 0x0a, 0x53, 0x26, 0x90, 0x07, 0xe7, 0x12, 0x00, 0x32, 0xf4, 0x6e, 0x9a, 0x93, + 0x27, 0xa1, 0x75, 0xb5, 0x5b, 0x23, 0x72, 0x07, 0x17, 0x5f, 0x3c, 0xf4, 0x6f, 0xa6, 0xa3, 0x46, + 0xa9, 0x8b, 0x1f, 0x7d, 0xc4, 0xd7, 0xfe, 0x23, 0x07, 0x33, 0x1c, 0xfc, 0x14, 0x19, 0xcc, 0x67, + 0x00, 0xfd, 0xba, 0x03, 0xba, 0x92, 0x3c, 0x27, 0xa1, 0x8a, 0x51, 0xed, 0xea, 0x60, 0xa6, 0xa0, + 0xa3, 0x05, 0x30, 0x7c, 0x74, 0x75, 0x08, 0xc4, 0x9f, 0xea, 0x68, 0x09, 0x85, 0x00, 0x65, 0x02, + 0x7d, 0x02, 0x45, 0x1f, 0x2c, 0x46, 0x49, 0x60, 0x73, 0x04, 0x0d, 0xaf, 0x5d, 0x19, 0xc8, 0x13, + 0xb4, 0x3a, 0x80, 0x04, 0x27, 0x59, 0x1d, 0x47, 0x9c, 0x93, 0xac, 0x4e, 0x82, 0x93, 0xfb, 0x73, + 0xc2, 0xf1, 0xa2, 0xd4, 0x39, 0x09, 0xc1, 0x75, 0xa9, 0x73, 0x12, 0x06, 0x9d, 0x94, 0x89, 0xc7, + 0x6f, 0xff, 0xe6, 0xab, 0xa5, 0xcc, 0xbf, 0x7e, 0xb5, 0x34, 0xf1, 0xf3, 0xaf, 0x97, 0x32, 0xbf, + 0xf9, 0x7a, 0x29, 0xf3, 0x2f, 0x5f, 0x2f, 0x65, 0xfe, 0xf3, 0xeb, 0xa5, 0xcc, 0x5f, 0xfd, 0xd7, + 0xd2, 0xc4, 0x4f, 0x0a, 0x52, 0x7a, 0x7f, 0x8a, 0xfd, 0xf7, 0xd6, 0xfb, 0xff, 0x1f, 0x00, 0x00, + 0xff, 0xff, 0xd7, 0x63, 0x0a, 0xee, 0x41, 0x4d, 0x00, 0x00, } diff --git a/cri/apis/v1alpha2/api.proto b/cri/apis/v1alpha2/api.proto new file mode 100644 index 0000000000..6bdab2811c --- /dev/null +++ b/cri/apis/v1alpha2/api.proto @@ -0,0 +1,1281 @@ +// To regenerate api.pb.go run hack/protoc.sh +syntax = 'proto3'; + +package runtime.v1alpha2; +option go_package = "v1alpha2"; + +import "github.com/gogo/protobuf/gogoproto/gogo.proto"; + +option (gogoproto.goproto_stringer_all) = false; +option (gogoproto.stringer_all) = true; +option (gogoproto.goproto_getters_all) = true; +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_unrecognized_all) = false; + +// Runtime service defines the public APIs for remote container runtimes +service RuntimeService { + // Version returns the runtime name, runtime version, and runtime API version. + rpc Version(VersionRequest) returns (VersionResponse) {} + + // RunPodSandbox creates and starts a pod-level sandbox. Runtimes must ensure + // the sandbox is in the ready state on success. + rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} + // StopPodSandbox stops any running process that is part of the sandbox and + // reclaims network resources (e.g., IP addresses) allocated to the sandbox. + // If there are any running containers in the sandbox, they must be forcibly + // terminated. + // This call is idempotent, and must not return an error if all relevant + // resources have already been reclaimed. kubelet will call StopPodSandbox + // at least once before calling RemovePodSandbox. It will also attempt to + // reclaim resources eagerly, as soon as a sandbox is not needed. Hence, + // multiple StopPodSandbox calls are expected. + rpc StopPodSandbox(StopPodSandboxRequest) returns (StopPodSandboxResponse) {} + // RemovePodSandbox removes the sandbox. If there are any running containers + // in the sandbox, they must be forcibly terminated and removed. + // This call is idempotent, and must not return an error if the sandbox has + // already been removed. + rpc RemovePodSandbox(RemovePodSandboxRequest) returns (RemovePodSandboxResponse) {} + // PodSandboxStatus returns the status of the PodSandbox. If the PodSandbox is not + // present, returns an error. + rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) {} + // ListPodSandbox returns a list of PodSandboxes. + rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} + + // CreateContainer creates a new container in specified PodSandbox + rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {} + // StartContainer starts the container. + rpc StartContainer(StartContainerRequest) returns (StartContainerResponse) {} + // StopContainer stops a running container with a grace period (i.e., timeout). + // This call is idempotent, and must not return an error if the container has + // already been stopped. + // TODO: what must the runtime do after the grace period is reached? + rpc StopContainer(StopContainerRequest) returns (StopContainerResponse) {} + // RemoveContainer removes the container. If the container is running, the + // container must be forcibly removed. + // This call is idempotent, and must not return an error if the container has + // already been removed. + rpc RemoveContainer(RemoveContainerRequest) returns (RemoveContainerResponse) {} + // ListContainers lists all containers by filters. + rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} + // ContainerStatus returns status of the container. If the container is not + // present, returns an error. + rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} + // UpdateContainerResources updates ContainerConfig of the container. + rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateContainerResourcesResponse) {} + // ReopenContainerLog asks runtime to reopen the stdout/stderr log file + // for the container. This is often called after the log file has been + // rotated. If the container is not running, container runtime can choose + // to either create a new log file and return nil, or return an error. + // Once it returns error, new container log file MUST NOT be created. + rpc ReopenContainerLog(ReopenContainerLogRequest) returns (ReopenContainerLogResponse) {} + + // ExecSync runs a command in a container synchronously. + rpc ExecSync(ExecSyncRequest) returns (ExecSyncResponse) {} + // Exec prepares a streaming endpoint to execute a command in the container. + rpc Exec(ExecRequest) returns (ExecResponse) {} + // Attach prepares a streaming endpoint to attach to a running container. + rpc Attach(AttachRequest) returns (AttachResponse) {} + // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. + rpc PortForward(PortForwardRequest) returns (PortForwardResponse) {} + + // ContainerStats returns stats of the container. If the container does not + // exist, the call returns an error. + rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} + // ListContainerStats returns stats of all running containers. + rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} + + // UpdateRuntimeConfig updates the runtime configuration based on the given request. + rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse) {} + + // Status returns the status of the runtime. + rpc Status(StatusRequest) returns (StatusResponse) {} +} + +// ImageService defines the public APIs for managing images. +service ImageService { + // ListImages lists existing images. + rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} + // ImageStatus returns the status of the image. If the image is not + // present, returns a response with ImageStatusResponse.Image set to + // nil. + rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} + // PullImage pulls an image with authentication config. + rpc PullImage(PullImageRequest) returns (PullImageResponse) {} + // RemoveImage removes the image. + // This call is idempotent, and must not return an error if the image has + // already been removed. + rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} + // ImageFSInfo returns information of the filesystem that is used to store images. + rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} +} + +message VersionRequest { + // Version of the kubelet runtime API. + string version = 1; +} + +message VersionResponse { + // Version of the kubelet runtime API. + string version = 1; + // Name of the container runtime. + string runtime_name = 2; + // Version of the container runtime. The string must be + // semver-compatible. + string runtime_version = 3; + // API version of the container runtime. The string must be + // semver-compatible. + string runtime_api_version = 4; +} + +// DNSConfig specifies the DNS servers and search domains of a sandbox. +message DNSConfig { + // List of DNS servers of the cluster. + repeated string servers = 1; + // List of DNS search domains of the cluster. + repeated string searches = 2; + // List of DNS options. See https://linux.die.net/man/5/resolv.conf + // for all available options. + repeated string options = 3; +} + +enum Protocol { + TCP = 0; + UDP = 1; +} + +// PortMapping specifies the port mapping configurations of a sandbox. +message PortMapping { + // Protocol of the port mapping. + Protocol protocol = 1; + // Port number within the container. Default: 0 (not specified). + int32 container_port = 2; + // Port number on the host. Default: 0 (not specified). + int32 host_port = 3; + // Host IP. + string host_ip = 4; +} + +enum MountPropagation { + // No mount propagation ("private" in Linux terminology). + PROPAGATION_PRIVATE = 0; + // Mounts get propagated from the host to the container ("rslave" in Linux). + PROPAGATION_HOST_TO_CONTAINER = 1; + // Mounts get propagated from the host to the container and from the + // container to the host ("rshared" in Linux). + PROPAGATION_BIDIRECTIONAL = 2; +} + +// Mount specifies a host volume to mount into a container. +message Mount { + // Path of the mount within the container. + string container_path = 1; + // Path of the mount on the host. If the hostPath doesn't exist, then runtimes + // should report error. If the hostpath is a symbolic link, runtimes should + // follow the symlink and mount the real destination to container. + string host_path = 2; + // If set, the mount is read-only. + bool readonly = 3; + // If set, the mount needs SELinux relabeling. + bool selinux_relabel = 4; + // Requested propagation mode. + MountPropagation propagation = 5; +} + +// A NamespaceMode describes the intended namespace configuration for each +// of the namespaces (Network, PID, IPC) in NamespaceOption. Runtimes should +// map these modes as appropriate for the technology underlying the runtime. +enum NamespaceMode { + // A POD namespace is common to all containers in a pod. + // For example, a container with a PID namespace of POD expects to view + // all of the processes in all of the containers in the pod. + POD = 0; + // A CONTAINER namespace is restricted to a single container. + // For example, a container with a PID namespace of CONTAINER expects to + // view only the processes in that container. + CONTAINER = 1; + // A NODE namespace is the namespace of the Kubernetes node. + // For example, a container with a PID namespace of NODE expects to view + // all of the processes on the host running the kubelet. + NODE = 2; +} + +// NamespaceOption provides options for Linux namespaces. +message NamespaceOption { + // Network namespace for this container/sandbox. + // Note: There is currently no way to set CONTAINER scoped network in the Kubernetes API. + // Namespaces currently set by the kubelet: POD, NODE + NamespaceMode network = 1; + // PID namespace for this container/sandbox. + // Note: The CRI default is POD, but the v1.PodSpec default is CONTAINER. + // The kubelet's runtime manager will set this to CONTAINER explicitly for v1 pods. + // Namespaces currently set by the kubelet: POD, CONTAINER, NODE + NamespaceMode pid = 2; + // IPC namespace for this container/sandbox. + // Note: There is currently no way to set CONTAINER scoped IPC in the Kubernetes API. + // Namespaces currently set by the kubelet: POD, NODE + NamespaceMode ipc = 3; +} + +// Int64Value is the wrapper of int64. +message Int64Value { + // The value. + int64 value = 1; +} + +// LinuxSandboxSecurityContext holds linux security configuration that will be +// applied to a sandbox. Note that: +// 1) It does not apply to containers in the pods. +// 2) It may not be applicable to a PodSandbox which does not contain any running +// process. +message LinuxSandboxSecurityContext { + // Configurations for the sandbox's namespaces. + // This will be used only if the PodSandbox uses namespace for isolation. + NamespaceOption namespace_options = 1; + // Optional SELinux context to be applied. + SELinuxOption selinux_options = 2; + // UID to run sandbox processes as, when applicable. + Int64Value run_as_user = 3; + // GID to run sandbox processes as, when applicable. run_as_group should only + // be specified when run_as_user is specified; otherwise, the runtime MUST error. + Int64Value run_as_group = 8; + // If set, the root filesystem of the sandbox is read-only. + bool readonly_rootfs = 4; + // List of groups applied to the first process run in the sandbox, in + // addition to the sandbox's primary GID. + repeated int64 supplemental_groups = 5; + // Indicates whether the sandbox will be asked to run a privileged + // container. If a privileged container is to be executed within it, this + // MUST be true. + // This allows a sandbox to take additional security precautions if no + // privileged containers are expected to be run. + bool privileged = 6; + // Seccomp profile for the sandbox, candidate values are: + // * runtime/default: the default profile for the container runtime + // * unconfined: unconfined profile, ie, no seccomp sandboxing + // * localhost/: the profile installed on the node. + // is the full path of the profile. + // Default: "", which is identical with unconfined. + string seccomp_profile_path = 7; +} + +// LinuxPodSandboxConfig holds platform-specific configurations for Linux +// host platforms and Linux-based containers. +message LinuxPodSandboxConfig { + // Parent cgroup of the PodSandbox. + // The cgroupfs style syntax will be used, but the container runtime can + // convert it to systemd semantics if needed. + string cgroup_parent = 1; + // LinuxSandboxSecurityContext holds sandbox security attributes. + LinuxSandboxSecurityContext security_context = 2; + // Sysctls holds linux sysctls config for the sandbox. + map sysctls = 3; +} + +// PodSandboxMetadata holds all necessary information for building the sandbox name. +// The container runtime is encouraged to expose the metadata associated with the +// PodSandbox in its user interface for better user experience. For example, +// the runtime can construct a unique PodSandboxName based on the metadata. +message PodSandboxMetadata { + // Pod name of the sandbox. Same as the pod name in the PodSpec. + string name = 1; + // Pod UID of the sandbox. Same as the pod UID in the PodSpec. + string uid = 2; + // Pod namespace of the sandbox. Same as the pod namespace in the PodSpec. + string namespace = 3; + // Attempt number of creating the sandbox. Default: 0. + uint32 attempt = 4; +} + +// PodSandboxConfig holds all the required and optional fields for creating a +// sandbox. +message PodSandboxConfig { + // Metadata of the sandbox. This information will uniquely identify the + // sandbox, and the runtime should leverage this to ensure correct + // operation. The runtime may also use this information to improve UX, such + // as by constructing a readable name. + PodSandboxMetadata metadata = 1; + // Hostname of the sandbox. + string hostname = 2; + // Path to the directory on the host in which container log files are + // stored. + // By default the log of a container going into the LogDirectory will be + // hooked up to STDOUT and STDERR. However, the LogDirectory may contain + // binary log files with structured logging data from the individual + // containers. For example, the files might be newline separated JSON + // structured logs, systemd-journald journal files, gRPC trace files, etc. + // E.g., + // PodSandboxConfig.LogDirectory = `/var/log/pods//` + // ContainerConfig.LogPath = `containerName/Instance#.log` + // + // WARNING: Log management and how kubelet should interface with the + // container logs are under active discussion in + // https://issues.k8s.io/24677. There *may* be future change of direction + // for logging as the discussion carries on. + string log_directory = 3; + // DNS config for the sandbox. + DNSConfig dns_config = 4; + // Port mappings for the sandbox. + repeated PortMapping port_mappings = 5; + // Key-value pairs that may be used to scope and select individual resources. + map labels = 6; + // Unstructured key-value map that may be set by the kubelet to store and + // retrieve arbitrary metadata. This will include any annotations set on a + // pod through the Kubernetes API. + // + // Annotations MUST NOT be altered by the runtime; the annotations stored + // here MUST be returned in the PodSandboxStatus associated with the pod + // this PodSandboxConfig creates. + // + // In general, in order to preserve a well-defined interface between the + // kubelet and the container runtime, annotations SHOULD NOT influence + // runtime behaviour. + // + // Annotations can also be useful for runtime authors to experiment with + // new features that are opaque to the Kubernetes APIs (both user-facing + // and the CRI). Whenever possible, however, runtime authors SHOULD + // consider proposing new typed fields for any new features instead. + map annotations = 7; + // Optional configurations specific to Linux hosts. + LinuxPodSandboxConfig linux = 8; +} + +message RunPodSandboxRequest { + // Configuration for creating a PodSandbox. + PodSandboxConfig config = 1; +} + +message RunPodSandboxResponse { + // ID of the PodSandbox to run. + string pod_sandbox_id = 1; +} + +message StopPodSandboxRequest { + // ID of the PodSandbox to stop. + string pod_sandbox_id = 1; +} + +message StopPodSandboxResponse {} + +message RemovePodSandboxRequest { + // ID of the PodSandbox to remove. + string pod_sandbox_id = 1; +} + +message RemovePodSandboxResponse {} + +message PodSandboxStatusRequest { + // ID of the PodSandbox for which to retrieve status. + string pod_sandbox_id = 1; + // Verbose indicates whether to return extra information about the pod sandbox. + bool verbose = 2; +} + +// PodSandboxNetworkStatus is the status of the network for a PodSandbox. +message PodSandboxNetworkStatus { + // IP address of the PodSandbox. + string ip = 1; +} + +// Namespace contains paths to the namespaces. +message Namespace { + // Namespace options for Linux namespaces. + NamespaceOption options = 2; +} + +// LinuxSandboxStatus contains status specific to Linux sandboxes. +message LinuxPodSandboxStatus { + // Paths to the sandbox's namespaces. + Namespace namespaces = 1; +} + +enum PodSandboxState { + SANDBOX_READY = 0; + SANDBOX_NOTREADY = 1; +} + +// PodSandboxStatus contains the status of the PodSandbox. +message PodSandboxStatus { + // ID of the sandbox. + string id = 1; + // Metadata of the sandbox. + PodSandboxMetadata metadata = 2; + // State of the sandbox. + PodSandboxState state = 3; + // Creation timestamp of the sandbox in nanoseconds. Must be > 0. + int64 created_at = 4; + // Network contains network status if network is handled by the runtime. + PodSandboxNetworkStatus network = 5; + // Linux-specific status to a pod sandbox. + LinuxPodSandboxStatus linux = 6; + // Labels are key-value pairs that may be used to scope and select individual resources. + map labels = 7; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding PodSandboxConfig used to + // instantiate the pod sandbox this status represents. + map annotations = 8; +} + +message PodSandboxStatusResponse { + // Status of the PodSandbox. + PodSandboxStatus status = 1; + // Info is extra information of the PodSandbox. The key could be arbitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. network namespace for linux container based container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; +} + +// PodSandboxStateValue is the wrapper of PodSandboxState. +message PodSandboxStateValue { + // State of the sandbox. + PodSandboxState state = 1; +} + +// PodSandboxFilter is used to filter a list of PodSandboxes. +// All those fields are combined with 'AND' +message PodSandboxFilter { + // ID of the sandbox. + string id = 1; + // State of the sandbox. + PodSandboxStateValue state = 2; + // LabelSelector to select matches. + // Only api.MatchLabels is supported for now and the requirements + // are ANDed. MatchExpressions is not supported yet. + map label_selector = 3; +} + +message ListPodSandboxRequest { + // PodSandboxFilter to filter a list of PodSandboxes. + PodSandboxFilter filter = 1; +} + + +// PodSandbox contains minimal information about a sandbox. +message PodSandbox { + // ID of the PodSandbox. + string id = 1; + // Metadata of the PodSandbox. + PodSandboxMetadata metadata = 2; + // State of the PodSandbox. + PodSandboxState state = 3; + // Creation timestamps of the PodSandbox in nanoseconds. Must be > 0. + int64 created_at = 4; + // Labels of the PodSandbox. + map labels = 5; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding PodSandboxConfig used to + // instantiate this PodSandbox. + map annotations = 6; +} + +message ListPodSandboxResponse { + // List of PodSandboxes. + repeated PodSandbox items = 1; +} + +// ImageSpec is an internal representation of an image. Currently, it wraps the +// value of a Container's Image field (e.g. imageID or imageDigest), but in the +// future it will include more detailed information about the different image types. +message ImageSpec { + string image = 1; +} + +message KeyValue { + string key = 1; + string value = 2; +} + +// LinuxContainerResources specifies Linux specific configuration for +// resources. +// TODO: Consider using Resources from opencontainers/runtime-spec/specs-go +// directly. +message LinuxContainerResources { + // CPU CFS (Completely Fair Scheduler) period. Default: 0 (not specified). + int64 cpu_period = 1; + // CPU CFS (Completely Fair Scheduler) quota. Default: 0 (not specified). + int64 cpu_quota = 2; + // CPU shares (relative weight vs. other containers). Default: 0 (not specified). + int64 cpu_shares = 3; + // Memory limit in bytes. Default: 0 (not specified). + int64 memory_limit_in_bytes = 4; + // OOMScoreAdj adjusts the oom-killer score. Default: 0 (not specified). + int64 oom_score_adj = 5; + // CpusetCpus constrains the allowed set of logical CPUs. Default: "" (not specified). + string cpuset_cpus = 6; + // CpusetMems constrains the allowed set of memory nodes. Default: "" (not specified). + string cpuset_mems = 7; + // DiskQuota constrains the disk + map disk_quota = 100; + // Block IO weight (relative weight vs. other containers) + uint32 blkio_weight = 101; + repeated WeightDevice blkio_weight_device = 102; + repeated ThrottleDevice blkio_device_read_bps = 103; + repeated ThrottleDevice blkio_device_write_bps = 104; + repeated ThrottleDevice blkio_device_read_IOps = 105; + repeated ThrottleDevice blkio_device_write_IOps = 106; + // Kernel memory limit (in bytes) + int64 kernel_memory = 107; + // Memory soft limit (in bytes) + int64 memory_reservation = 108; + // Tuning container memory swappiness behaviour + Int64Value memory_swappiness = 109; + // List of ulimits to be set in the container + repeated Ulimit ulimits = 110; +} + +// WeightDevice is a structure that holds device:weight pair +message WeightDevice { + // Path of weightdevice. + string path = 1; + // Weight of weightdevice. + uint32 Weight = 2; +} + +// ThrottleDevice is a structure that holds device:rate_per_second pair +message ThrottleDevice { + // Path of throttledevice. + string path = 1; + // Rate of throttledevice. + uint64 rate = 2; +} + +// Ulimit is a human friendly version of Rlimit. +message Ulimit { + // Name of ulimit. + string name = 1; + // Hard limit of ulimit. + int64 hard = 2; + // Soft limit of Ulimit. + int64 soft = 3; +} + +// SELinuxOption are the labels to be applied to the container. +message SELinuxOption { + string user = 1; + string role = 2; + string type = 3; + string level = 4; +} + +// Capability contains the container capabilities to add or drop +message Capability { + // List of capabilities to add. + repeated string add_capabilities = 1; + // List of capabilities to drop. + repeated string drop_capabilities = 2; +} + +// LinuxContainerSecurityContext holds linux security configuration that will be applied to a container. +message LinuxContainerSecurityContext { + // Capabilities to add or drop. + Capability capabilities = 1; + // If set, run container in privileged mode. + // Privileged mode is incompatible with the following options. If + // privileged is set, the following features MAY have no effect: + // 1. capabilities + // 2. selinux_options + // 4. seccomp + // 5. apparmor + // + // Privileged mode implies the following specific options are applied: + // 1. All capabilities are added. + // 2. Sensitive paths, such as kernel module paths within sysfs, are not masked. + // 3. Any sysfs and procfs mounts are mounted RW. + // 4. Apparmor confinement is not applied. + // 5. Seccomp restrictions are not applied. + // 6. The device cgroup does not restrict access to any devices. + // 7. All devices from the host's /dev are available within the container. + // 8. SELinux restrictions are not applied (e.g. label=disabled). + bool privileged = 2; + // Configurations for the container's namespaces. + // Only used if the container uses namespace for isolation. + NamespaceOption namespace_options = 3; + // SELinux context to be optionally applied. + SELinuxOption selinux_options = 4; + // UID to run the container process as. Only one of run_as_user and + // run_as_username can be specified at a time. + Int64Value run_as_user = 5; + // GID to run the container process as. run_as_group should only be specified + // when run_as_user or run_as_username is specified; otherwise, the runtime + // MUST error. + Int64Value run_as_group = 12; + // User name to run the container process as. If specified, the user MUST + // exist in the container image (i.e. in the /etc/passwd inside the image), + // and be resolved there by the runtime; otherwise, the runtime MUST error. + string run_as_username = 6; + // If set, the root filesystem of the container is read-only. + bool readonly_rootfs = 7; + // List of groups applied to the first process run in the container, in + // addition to the container's primary GID. + repeated int64 supplemental_groups = 8; + // AppArmor profile for the container, candidate values are: + // * runtime/default: equivalent to not specifying a profile. + // * unconfined: no profiles are loaded + // * localhost/: profile loaded on the node + // (localhost) by name. The possible profile names are detailed at + // http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference + string apparmor_profile = 9; + // Seccomp profile for the container, candidate values are: + // * runtime/default: the default profile for the container runtime + // * unconfined: unconfined profile, ie, no seccomp sandboxing + // * localhost/: the profile installed on the node. + // is the full path of the profile. + // Default: "", which is identical with unconfined. + string seccomp_profile_path = 10; + // no_new_privs defines if the flag for no_new_privs should be set on the + // container. + bool no_new_privs = 11; +} + +// LinuxContainerConfig contains platform-specific configuration for +// Linux-based containers. +message LinuxContainerConfig { + // Resources specification for the container. + LinuxContainerResources resources = 1; + // LinuxContainerSecurityContext configuration for the container. + LinuxContainerSecurityContext security_context = 2; +} + +// WindowsContainerConfig contains platform-specific configuration for +// Windows-based containers. +message WindowsContainerConfig { + // Resources specification for the container. + WindowsContainerResources resources = 1; +} + +// WindowsContainerResources specifies Windows specific configuration for +// resources. +message WindowsContainerResources { + // CPU shares (relative weight vs. other containers). Default: 0 (not specified). + int64 cpu_shares = 1; + // Number of CPUs available to the container. Default: 0 (not specified). + int64 cpu_count = 2; + // Specifies the portion of processor cycles that this container can use as a percentage times 100. + int64 cpu_maximum = 3; + // Memory limit in bytes. Default: 0 (not specified). + int64 memory_limit_in_bytes = 4; +} + +// ContainerMetadata holds all necessary information for building the container +// name. The container runtime is encouraged to expose the metadata in its user +// interface for better user experience. E.g., runtime can construct a unique +// container name based on the metadata. Note that (name, attempt) is unique +// within a sandbox for the entire lifetime of the sandbox. +message ContainerMetadata { + // Name of the container. Same as the container name in the PodSpec. + string name = 1; + // Attempt number of creating the container. Default: 0. + uint32 attempt = 2; +} + +// Device specifies a host device to mount into a container. +message Device { + // Path of the device within the container. + string container_path = 1; + // Path of the device on the host. + string host_path = 2; + // Cgroups permissions of the device, candidates are one or more of + // * r - allows container to read from the specified device. + // * w - allows container to write to the specified device. + // * m - allows container to create device files that do not yet exist. + string permissions = 3; +} + +// ContainerConfig holds all the required and optional fields for creating a +// container. +message ContainerConfig { + // Metadata of the container. This information will uniquely identify the + // container, and the runtime should leverage this to ensure correct + // operation. The runtime may also use this information to improve UX, such + // as by constructing a readable name. + ContainerMetadata metadata = 1 ; + // Image to use. + ImageSpec image = 2; + // Command to execute (i.e., entrypoint for docker) + repeated string command = 3; + // Args for the Command (i.e., command for docker) + repeated string args = 4; + // Current working directory of the command. + string working_dir = 5; + // List of environment variable to set in the container. + repeated KeyValue envs = 6; + // Mounts for the container. + repeated Mount mounts = 7; + // Devices for the container. + repeated Device devices = 8; + // Key-value pairs that may be used to scope and select individual resources. + // Label keys are of the form: + // label-key ::= prefixed-name | name + // prefixed-name ::= prefix '/' name + // prefix ::= DNS_SUBDOMAIN + // name ::= DNS_LABEL + map labels = 9; + // Unstructured key-value map that may be used by the kubelet to store and + // retrieve arbitrary metadata. + // + // Annotations MUST NOT be altered by the runtime; the annotations stored + // here MUST be returned in the ContainerStatus associated with the container + // this ContainerConfig creates. + // + // In general, in order to preserve a well-defined interface between the + // kubelet and the container runtime, annotations SHOULD NOT influence + // runtime behaviour. + map annotations = 10; + // Path relative to PodSandboxConfig.LogDirectory for container to store + // the log (STDOUT and STDERR) on the host. + // E.g., + // PodSandboxConfig.LogDirectory = `/var/log/pods//` + // ContainerConfig.LogPath = `containerName/Instance#.log` + // + // WARNING: Log management and how kubelet should interface with the + // container logs are under active discussion in + // https://issues.k8s.io/24677. There *may* be future change of direction + // for logging as the discussion carries on. + string log_path = 11; + + // Variables for interactive containers, these have very specialized + // use-cases (e.g. debugging). + // TODO: Determine if we need to continue supporting these fields that are + // part of Kubernetes's Container Spec. + bool stdin = 12; + bool stdin_once = 13; + bool tty = 14; + + // Configuration specific to Linux containers. + LinuxContainerConfig linux = 15; + // Configuration specific to Windows containers. + WindowsContainerConfig windows = 16; + // NetPriority of the container + int64 net_priority = 100; +} + +message CreateContainerRequest { + // ID of the PodSandbox in which the container should be created. + string pod_sandbox_id = 1; + // Config of the container. + ContainerConfig config = 2; + // Config of the PodSandbox. This is the same config that was passed + // to RunPodSandboxRequest to create the PodSandbox. It is passed again + // here just for easy reference. The PodSandboxConfig is immutable and + // remains the same throughout the lifetime of the pod. + PodSandboxConfig sandbox_config = 3; +} + +message CreateContainerResponse { + // ID of the created container. + string container_id = 1; +} + +message StartContainerRequest { + // ID of the container to start. + string container_id = 1; +} + +message StartContainerResponse {} + +message StopContainerRequest { + // ID of the container to stop. + string container_id = 1; + // Timeout in seconds to wait for the container to stop before forcibly + // terminating it. Default: 0 (forcibly terminate the container immediately) + int64 timeout = 2; +} + +message StopContainerResponse {} + +message RemoveContainerRequest { + // ID of the container to remove. + string container_id = 1; +} + +message RemoveContainerResponse {} + +enum ContainerState { + CONTAINER_CREATED = 0; + CONTAINER_RUNNING = 1; + CONTAINER_EXITED = 2; + CONTAINER_UNKNOWN = 3; +} + +// ContainerStateValue is the wrapper of ContainerState. +message ContainerStateValue { + // State of the container. + ContainerState state = 1; +} + +// ContainerFilter is used to filter containers. +// All those fields are combined with 'AND' +message ContainerFilter { + // ID of the container. + string id = 1; + // State of the container. + ContainerStateValue state = 2; + // ID of the PodSandbox. + string pod_sandbox_id = 3; + // LabelSelector to select matches. + // Only api.MatchLabels is supported for now and the requirements + // are ANDed. MatchExpressions is not supported yet. + map label_selector = 4; +} + +message ListContainersRequest { + ContainerFilter filter = 1; +} + +// Container provides the runtime information for a container, such as ID, hash, +// state of the container. +message Container { + // ID of the container, used by the container runtime to identify + // a container. + string id = 1; + // ID of the sandbox to which this container belongs. + string pod_sandbox_id = 2; + // Metadata of the container. + ContainerMetadata metadata = 3; + // Spec of the image. + ImageSpec image = 4; + // Reference to the image in use. For most runtimes, this should be an + // image ID. + string image_ref = 5; + // State of the container. + ContainerState state = 6; + // Creation time of the container in nanoseconds. + int64 created_at = 7; + // Key-value pairs that may be used to scope and select individual resources. + map labels = 8; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding ContainerConfig used to + // instantiate this Container. + map annotations = 9; +} + +message ListContainersResponse { + // List of containers. + repeated Container containers = 1; +} + +message ContainerStatusRequest { + // ID of the container for which to retrieve status. + string container_id = 1; + // Verbose indicates whether to return extra information about the container. + bool verbose = 2; +} + +// ContainerStatus represents the status of a container. +message ContainerStatus { + // ID of the container. + string id = 1; + // Metadata of the container. + ContainerMetadata metadata = 2; + // Status of the container. + ContainerState state = 3; + // Creation time of the container in nanoseconds. + int64 created_at = 4; + // Start time of the container in nanoseconds. Default: 0 (not specified). + int64 started_at = 5; + // Finish time of the container in nanoseconds. Default: 0 (not specified). + int64 finished_at = 6; + // Exit code of the container. Only required when finished_at != 0. Default: 0. + int32 exit_code = 7; + // Spec of the image. + ImageSpec image = 8; + // Reference to the image in use. For most runtimes, this should be an + // image ID + string image_ref = 9; + // Brief CamelCase string explaining why container is in its current state. + string reason = 10; + // Human-readable message indicating details about why container is in its + // current state. + string message = 11; + // Key-value pairs that may be used to scope and select individual resources. + map labels = 12; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding ContainerConfig used to + // instantiate the Container this status represents. + map annotations = 13; + // Mounts for the container. + repeated Mount mounts = 14; + // Log path of container. + string log_path = 15; + // Volumes of container + map volumes= 100; + // Resources specification for the container + LinuxContainerResources resources = 101; +} + +message Volume { +} + +message ContainerStatusResponse { + // Status of the container. + ContainerStatus status = 1; + // Info is extra information of the Container. The key could be arbitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. pid for linux container based container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; +} + +message UpdateContainerResourcesRequest { + // ID of the container to update. + string container_id = 1; + // Resource configuration specific to Linux containers. + LinuxContainerResources linux = 2; +} + +message UpdateContainerResourcesResponse {} + +message ExecSyncRequest { + // ID of the container. + string container_id = 1; + // Command to execute. + repeated string cmd = 2; + // Timeout in seconds to stop the command. Default: 0 (run forever). + int64 timeout = 3; +} + +message ExecSyncResponse { + // Captured command stdout output. + bytes stdout = 1; + // Captured command stderr output. + bytes stderr = 2; + // Exit code the command finished with. Default: 0 (success). + int32 exit_code = 3; +} + +message ExecRequest { + // ID of the container in which to execute the command. + string container_id = 1; + // Command to execute. + repeated string cmd = 2; + // Whether to exec the command in a TTY. + bool tty = 3; + // Whether to stream stdin. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + bool stdin = 4; + // Whether to stream stdout. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + bool stdout = 5; + // Whether to stream stderr. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported + // in this case. The output of stdout and stderr will be combined to a + // single stream. + bool stderr = 6; +} + +message ExecResponse { + // Fully qualified URL of the exec streaming server. + string url = 1; +} + +message AttachRequest { + // ID of the container to which to attach. + string container_id = 1; + // Whether to stream stdin. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + bool stdin = 2; + // Whether the process being attached is running in a TTY. + // This must match the TTY setting in the ContainerConfig. + bool tty = 3; + // Whether to stream stdout. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + bool stdout = 4; + // Whether to stream stderr. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported + // in this case. The output of stdout and stderr will be combined to a + // single stream. + bool stderr = 5; +} + +message AttachResponse { + // Fully qualified URL of the attach streaming server. + string url = 1; +} + +message PortForwardRequest { + // ID of the container to which to forward the port. + string pod_sandbox_id = 1; + // Port to forward. + repeated int32 port = 2; +} + +message PortForwardResponse { + // Fully qualified URL of the port-forward streaming server. + string url = 1; +} + +message ImageFilter { + // Spec of the image. + ImageSpec image = 1; +} + +message ListImagesRequest { + // Filter to list images. + ImageFilter filter = 1; +} + +// Basic information about a container image. +message Image { + // ID of the image. + string id = 1; + // Other names by which this image is known. + repeated string repo_tags = 2; + // Digests by which this image is known. + repeated string repo_digests = 3; + // Size of the image in bytes. Must be > 0. + uint64 size = 4; + // UID that will run the command(s). This is used as a default if no user is + // specified when creating the container. UID and the following user name + // are mutually exclusive. + Int64Value uid = 5; + // User name that will run the command(s). This is used if UID is not set + // and no user is specified when creating container. + string username = 6; + // Volumes of image + map volumes= 100; +} + +message ListImagesResponse { + // List of images. + repeated Image images = 1; +} + +message ImageStatusRequest { + // Spec of the image. + ImageSpec image = 1; + // Verbose indicates whether to return extra information about the image. + bool verbose = 2; +} + +message ImageStatusResponse { + // Status of the image. + Image image = 1; + // Info is extra information of the Image. The key could be arbitrary string, and + // value should be in json format. The information could include anything useful + // for debug, e.g. image config for oci image based container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; +} + +// AuthConfig contains authorization information for connecting to a registry. +message AuthConfig { + string username = 1; + string password = 2; + string auth = 3; + string server_address = 4; + // IdentityToken is used to authenticate the user and get + // an access token for the registry. + string identity_token = 5; + // RegistryToken is a bearer token to be sent to a registry + string registry_token = 6; +} + +message PullImageRequest { + // Spec of the image. + ImageSpec image = 1; + // Authentication configuration for pulling the image. + AuthConfig auth = 2; + // Config of the PodSandbox, which is used to pull image in PodSandbox context. + PodSandboxConfig sandbox_config = 3; +} + +message PullImageResponse { + // Reference to the image in use. For most runtimes, this should be an + // image ID or digest. + string image_ref = 1; +} + +message RemoveImageRequest { + // Spec of the image to remove. + ImageSpec image = 1; +} + +message RemoveImageResponse {} + +message NetworkConfig { + // CIDR to use for pod IP addresses. If the CIDR is empty, runtimes + // should omit it. + string pod_cidr = 1; +} + +message RuntimeConfig { + NetworkConfig network_config = 1; +} + +message UpdateRuntimeConfigRequest { + RuntimeConfig runtime_config = 1; +} + +message UpdateRuntimeConfigResponse {} + +// RuntimeCondition contains condition information for the runtime. +// There are 2 kinds of runtime conditions: +// 1. Required conditions: Conditions are required for kubelet to work +// properly. If any required condition is unmet, the node will be not ready. +// The required conditions include: +// * RuntimeReady: RuntimeReady means the runtime is up and ready to accept +// basic containers e.g. container only needs host network. +// * NetworkReady: NetworkReady means the runtime network is up and ready to +// accept containers which require container network. +// 2. Optional conditions: Conditions are informative to the user, but kubelet +// will not rely on. Since condition type is an arbitrary string, all conditions +// not required are optional. These conditions will be exposed to users to help +// them understand the status of the system. +message RuntimeCondition { + // Type of runtime condition. + string type = 1; + // Status of the condition, one of true/false. Default: false. + bool status = 2; + // Brief CamelCase string containing reason for the condition's last transition. + string reason = 3; + // Human-readable message indicating details about last transition. + string message = 4; +} + +// RuntimeStatus is information about the current status of the runtime. +message RuntimeStatus { + // List of current observed runtime conditions. + repeated RuntimeCondition conditions = 1; +} + +message StatusRequest { + // Verbose indicates whether to return extra information about the runtime. + bool verbose = 1; +} + +message StatusResponse { + // Status of the Runtime. + RuntimeStatus status = 1; + // Info is extra information of the Runtime. The key could be arbitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. plugins used by the container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; +} + +message ImageFsInfoRequest {} + +// UInt64Value is the wrapper of uint64. +message UInt64Value { + // The value. + uint64 value = 1; +} + +// FilesystemIdentifier uniquely identify the filesystem. +message FilesystemIdentifier{ + // Mountpoint of a filesystem. + string mountpoint = 1; +} + +// FilesystemUsage provides the filesystem usage information. +message FilesystemUsage { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + int64 timestamp = 1; + // The unique identifier of the filesystem. + FilesystemIdentifier fs_id = 2; + // UsedBytes represents the bytes used for images on the filesystem. + // This may differ from the total bytes used on the filesystem and may not + // equal CapacityBytes - AvailableBytes. + UInt64Value used_bytes = 3; + // InodesUsed represents the inodes used by the images. + // This may not equal InodesCapacity - InodesAvailable because the underlying + // filesystem may also be used for purposes other than storing images. + UInt64Value inodes_used = 4; +} + +message ImageFsInfoResponse { + // Information of image filesystem(s). + repeated FilesystemUsage image_filesystems = 1; +} + +message ContainerStatsRequest{ + // ID of the container for which to retrieve stats. + string container_id = 1; +} + +message ContainerStatsResponse { + // Stats of the container. + ContainerStats stats = 1; +} + +message ListContainerStatsRequest{ + // Filter for the list request. + ContainerStatsFilter filter = 1; +} + +// ContainerStatsFilter is used to filter containers. +// All those fields are combined with 'AND' +message ContainerStatsFilter { + // ID of the container. + string id = 1; + // ID of the PodSandbox. + string pod_sandbox_id = 2; + // LabelSelector to select matches. + // Only api.MatchLabels is supported for now and the requirements + // are ANDed. MatchExpressions is not supported yet. + map label_selector = 3; +} + +message ListContainerStatsResponse { + // Stats of the container. + repeated ContainerStats stats = 1; +} + +// ContainerAttributes provides basic information of the container. +message ContainerAttributes { + // ID of the container. + string id = 1; + // Metadata of the container. + ContainerMetadata metadata = 2; + // Key-value pairs that may be used to scope and select individual resources. + map labels = 3; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding ContainerConfig used to + // instantiate the Container this status represents. + map annotations = 4; +} + +// ContainerStats provides the resource usage statistics for a container. +message ContainerStats { + // Information of the container. + ContainerAttributes attributes = 1; + // CPU usage gathered from the container. + CpuUsage cpu = 2; + // Memory usage gathered from the container. + MemoryUsage memory = 3; + // Usage of the writeable layer. + FilesystemUsage writable_layer = 4; +} + +// CpuUsage provides the CPU usage information. +message CpuUsage { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + int64 timestamp = 1; + // Cumulative CPU usage (sum across all cores) since object creation. + UInt64Value usage_core_nano_seconds = 2; +} + +// MemoryUsage provides the memory usage information. +message MemoryUsage { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + int64 timestamp = 1; + // The amount of working set memory in bytes. + UInt64Value working_set_bytes = 2; +} + +message ReopenContainerLogRequest { + // ID of the container for which to reopen the log. + string container_id = 1; +} + +message ReopenContainerLogResponse{ +} \ No newline at end of file diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/constants.go b/cri/apis/v1alpha2/constants.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/constants.go rename to cri/apis/v1alpha2/constants.go diff --git a/cri/v1alpha1/cri.go b/cri/v1alpha1/cri.go index 704e1d147d..ab5e7f040d 100644 --- a/cri/v1alpha1/cri.go +++ b/cri/v1alpha1/cri.go @@ -13,6 +13,7 @@ import ( apitypes "github.com/alibaba/pouch/apis/types" anno "github.com/alibaba/pouch/cri/annotations" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha1" "github.com/alibaba/pouch/daemon/config" "github.com/alibaba/pouch/daemon/mgr" "github.com/alibaba/pouch/pkg/errtypes" @@ -24,7 +25,6 @@ import ( // NOTE: "golang.org/x/net/context" is compatible with standard "context" in golang1.7+. "github.com/cri-o/ocicni/pkg/ocicni" "github.com/sirupsen/logrus" - "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" ) const ( @@ -497,6 +497,7 @@ func (c *CriManager) CreateContainer(ctx context.Context, r *runtime.CreateConta specAnnotation[anno.ContainerType] = anno.ContainerTypeContainer specAnnotation[anno.SandboxName] = podSandboxID + resources := r.GetConfig().GetLinux().GetResources() createConfig := &apitypes.ContainerCreateConfig{ ContainerConfig: apitypes.ContainerConfig{ Entrypoint: config.Command, @@ -510,9 +511,12 @@ func (c *CriManager) CreateContainer(ctx context.Context, r *runtime.CreateConta StdinOnce: config.StdinOnce, Tty: config.Tty, SpecAnnotation: specAnnotation, + NetPriority: config.NetPriority, + DiskQuota: resources.GetDiskQuota(), }, HostConfig: &apitypes.HostConfig{ - Binds: generateMountBindings(config.GetMounts()), + Binds: generateMountBindings(config.GetMounts()), + Resources: parseResourcesFromCRI(resources), }, NetworkingConfig: &apitypes.NetworkingConfig{}, } @@ -713,6 +717,8 @@ func (c *CriManager) ContainerStatus(ctx context.Context, r *runtime.ContainerSt imageRef = imageInfo.RepoDigests[0] } + resources := container.HostConfig.Resources + diskQuota := container.Config.DiskQuota status := &runtime.ContainerStatus{ Id: container.ID, Metadata: metadata, @@ -729,6 +735,8 @@ func (c *CriManager) ContainerStatus(ctx context.Context, r *runtime.ContainerSt Labels: labels, Annotations: annotations, // TODO: LogPath. + Volumes: parseVolumesFromPouch(container.Config.Volumes), + Resources: parseResourcesFromPouch(resources, diskQuota), } return &runtime.ContainerStatusResponse{Status: status}, nil @@ -794,14 +802,8 @@ func (c *CriManager) UpdateContainerResources(ctx context.Context, r *runtime.Up resources := r.GetLinux() updateConfig := &apitypes.UpdateConfig{ - Resources: apitypes.Resources{ - CPUPeriod: resources.GetCpuPeriod(), - CPUQuota: resources.GetCpuQuota(), - CPUShares: resources.GetCpuShares(), - Memory: resources.GetMemoryLimitInBytes(), - CpusetCpus: resources.GetCpusetCpus(), - CpusetMems: resources.GetCpusetMems(), - }, + Resources: parseResourcesFromCRI(resources), + DiskQuota: resources.GetDiskQuota(), } err = c.ContainerMgr.Update(ctx, containerID, updateConfig) if err != nil { diff --git a/cri/v1alpha1/cri_network.go b/cri/v1alpha1/cri_network.go index 480fcf1ffd..910c42d2b6 100644 --- a/cri/v1alpha1/cri_network.go +++ b/cri/v1alpha1/cri_network.go @@ -5,11 +5,11 @@ import ( "os" "strings" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha1" "github.com/alibaba/pouch/cri/config" "github.com/cri-o/ocicni/pkg/ocicni" "github.com/sirupsen/logrus" - "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" ) // CniMgr as an interface defines all operations against CNI. diff --git a/cri/v1alpha1/cri_types.go b/cri/v1alpha1/cri_types.go index 8370d62571..12364828e9 100644 --- a/cri/v1alpha1/cri_types.go +++ b/cri/v1alpha1/cri_types.go @@ -1,7 +1,7 @@ package v1alpha1 import ( - "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha1" ) // SandboxMeta represents the sandbox's meta data. diff --git a/cri/v1alpha1/cri_utils.go b/cri/v1alpha1/cri_utils.go index 2f64366be7..9a2b1c9c08 100644 --- a/cri/v1alpha1/cri_utils.go +++ b/cri/v1alpha1/cri_utils.go @@ -15,6 +15,7 @@ import ( apitypes "github.com/alibaba/pouch/apis/types" anno "github.com/alibaba/pouch/cri/annotations" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha1" "github.com/alibaba/pouch/daemon/mgr" "github.com/alibaba/pouch/pkg/utils" @@ -22,9 +23,9 @@ import ( containerdmount "github.com/containerd/containerd/mount" "github.com/containerd/typeurl" "github.com/go-openapi/strfmt" + logrus "github.com/sirupsen/logrus" "golang.org/x/net/context" "golang.org/x/sys/unix" - "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" ) const uuidDir = "/dev/disk/by-uuid" @@ -771,6 +772,7 @@ func imageToCriImage(image *apitypes.ImageInfo) (*runtime.Image, error) { Size_: size, Uid: uid, Username: username, + Volumes: parseVolumesFromPouch(image.Config.Volumes), }, nil } @@ -940,3 +942,137 @@ func blkrdev(device string) (uint64, error) { } return 0, fmt.Errorf("cannot get stat of device %s", device) } + +// CRI extension related tool functions. + +// parseResourceFromCRI parse Resources from runtime.LinuxContainerResources to apitypes.Resources +func parseResourcesFromCRI(runtimeResources *runtime.LinuxContainerResources) apitypes.Resources { + var memorySwappiness *int64 + if runtimeResources.GetMemorySwappiness() != nil { + memorySwappiness = &runtimeResources.GetMemorySwappiness().Value + } + + return apitypes.Resources{ + CPUPeriod: runtimeResources.GetCpuPeriod(), + CPUQuota: runtimeResources.GetCpuQuota(), + CPUShares: runtimeResources.GetCpuShares(), + Memory: runtimeResources.GetMemoryLimitInBytes(), + CpusetCpus: runtimeResources.GetCpusetCpus(), + CpusetMems: runtimeResources.GetCpusetMems(), + BlkioWeight: uint16(runtimeResources.GetBlkioWeight()), + BlkioWeightDevice: parseWeightDeviceFromCRI(runtimeResources.GetBlkioWeightDevice()), + BlkioDeviceReadBps: parseThrottleDeviceFromCRI(runtimeResources.GetBlkioDeviceReadBps()), + BlkioDeviceWriteBps: parseThrottleDeviceFromCRI(runtimeResources.GetBlkioDeviceWriteBps()), + BlkioDeviceReadIOps: parseThrottleDeviceFromCRI(runtimeResources.GetBlkioDeviceRead_IOps()), + BlkioDeviceWriteIOps: parseThrottleDeviceFromCRI(runtimeResources.GetBlkioDeviceWrite_IOps()), + KernelMemory: runtimeResources.GetKernelMemory(), + MemoryReservation: runtimeResources.GetMemoryReservation(), + MemorySwappiness: memorySwappiness, + Ulimits: parseUlimitFromCRI(runtimeResources.GetUlimits()), + } +} + +// parseResourceFromPouch parse Resources from apitypes.Resources to runtime.LinuxContainerResources +func parseResourcesFromPouch(apitypesResources apitypes.Resources, diskQuota map[string]string) *runtime.LinuxContainerResources { + var memorySwappiness *runtime.Int64Value + if apitypesResources.MemorySwappiness != nil { + memorySwappiness = &runtime.Int64Value{Value: *apitypesResources.MemorySwappiness} + } + + return &runtime.LinuxContainerResources{ + CpuPeriod: apitypesResources.CPUPeriod, + CpuQuota: apitypesResources.CPUQuota, + CpuShares: apitypesResources.CPUShares, + MemoryLimitInBytes: apitypesResources.Memory, + CpusetCpus: apitypesResources.CpusetCpus, + CpusetMems: apitypesResources.CpusetMems, + BlkioWeight: uint32(apitypesResources.BlkioWeight), + BlkioWeightDevice: parseWeightDeviceFromPouch(apitypesResources.BlkioWeightDevice), + BlkioDeviceReadBps: parseThrottleDeviceFromPouch(apitypesResources.BlkioDeviceReadBps), + BlkioDeviceWriteBps: parseThrottleDeviceFromPouch(apitypesResources.BlkioDeviceWriteBps), + BlkioDeviceRead_IOps: parseThrottleDeviceFromPouch(apitypesResources.BlkioDeviceReadIOps), + BlkioDeviceWrite_IOps: parseThrottleDeviceFromPouch(apitypesResources.BlkioDeviceWriteIOps), + KernelMemory: apitypesResources.KernelMemory, + MemoryReservation: apitypesResources.MemoryReservation, + MemorySwappiness: memorySwappiness, + Ulimits: parseUlimitFromPouch(apitypesResources.Ulimits), + DiskQuota: diskQuota, + } +} + +// parseWeightDeviceFromCRI parse WeightDevice from runtime.WeightDevice to apitypes.WeightDevice +func parseWeightDeviceFromCRI(runtimeWeightDevices []*runtime.WeightDevice) (weightDevices []*apitypes.WeightDevice) { + for _, v := range runtimeWeightDevices { + weightDevices = append(weightDevices, &apitypes.WeightDevice{ + Path: v.GetPath(), + Weight: uint16(v.GetWeight()), + }) + } + return +} + +// parseWeightDeviceFromPouch parse WeightDevice from apitypes.WeightDevice to runtime.WeightDevice +func parseWeightDeviceFromPouch(apitypesWeightDevices []*apitypes.WeightDevice) (weightDevices []*runtime.WeightDevice) { + for _, v := range apitypesWeightDevices { + weightDevices = append(weightDevices, &runtime.WeightDevice{ + Path: v.Path, + Weight: uint32(v.Weight), + }) + } + return +} + +// parseThrottleDeviceFromCRI parse ThrottleDevice from runtime.ThrottleDevice to apitypes.ThrottleDevice +func parseThrottleDeviceFromCRI(runtimeThrottleDevices []*runtime.ThrottleDevice) (throttleDevices []*apitypes.ThrottleDevice) { + for _, v := range runtimeThrottleDevices { + throttleDevices = append(throttleDevices, &apitypes.ThrottleDevice{ + Path: v.GetPath(), + Rate: v.GetRate(), + }) + } + return +} + +// parseThrottleDeviceFromPouch parse ThrottleDevice from apitypes.ThrottleDevice to runtime.ThrottleDevice +func parseThrottleDeviceFromPouch(apitypesThrottleDevices []*apitypes.ThrottleDevice) (throttleDevices []*runtime.ThrottleDevice) { + for _, v := range apitypesThrottleDevices { + throttleDevices = append(throttleDevices, &runtime.ThrottleDevice{ + Path: v.Path, + Rate: v.Rate, + }) + } + return +} + +// parseUlimitFromCRI parse Ulimit from runtime.Ulimit to apitypes.Ulimit +func parseUlimitFromCRI(runtimeUlimits []*runtime.Ulimit) (ulimits []*apitypes.Ulimit) { + for _, v := range runtimeUlimits { + ulimits = append(ulimits, &apitypes.Ulimit{ + Hard: v.GetHard(), + Name: v.GetName(), + Soft: v.GetSoft(), + }) + } + return +} + +// parseUlimitFromPouch parse Ulimit from apitypes.Ulimit to runtime.Ulimit +func parseUlimitFromPouch(apitypesUlimits []*apitypes.Ulimit) (ulimits []*runtime.Ulimit) { + for _, v := range apitypesUlimits { + ulimits = append(ulimits, &runtime.Ulimit{ + Hard: v.Hard, + Name: v.Name, + Soft: v.Soft, + }) + } + return +} + +// parseVolumesFromPouch parse Volumes from map[string]interface{} to map[string]*runtime.Volume +func parseVolumesFromPouch(containerVolumes map[string]interface{}) map[string]*runtime.Volume { + volumes := make(map[string]*runtime.Volume) + for k := range containerVolumes { + volumes[k] = &runtime.Volume{} + } + return volumes +} diff --git a/cri/v1alpha1/cri_utils_test.go b/cri/v1alpha1/cri_utils_test.go index 3dd5a92684..9132eb6542 100644 --- a/cri/v1alpha1/cri_utils_test.go +++ b/cri/v1alpha1/cri_utils_test.go @@ -7,11 +7,74 @@ import ( "testing" apitypes "github.com/alibaba/pouch/apis/types" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha1" "github.com/alibaba/pouch/daemon/mgr" "github.com/stretchr/testify/assert" "golang.org/x/net/context" - "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" +) + +var ( + memorySwappiness int64 = 1000 + resources = apitypes.Resources{ + CPUPeriod: 1000, + CPUQuota: 1000, + CPUShares: 1000, + Memory: 1000, + CpusetCpus: "0", + CpusetMems: "0", + BlkioWeight: uint16(100), + BlkioWeightDevice: []*apitypes.WeightDevice{ + { + Path: "foo", + Weight: uint16(1), + }, + }, + BlkioDeviceReadBps: []*apitypes.ThrottleDevice{ + { + Path: "foo", + Rate: uint64(1000), + }, + }, + MemorySwappiness: &memorySwappiness, + Ulimits: []*apitypes.Ulimit{ + { + Name: "foo", + Hard: 1, + Soft: 1, + }, + }, + } + linuxContainerResources = runtime.LinuxContainerResources{ + CpuPeriod: 1000, + CpuQuota: 1000, + CpuShares: 1000, + MemoryLimitInBytes: 1000, + CpusetCpus: "0", + CpusetMems: "0", + BlkioWeight: uint32(100), + DiskQuota: map[string]string{"foo": "foo"}, + BlkioWeightDevice: []*runtime.WeightDevice{ + { + Path: "foo", + Weight: uint32(1), + }, + }, + BlkioDeviceReadBps: []*runtime.ThrottleDevice{ + { + Path: "foo", + Rate: uint64(1000), + }, + }, + MemorySwappiness: &runtime.Int64Value{Value: 1000}, + Ulimits: []*runtime.Ulimit{ + { + Name: "foo", + Hard: 1, + Soft: 1, + }, + }, + } ) func Test_parseUint32(t *testing.T) { @@ -770,3 +833,225 @@ func Test_parseUserFromImageUser(t *testing.T) { }) } } + +func Test_parseResourcesFromCRI(t *testing.T) { + type args struct { + runtimeResources *runtime.LinuxContainerResources + } + tests := []struct { + name string + args args + want apitypes.Resources + }{ + { + name: "normal test", + args: args{ + runtimeResources: &linuxContainerResources, + }, + want: resources, + }, + { + name: "nil test", + args: args{ + runtimeResources: &runtime.LinuxContainerResources{}, + }, + want: apitypes.Resources{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseResourcesFromCRI(tt.args.runtimeResources); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseResourcesFromCRI() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseResourcesFromPouch(t *testing.T) { + type args struct { + apitypesResources apitypes.Resources + diskQuota map[string]string + } + tests := []struct { + name string + args args + want *runtime.LinuxContainerResources + }{ + { + name: "normal test", + args: args{ + apitypesResources: resources, + diskQuota: map[string]string{"foo": "foo"}, + }, + want: &linuxContainerResources, + }, + { + name: "nil test", + args: args{ + apitypesResources: apitypes.Resources{}, + diskQuota: nil, + }, + want: &runtime.LinuxContainerResources{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseResourcesFromPouch(tt.args.apitypesResources, tt.args.diskQuota); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseResourcesFromPouch() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseWeightDeviceFromCRI(t *testing.T) { + type args struct { + runtimeWeightDevices []*runtime.WeightDevice + } + tests := []struct { + name string + args args + want []*apitypes.WeightDevice + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseWeightDeviceFromCRI(tt.args.runtimeWeightDevices); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseWeightDeviceFromCRI() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseWeightDeviceFromPouch(t *testing.T) { + type args struct { + apitypesWeightDevices []*apitypes.WeightDevice + } + tests := []struct { + name string + args args + want []*runtime.WeightDevice + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseWeightDeviceFromPouch(tt.args.apitypesWeightDevices); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseWeightDeviceFromPouch() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseThrottleDeviceFromCRI(t *testing.T) { + type args struct { + runtimeThrottleDevices []*runtime.ThrottleDevice + } + tests := []struct { + name string + args args + want []*apitypes.ThrottleDevice + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseThrottleDeviceFromCRI(tt.args.runtimeThrottleDevices); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseThrottleDeviceFromCRI() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseThrottleDeviceFromPouch(t *testing.T) { + type args struct { + apitypesThrottleDevices []*apitypes.ThrottleDevice + } + tests := []struct { + name string + args args + want []*runtime.ThrottleDevice + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseThrottleDeviceFromPouch(tt.args.apitypesThrottleDevices); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseThrottleDeviceFromPouch() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseUlimitFromCRI(t *testing.T) { + type args struct { + runtimeUlimits []*runtime.Ulimit + } + tests := []struct { + name string + args args + want []*apitypes.Ulimit + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseUlimitFromCRI(tt.args.runtimeUlimits); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseUlimitFromCRI() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseUlimitFromPouch(t *testing.T) { + type args struct { + apitypesUlimits []*apitypes.Ulimit + } + tests := []struct { + name string + args args + want []*runtime.Ulimit + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseUlimitFromPouch(tt.args.apitypesUlimits); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseUlimitFromPouch() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseVolumesFromPouch(t *testing.T) { + type args struct { + containerVolumes map[string]interface{} + } + tests := []struct { + name string + args args + want map[string]*runtime.Volume + }{ + { + name: "normal test", + args: args{ + containerVolumes: map[string]interface{}{"foo": "foo"}, + }, + want: map[string]*runtime.Volume{"foo": {}}, + }, + { + name: "nil test", + args: args{ + containerVolumes: make(map[string]interface{}), + }, + want: make(map[string]*runtime.Volume), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseVolumesFromPouch(tt.args.containerVolumes); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseVolumesFromPouch() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/cri/v1alpha1/cri_wrapper.go b/cri/v1alpha1/cri_wrapper.go index 4f453b8fd2..84313612e0 100644 --- a/cri/v1alpha1/cri_wrapper.go +++ b/cri/v1alpha1/cri_wrapper.go @@ -1,9 +1,10 @@ package v1alpha1 import ( + runtime "github.com/alibaba/pouch/cri/apis/v1alpha1" + "github.com/sirupsen/logrus" "golang.org/x/net/context" - "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" ) // CriWrapper wraps CriManager and logs each operation for debugging convenice. diff --git a/cri/v1alpha1/server.go b/cri/v1alpha1/server.go index 62d86a4035..3ebdb5ab49 100644 --- a/cri/v1alpha1/server.go +++ b/cri/v1alpha1/server.go @@ -7,6 +7,7 @@ import ( "path" "time" + runtimeapi "github.com/alibaba/pouch/cri/apis/v1alpha1" "github.com/alibaba/pouch/cri/stream" "github.com/alibaba/pouch/cri/stream/constant" "github.com/alibaba/pouch/cri/stream/portforward" @@ -15,7 +16,6 @@ import ( "github.com/gorilla/mux" "google.golang.org/grpc" "google.golang.org/grpc/codes" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" ) // Keep these constants consistent with the peers in official package: diff --git a/cri/v1alpha1/service/cri.go b/cri/v1alpha1/service/cri.go index f5c327bc6f..ea6497ab54 100644 --- a/cri/v1alpha1/service/cri.go +++ b/cri/v1alpha1/service/cri.go @@ -5,11 +5,11 @@ import ( "os" "syscall" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha1" cri "github.com/alibaba/pouch/cri/v1alpha1" "github.com/alibaba/pouch/daemon/config" "google.golang.org/grpc" - "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" ) // Service serves the kubelet runtime grpc api which will be consumed by kubelet. diff --git a/cri/v1alpha2/cri.go b/cri/v1alpha2/cri.go index 58c20ffcfe..7a2c8c4012 100644 --- a/cri/v1alpha2/cri.go +++ b/cri/v1alpha2/cri.go @@ -13,6 +13,7 @@ import ( apitypes "github.com/alibaba/pouch/apis/types" anno "github.com/alibaba/pouch/cri/annotations" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha2" "github.com/alibaba/pouch/daemon/config" "github.com/alibaba/pouch/daemon/mgr" "github.com/alibaba/pouch/pkg/errtypes" @@ -24,7 +25,6 @@ import ( // NOTE: "golang.org/x/net/context" is compatible with standard "context" in golang1.7+. "github.com/cri-o/ocicni/pkg/ocicni" "github.com/sirupsen/logrus" - runtime "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" ) const ( @@ -503,6 +503,7 @@ func (c *CriManager) CreateContainer(ctx context.Context, r *runtime.CreateConta specAnnotation[anno.ContainerType] = anno.ContainerTypeContainer specAnnotation[anno.SandboxName] = podSandboxID + resources := r.GetConfig().GetLinux().GetResources() createConfig := &apitypes.ContainerCreateConfig{ ContainerConfig: apitypes.ContainerConfig{ Entrypoint: config.Command, @@ -516,9 +517,12 @@ func (c *CriManager) CreateContainer(ctx context.Context, r *runtime.CreateConta StdinOnce: config.StdinOnce, Tty: config.Tty, SpecAnnotation: specAnnotation, + NetPriority: config.NetPriority, + DiskQuota: resources.GetDiskQuota(), }, HostConfig: &apitypes.HostConfig{ - Binds: generateMountBindings(config.GetMounts()), + Binds: generateMountBindings(config.GetMounts()), + Resources: parseResourcesFromCRI(resources), }, NetworkingConfig: &apitypes.NetworkingConfig{}, } @@ -708,6 +712,8 @@ func (c *CriManager) ContainerStatus(ctx context.Context, r *runtime.ContainerSt imageRef = imageInfo.RepoDigests[0] } + resources := container.HostConfig.Resources + diskQuota := container.Config.DiskQuota status := &runtime.ContainerStatus{ Id: container.ID, Metadata: metadata, @@ -724,6 +730,8 @@ func (c *CriManager) ContainerStatus(ctx context.Context, r *runtime.ContainerSt Labels: labels, Annotations: annotations, LogPath: container.LogPath, + Volumes: parseVolumesFromPouch(container.Config.Volumes), + Resources: parseResourcesFromPouch(resources, diskQuota), } return &runtime.ContainerStatusResponse{Status: status}, nil @@ -789,14 +797,8 @@ func (c *CriManager) UpdateContainerResources(ctx context.Context, r *runtime.Up resources := r.GetLinux() updateConfig := &apitypes.UpdateConfig{ - Resources: apitypes.Resources{ - CPUPeriod: resources.GetCpuPeriod(), - CPUQuota: resources.GetCpuQuota(), - CPUShares: resources.GetCpuShares(), - Memory: resources.GetMemoryLimitInBytes(), - CpusetCpus: resources.GetCpusetCpus(), - CpusetMems: resources.GetCpusetMems(), - }, + Resources: parseResourcesFromCRI(resources), + DiskQuota: resources.GetDiskQuota(), } err = c.ContainerMgr.Update(ctx, containerID, updateConfig) if err != nil { diff --git a/cri/v1alpha2/cri_network.go b/cri/v1alpha2/cri_network.go index cc947d0672..c75b40f281 100644 --- a/cri/v1alpha2/cri_network.go +++ b/cri/v1alpha2/cri_network.go @@ -5,11 +5,11 @@ import ( "os" "strings" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha2" "github.com/alibaba/pouch/cri/config" "github.com/cri-o/ocicni/pkg/ocicni" "github.com/sirupsen/logrus" - runtime "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" ) // CniMgr as an interface defines all operations against CNI. diff --git a/cri/v1alpha2/cri_types.go b/cri/v1alpha2/cri_types.go index a838ec5756..442fce2d42 100644 --- a/cri/v1alpha2/cri_types.go +++ b/cri/v1alpha2/cri_types.go @@ -1,7 +1,7 @@ package v1alpha2 import ( - runtime "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha2" ) // SandboxMeta represents the sandbox's meta data. diff --git a/cri/v1alpha2/cri_utils.go b/cri/v1alpha2/cri_utils.go index 1e8cc8e0bf..2d0cf8294a 100644 --- a/cri/v1alpha2/cri_utils.go +++ b/cri/v1alpha2/cri_utils.go @@ -14,6 +14,7 @@ import ( apitypes "github.com/alibaba/pouch/apis/types" anno "github.com/alibaba/pouch/cri/annotations" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha2" "github.com/alibaba/pouch/daemon/mgr" "github.com/alibaba/pouch/pkg/utils" @@ -21,7 +22,6 @@ import ( "github.com/containerd/typeurl" "github.com/go-openapi/strfmt" "golang.org/x/net/context" - runtime "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" ) func parseUint32(s string) (uint32, error) { @@ -244,6 +244,7 @@ func makeSandboxPouchConfig(config *runtime.PodSandboxConfig, image string) (*ap labels := makeLabels(config.GetLabels(), config.GetAnnotations()) // Apply a label to distinguish sandboxes from regular containers. labels[containerTypeLabelKey] = containerTypeLabelSandbox + hc := &apitypes.HostConfig{} // Apply runtime options. @@ -770,6 +771,7 @@ func imageToCriImage(image *apitypes.ImageInfo) (*runtime.Image, error) { Size_: size, Uid: uid, Username: username, + Volumes: parseVolumesFromPouch(image.Config.Volumes), }, nil } @@ -903,3 +905,137 @@ func (c *CriManager) getContainerMetrics(ctx context.Context, meta *mgr.Containe func imageFSPath(rootDir, snapshotter string) string { return filepath.Join(rootDir, fmt.Sprintf("%s.%s", snapshotPlugin, snapshotter)) } + +// CRI extension related tool functions. + +// parseResourceFromCRI parse Resources from runtime.LinuxContainerResources to apitypes.Resources +func parseResourcesFromCRI(runtimeResources *runtime.LinuxContainerResources) apitypes.Resources { + var memorySwappiness *int64 + if runtimeResources.GetMemorySwappiness() != nil { + memorySwappiness = &runtimeResources.GetMemorySwappiness().Value + } + + return apitypes.Resources{ + CPUPeriod: runtimeResources.GetCpuPeriod(), + CPUQuota: runtimeResources.GetCpuQuota(), + CPUShares: runtimeResources.GetCpuShares(), + Memory: runtimeResources.GetMemoryLimitInBytes(), + CpusetCpus: runtimeResources.GetCpusetCpus(), + CpusetMems: runtimeResources.GetCpusetMems(), + BlkioWeight: uint16(runtimeResources.GetBlkioWeight()), + BlkioWeightDevice: parseWeightDeviceFromCRI(runtimeResources.GetBlkioWeightDevice()), + BlkioDeviceReadBps: parseThrottleDeviceFromCRI(runtimeResources.GetBlkioDeviceReadBps()), + BlkioDeviceWriteBps: parseThrottleDeviceFromCRI(runtimeResources.GetBlkioDeviceWriteBps()), + BlkioDeviceReadIOps: parseThrottleDeviceFromCRI(runtimeResources.GetBlkioDeviceRead_IOps()), + BlkioDeviceWriteIOps: parseThrottleDeviceFromCRI(runtimeResources.GetBlkioDeviceWrite_IOps()), + KernelMemory: runtimeResources.GetKernelMemory(), + MemoryReservation: runtimeResources.GetMemoryReservation(), + MemorySwappiness: memorySwappiness, + Ulimits: parseUlimitFromCRI(runtimeResources.GetUlimits()), + } +} + +// parseResourceFromPouch parse Resources from apitypes.Resources to runtime.LinuxContainerResources +func parseResourcesFromPouch(apitypesResources apitypes.Resources, diskQuota map[string]string) *runtime.LinuxContainerResources { + var memorySwappiness *runtime.Int64Value + if apitypesResources.MemorySwappiness != nil { + memorySwappiness = &runtime.Int64Value{Value: *apitypesResources.MemorySwappiness} + } + + return &runtime.LinuxContainerResources{ + CpuPeriod: apitypesResources.CPUPeriod, + CpuQuota: apitypesResources.CPUQuota, + CpuShares: apitypesResources.CPUShares, + MemoryLimitInBytes: apitypesResources.Memory, + CpusetCpus: apitypesResources.CpusetCpus, + CpusetMems: apitypesResources.CpusetMems, + BlkioWeight: uint32(apitypesResources.BlkioWeight), + BlkioWeightDevice: parseWeightDeviceFromPouch(apitypesResources.BlkioWeightDevice), + BlkioDeviceReadBps: parseThrottleDeviceFromPouch(apitypesResources.BlkioDeviceReadBps), + BlkioDeviceWriteBps: parseThrottleDeviceFromPouch(apitypesResources.BlkioDeviceWriteBps), + BlkioDeviceRead_IOps: parseThrottleDeviceFromPouch(apitypesResources.BlkioDeviceReadIOps), + BlkioDeviceWrite_IOps: parseThrottleDeviceFromPouch(apitypesResources.BlkioDeviceWriteIOps), + KernelMemory: apitypesResources.KernelMemory, + MemoryReservation: apitypesResources.MemoryReservation, + MemorySwappiness: memorySwappiness, + Ulimits: parseUlimitFromPouch(apitypesResources.Ulimits), + DiskQuota: diskQuota, + } +} + +// parseWeightDeviceFromCRI parse WeightDevice from runtime.WeightDevice to apitypes.WeightDevice +func parseWeightDeviceFromCRI(runtimeWeightDevices []*runtime.WeightDevice) (weightDevices []*apitypes.WeightDevice) { + for _, v := range runtimeWeightDevices { + weightDevices = append(weightDevices, &apitypes.WeightDevice{ + Path: v.GetPath(), + Weight: uint16(v.GetWeight()), + }) + } + return +} + +// parseWeightDeviceFromPouch parse WeightDevice from apitypes.WeightDevice to runtime.WeightDevice +func parseWeightDeviceFromPouch(apitypesWeightDevices []*apitypes.WeightDevice) (weightDevices []*runtime.WeightDevice) { + for _, v := range apitypesWeightDevices { + weightDevices = append(weightDevices, &runtime.WeightDevice{ + Path: v.Path, + Weight: uint32(v.Weight), + }) + } + return +} + +// parseThrottleDeviceFromCRI parse ThrottleDevice from runtime.ThrottleDevice to apitypes.ThrottleDevice +func parseThrottleDeviceFromCRI(runtimeThrottleDevices []*runtime.ThrottleDevice) (throttleDevices []*apitypes.ThrottleDevice) { + for _, v := range runtimeThrottleDevices { + throttleDevices = append(throttleDevices, &apitypes.ThrottleDevice{ + Path: v.GetPath(), + Rate: v.GetRate(), + }) + } + return +} + +// parseThrottleDeviceFromPouch parse ThrottleDevice from apitypes.ThrottleDevice to runtime.ThrottleDevice +func parseThrottleDeviceFromPouch(apitypesThrottleDevices []*apitypes.ThrottleDevice) (throttleDevices []*runtime.ThrottleDevice) { + for _, v := range apitypesThrottleDevices { + throttleDevices = append(throttleDevices, &runtime.ThrottleDevice{ + Path: v.Path, + Rate: v.Rate, + }) + } + return +} + +// parseUlimitFromCRI parse Ulimit from runtime.Ulimit to apitypes.Ulimit +func parseUlimitFromCRI(runtimeUlimits []*runtime.Ulimit) (ulimits []*apitypes.Ulimit) { + for _, v := range runtimeUlimits { + ulimits = append(ulimits, &apitypes.Ulimit{ + Hard: v.GetHard(), + Name: v.GetName(), + Soft: v.GetSoft(), + }) + } + return +} + +// parseUlimitFromPouch parse Ulimit from apitypes.Ulimit to runtime.Ulimit +func parseUlimitFromPouch(apitypesUlimits []*apitypes.Ulimit) (ulimits []*runtime.Ulimit) { + for _, v := range apitypesUlimits { + ulimits = append(ulimits, &runtime.Ulimit{ + Hard: v.Hard, + Name: v.Name, + Soft: v.Soft, + }) + } + return +} + +// parseVolumesFromPouch parse Volumes from map[string]interface{} to map[string]*runtime.Volume +func parseVolumesFromPouch(containerVolumes map[string]interface{}) map[string]*runtime.Volume { + volumes := make(map[string]*runtime.Volume) + for k := range containerVolumes { + volumes[k] = &runtime.Volume{} + } + return volumes +} diff --git a/cri/v1alpha2/cri_utils_test.go b/cri/v1alpha2/cri_utils_test.go index 6089eda7c2..5218e186c0 100644 --- a/cri/v1alpha2/cri_utils_test.go +++ b/cri/v1alpha2/cri_utils_test.go @@ -7,11 +7,74 @@ import ( "testing" apitypes "github.com/alibaba/pouch/apis/types" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha2" "github.com/alibaba/pouch/daemon/mgr" "github.com/stretchr/testify/assert" "golang.org/x/net/context" - runtime "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" +) + +var ( + memorySwappiness int64 = 1000 + resources = apitypes.Resources{ + CPUPeriod: 1000, + CPUQuota: 1000, + CPUShares: 1000, + Memory: 1000, + CpusetCpus: "0", + CpusetMems: "0", + BlkioWeight: uint16(100), + BlkioWeightDevice: []*apitypes.WeightDevice{ + { + Path: "foo", + Weight: uint16(1), + }, + }, + BlkioDeviceReadBps: []*apitypes.ThrottleDevice{ + { + Path: "foo", + Rate: uint64(1000), + }, + }, + MemorySwappiness: &memorySwappiness, + Ulimits: []*apitypes.Ulimit{ + { + Name: "foo", + Hard: 1, + Soft: 1, + }, + }, + } + linuxContainerResources = runtime.LinuxContainerResources{ + CpuPeriod: 1000, + CpuQuota: 1000, + CpuShares: 1000, + MemoryLimitInBytes: 1000, + CpusetCpus: "0", + CpusetMems: "0", + BlkioWeight: uint32(100), + DiskQuota: map[string]string{"foo": "foo"}, + BlkioWeightDevice: []*runtime.WeightDevice{ + { + Path: "foo", + Weight: uint32(1), + }, + }, + BlkioDeviceReadBps: []*runtime.ThrottleDevice{ + { + Path: "foo", + Rate: uint64(1000), + }, + }, + MemorySwappiness: &runtime.Int64Value{Value: 1000}, + Ulimits: []*runtime.Ulimit{ + { + Name: "foo", + Hard: 1, + Soft: 1, + }, + }, + } ) func Test_parseUint32(t *testing.T) { @@ -770,3 +833,225 @@ func Test_parseUserFromImageUser(t *testing.T) { }) } } + +func Test_parseResourcesFromCRI(t *testing.T) { + type args struct { + runtimeResources *runtime.LinuxContainerResources + } + tests := []struct { + name string + args args + want apitypes.Resources + }{ + { + name: "normal test", + args: args{ + runtimeResources: &linuxContainerResources, + }, + want: resources, + }, + { + name: "nil test", + args: args{ + runtimeResources: &runtime.LinuxContainerResources{}, + }, + want: apitypes.Resources{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseResourcesFromCRI(tt.args.runtimeResources); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseResourcesFromCRI() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseResourcesFromPouch(t *testing.T) { + type args struct { + apitypesResources apitypes.Resources + diskQuota map[string]string + } + tests := []struct { + name string + args args + want *runtime.LinuxContainerResources + }{ + { + name: "normal test", + args: args{ + apitypesResources: resources, + diskQuota: map[string]string{"foo": "foo"}, + }, + want: &linuxContainerResources, + }, + { + name: "nil test", + args: args{ + apitypesResources: apitypes.Resources{}, + diskQuota: nil, + }, + want: &runtime.LinuxContainerResources{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseResourcesFromPouch(tt.args.apitypesResources, tt.args.diskQuota); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseResourcesFromPouch() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseWeightDeviceFromCRI(t *testing.T) { + type args struct { + runtimeWeightDevices []*runtime.WeightDevice + } + tests := []struct { + name string + args args + want []*apitypes.WeightDevice + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseWeightDeviceFromCRI(tt.args.runtimeWeightDevices); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseWeightDeviceFromCRI() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseWeightDeviceFromPouch(t *testing.T) { + type args struct { + apitypesWeightDevices []*apitypes.WeightDevice + } + tests := []struct { + name string + args args + want []*runtime.WeightDevice + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseWeightDeviceFromPouch(tt.args.apitypesWeightDevices); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseWeightDeviceFromPouch() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseThrottleDeviceFromCRI(t *testing.T) { + type args struct { + runtimeThrottleDevices []*runtime.ThrottleDevice + } + tests := []struct { + name string + args args + want []*apitypes.ThrottleDevice + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseThrottleDeviceFromCRI(tt.args.runtimeThrottleDevices); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseThrottleDeviceFromCRI() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseThrottleDeviceFromPouch(t *testing.T) { + type args struct { + apitypesThrottleDevices []*apitypes.ThrottleDevice + } + tests := []struct { + name string + args args + want []*runtime.ThrottleDevice + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseThrottleDeviceFromPouch(tt.args.apitypesThrottleDevices); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseThrottleDeviceFromPouch() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseUlimitFromCRI(t *testing.T) { + type args struct { + runtimeUlimits []*runtime.Ulimit + } + tests := []struct { + name string + args args + want []*apitypes.Ulimit + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseUlimitFromCRI(tt.args.runtimeUlimits); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseUlimitFromCRI() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseUlimitFromPouch(t *testing.T) { + type args struct { + apitypesUlimits []*apitypes.Ulimit + } + tests := []struct { + name string + args args + want []*runtime.Ulimit + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseUlimitFromPouch(tt.args.apitypesUlimits); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseUlimitFromPouch() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_parseVolumesFromPouch(t *testing.T) { + type args struct { + containerVolumes map[string]interface{} + } + tests := []struct { + name string + args args + want map[string]*runtime.Volume + }{ + { + name: "normal test", + args: args{ + containerVolumes: map[string]interface{}{"foo": "foo"}, + }, + want: map[string]*runtime.Volume{"foo": {}}, + }, + { + name: "nil test", + args: args{ + containerVolumes: make(map[string]interface{}), + }, + want: make(map[string]*runtime.Volume), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := parseVolumesFromPouch(tt.args.containerVolumes); !reflect.DeepEqual(got, tt.want) { + t.Errorf("parseVolumesFromPouch() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/cri/v1alpha2/cri_wrapper.go b/cri/v1alpha2/cri_wrapper.go index b910588169..be757448b7 100644 --- a/cri/v1alpha2/cri_wrapper.go +++ b/cri/v1alpha2/cri_wrapper.go @@ -1,9 +1,10 @@ package v1alpha2 import ( + runtime "github.com/alibaba/pouch/cri/apis/v1alpha2" + "github.com/sirupsen/logrus" "golang.org/x/net/context" - runtime "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" ) // CriWrapper wraps CriManager and logs each operation for debugging convenice. diff --git a/cri/v1alpha2/server.go b/cri/v1alpha2/server.go index d86507f600..cdec4a41c2 100644 --- a/cri/v1alpha2/server.go +++ b/cri/v1alpha2/server.go @@ -7,6 +7,7 @@ import ( "path" "time" + runtimeapi "github.com/alibaba/pouch/cri/apis/v1alpha2" "github.com/alibaba/pouch/cri/stream" "github.com/alibaba/pouch/cri/stream/constant" "github.com/alibaba/pouch/cri/stream/portforward" @@ -15,7 +16,6 @@ import ( "github.com/gorilla/mux" "google.golang.org/grpc" "google.golang.org/grpc/codes" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" ) // Keep these constants consistent with the peers in official package: diff --git a/cri/v1alpha2/service/cri.go b/cri/v1alpha2/service/cri.go index 0a72dc03d9..8104f4bd0c 100644 --- a/cri/v1alpha2/service/cri.go +++ b/cri/v1alpha2/service/cri.go @@ -5,11 +5,11 @@ import ( "os" "syscall" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha2" cri "github.com/alibaba/pouch/cri/v1alpha2" "github.com/alibaba/pouch/daemon/config" "google.golang.org/grpc" - runtime "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" ) // Service serves the kubelet runtime grpc api which will be consumed by kubelet. diff --git a/daemon/containerio/cri_log_file.go b/daemon/containerio/cri_log_file.go index d1e2420081..61778edf59 100644 --- a/daemon/containerio/cri_log_file.go +++ b/daemon/containerio/cri_log_file.go @@ -7,8 +7,8 @@ import ( "os" "time" + runtime "github.com/alibaba/pouch/cri/apis/v1alpha1" "github.com/sirupsen/logrus" - "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" ) const ( diff --git a/hack/boilerplate/boilerplate.go.txt b/hack/boilerplate/boilerplate.go.txt new file mode 100644 index 0000000000..2c4a1bfae7 --- /dev/null +++ b/hack/boilerplate/boilerplate.go.txt @@ -0,0 +1,15 @@ +/* +Copyright The Kubernetes AUTHORS. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ diff --git a/hack/protoc.sh b/hack/protoc.sh new file mode 100644 index 0000000000..3347d0edca --- /dev/null +++ b/hack/protoc.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +set -o errexit +set -o nounset + +# +# This script is used to regenerate api.pb.go. +# + +# Get the absolute path of this file +DIR="$( cd "$( dirname "$0" )" && pwd )"/.. +API_ROOT="${DIR}/cri/apis/v1alpha1" + +if [[ -z "$(which protoc)" || "$(protoc --version)" != "libprotoc 3."* ]]; then + echo "Generating protobuf requires protoc 3.0.0-beta1 or newer. Please download and" + echo "install the platform appropriate Protobuf package for your OS: " + echo + echo " https://github.com/google/protobuf/releases" + echo + echo "WARNING: Protobuf changes are not being validated" + exit 1 +fi + +go get k8s.io/code-generator/cmd/go-to-protobuf/protoc-gen-gogo +if ! which protoc-gen-gogo >/dev/null; then + echo "GOPATH is not in PATH" + exit 1 +fi + +generateproto(){ + protoc \ + --proto_path="${API_ROOT}" \ + --proto_path="${DIR}/vendor" \ + --gogo_out=plugins=grpc:"${API_ROOT}" "${API_ROOT}/api.proto" + # Update boilerplate for the generated file. + cat "${DIR}/hack/boilerplate/boilerplate.go.txt" "${API_ROOT}/api.pb.go" > "${API_ROOT}/tmpfile" \ + && mv "${API_ROOT}/tmpfile" "${API_ROOT}/api.pb.go" + gofmt -l -s -w "${API_ROOT}/api.pb.go" +} + +main(){ + generateproto + API_ROOT="${DIR}/cri/apis/v1alpha2" + generateproto +} +main "$@" diff --git a/vendor/k8s.io/kubernetes/LICENSE b/vendor/k8s.io/kubernetes/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/vendor/k8s.io/kubernetes/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto deleted file mode 100644 index 854b8f6128..0000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto +++ /dev/null @@ -1,1227 +0,0 @@ -// To regenerate api.pb.go run hack/update-generated-runtime.sh -syntax = 'proto3'; - -package runtime.v1alpha2; -option go_package = "v1alpha2"; - -import "github.com/gogo/protobuf/gogoproto/gogo.proto"; - -option (gogoproto.goproto_stringer_all) = false; -option (gogoproto.stringer_all) = true; -option (gogoproto.goproto_getters_all) = true; -option (gogoproto.marshaler_all) = true; -option (gogoproto.sizer_all) = true; -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.goproto_unrecognized_all) = false; - -// Runtime service defines the public APIs for remote container runtimes -service RuntimeService { - // Version returns the runtime name, runtime version, and runtime API version. - rpc Version(VersionRequest) returns (VersionResponse) {} - - // RunPodSandbox creates and starts a pod-level sandbox. Runtimes must ensure - // the sandbox is in the ready state on success. - rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} - // StopPodSandbox stops any running process that is part of the sandbox and - // reclaims network resources (e.g., IP addresses) allocated to the sandbox. - // If there are any running containers in the sandbox, they must be forcibly - // terminated. - // This call is idempotent, and must not return an error if all relevant - // resources have already been reclaimed. kubelet will call StopPodSandbox - // at least once before calling RemovePodSandbox. It will also attempt to - // reclaim resources eagerly, as soon as a sandbox is not needed. Hence, - // multiple StopPodSandbox calls are expected. - rpc StopPodSandbox(StopPodSandboxRequest) returns (StopPodSandboxResponse) {} - // RemovePodSandbox removes the sandbox. If there are any running containers - // in the sandbox, they must be forcibly terminated and removed. - // This call is idempotent, and must not return an error if the sandbox has - // already been removed. - rpc RemovePodSandbox(RemovePodSandboxRequest) returns (RemovePodSandboxResponse) {} - // PodSandboxStatus returns the status of the PodSandbox. If the PodSandbox is not - // present, returns an error. - rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) {} - // ListPodSandbox returns a list of PodSandboxes. - rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} - - // CreateContainer creates a new container in specified PodSandbox - rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {} - // StartContainer starts the container. - rpc StartContainer(StartContainerRequest) returns (StartContainerResponse) {} - // StopContainer stops a running container with a grace period (i.e., timeout). - // This call is idempotent, and must not return an error if the container has - // already been stopped. - // TODO: what must the runtime do after the grace period is reached? - rpc StopContainer(StopContainerRequest) returns (StopContainerResponse) {} - // RemoveContainer removes the container. If the container is running, the - // container must be forcibly removed. - // This call is idempotent, and must not return an error if the container has - // already been removed. - rpc RemoveContainer(RemoveContainerRequest) returns (RemoveContainerResponse) {} - // ListContainers lists all containers by filters. - rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} - // ContainerStatus returns status of the container. If the container is not - // present, returns an error. - rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} - // UpdateContainerResources updates ContainerConfig of the container. - rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateContainerResourcesResponse) {} - // ReopenContainerLog asks runtime to reopen the stdout/stderr log file - // for the container. This is often called after the log file has been - // rotated. If the container is not running, container runtime can choose - // to either create a new log file and return nil, or return an error. - // Once it returns error, new container log file MUST NOT be created. - rpc ReopenContainerLog(ReopenContainerLogRequest) returns (ReopenContainerLogResponse) {} - - // ExecSync runs a command in a container synchronously. - rpc ExecSync(ExecSyncRequest) returns (ExecSyncResponse) {} - // Exec prepares a streaming endpoint to execute a command in the container. - rpc Exec(ExecRequest) returns (ExecResponse) {} - // Attach prepares a streaming endpoint to attach to a running container. - rpc Attach(AttachRequest) returns (AttachResponse) {} - // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. - rpc PortForward(PortForwardRequest) returns (PortForwardResponse) {} - - // ContainerStats returns stats of the container. If the container does not - // exist, the call returns an error. - rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} - // ListContainerStats returns stats of all running containers. - rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} - - // UpdateRuntimeConfig updates the runtime configuration based on the given request. - rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse) {} - - // Status returns the status of the runtime. - rpc Status(StatusRequest) returns (StatusResponse) {} -} - -// ImageService defines the public APIs for managing images. -service ImageService { - // ListImages lists existing images. - rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} - // ImageStatus returns the status of the image. If the image is not - // present, returns a response with ImageStatusResponse.Image set to - // nil. - rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} - // PullImage pulls an image with authentication config. - rpc PullImage(PullImageRequest) returns (PullImageResponse) {} - // RemoveImage removes the image. - // This call is idempotent, and must not return an error if the image has - // already been removed. - rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} - // ImageFSInfo returns information of the filesystem that is used to store images. - rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} -} - -message VersionRequest { - // Version of the kubelet runtime API. - string version = 1; -} - -message VersionResponse { - // Version of the kubelet runtime API. - string version = 1; - // Name of the container runtime. - string runtime_name = 2; - // Version of the container runtime. The string must be - // semver-compatible. - string runtime_version = 3; - // API version of the container runtime. The string must be - // semver-compatible. - string runtime_api_version = 4; -} - -// DNSConfig specifies the DNS servers and search domains of a sandbox. -message DNSConfig { - // List of DNS servers of the cluster. - repeated string servers = 1; - // List of DNS search domains of the cluster. - repeated string searches = 2; - // List of DNS options. See https://linux.die.net/man/5/resolv.conf - // for all available options. - repeated string options = 3; -} - -enum Protocol { - TCP = 0; - UDP = 1; -} - -// PortMapping specifies the port mapping configurations of a sandbox. -message PortMapping { - // Protocol of the port mapping. - Protocol protocol = 1; - // Port number within the container. Default: 0 (not specified). - int32 container_port = 2; - // Port number on the host. Default: 0 (not specified). - int32 host_port = 3; - // Host IP. - string host_ip = 4; -} - -enum MountPropagation { - // No mount propagation ("private" in Linux terminology). - PROPAGATION_PRIVATE = 0; - // Mounts get propagated from the host to the container ("rslave" in Linux). - PROPAGATION_HOST_TO_CONTAINER = 1; - // Mounts get propagated from the host to the container and from the - // container to the host ("rshared" in Linux). - PROPAGATION_BIDIRECTIONAL = 2; -} - -// Mount specifies a host volume to mount into a container. -message Mount { - // Path of the mount within the container. - string container_path = 1; - // Path of the mount on the host. If the hostPath doesn't exist, then runtimes - // should report error. If the hostpath is a symbolic link, runtimes should - // follow the symlink and mount the real destination to container. - string host_path = 2; - // If set, the mount is read-only. - bool readonly = 3; - // If set, the mount needs SELinux relabeling. - bool selinux_relabel = 4; - // Requested propagation mode. - MountPropagation propagation = 5; -} - -// A NamespaceMode describes the intended namespace configuration for each -// of the namespaces (Network, PID, IPC) in NamespaceOption. Runtimes should -// map these modes as appropriate for the technology underlying the runtime. -enum NamespaceMode { - // A POD namespace is common to all containers in a pod. - // For example, a container with a PID namespace of POD expects to view - // all of the processes in all of the containers in the pod. - POD = 0; - // A CONTAINER namespace is restricted to a single container. - // For example, a container with a PID namespace of CONTAINER expects to - // view only the processes in that container. - CONTAINER = 1; - // A NODE namespace is the namespace of the Kubernetes node. - // For example, a container with a PID namespace of NODE expects to view - // all of the processes on the host running the kubelet. - NODE = 2; -} - -// NamespaceOption provides options for Linux namespaces. -message NamespaceOption { - // Network namespace for this container/sandbox. - // Note: There is currently no way to set CONTAINER scoped network in the Kubernetes API. - // Namespaces currently set by the kubelet: POD, NODE - NamespaceMode network = 1; - // PID namespace for this container/sandbox. - // Note: The CRI default is POD, but the v1.PodSpec default is CONTAINER. - // The kubelet's runtime manager will set this to CONTAINER explicitly for v1 pods. - // Namespaces currently set by the kubelet: POD, CONTAINER, NODE - NamespaceMode pid = 2; - // IPC namespace for this container/sandbox. - // Note: There is currently no way to set CONTAINER scoped IPC in the Kubernetes API. - // Namespaces currently set by the kubelet: POD, NODE - NamespaceMode ipc = 3; -} - -// Int64Value is the wrapper of int64. -message Int64Value { - // The value. - int64 value = 1; -} - -// LinuxSandboxSecurityContext holds linux security configuration that will be -// applied to a sandbox. Note that: -// 1) It does not apply to containers in the pods. -// 2) It may not be applicable to a PodSandbox which does not contain any running -// process. -message LinuxSandboxSecurityContext { - // Configurations for the sandbox's namespaces. - // This will be used only if the PodSandbox uses namespace for isolation. - NamespaceOption namespace_options = 1; - // Optional SELinux context to be applied. - SELinuxOption selinux_options = 2; - // UID to run sandbox processes as, when applicable. - Int64Value run_as_user = 3; - // GID to run sandbox processes as, when applicable. run_as_group should only - // be specified when run_as_user is specified; otherwise, the runtime MUST error. - Int64Value run_as_group = 8; - // If set, the root filesystem of the sandbox is read-only. - bool readonly_rootfs = 4; - // List of groups applied to the first process run in the sandbox, in - // addition to the sandbox's primary GID. - repeated int64 supplemental_groups = 5; - // Indicates whether the sandbox will be asked to run a privileged - // container. If a privileged container is to be executed within it, this - // MUST be true. - // This allows a sandbox to take additional security precautions if no - // privileged containers are expected to be run. - bool privileged = 6; - // Seccomp profile for the sandbox, candidate values are: - // * runtime/default: the default profile for the container runtime - // * unconfined: unconfined profile, ie, no seccomp sandboxing - // * localhost/: the profile installed on the node. - // is the full path of the profile. - // Default: "", which is identical with unconfined. - string seccomp_profile_path = 7; -} - -// LinuxPodSandboxConfig holds platform-specific configurations for Linux -// host platforms and Linux-based containers. -message LinuxPodSandboxConfig { - // Parent cgroup of the PodSandbox. - // The cgroupfs style syntax will be used, but the container runtime can - // convert it to systemd semantics if needed. - string cgroup_parent = 1; - // LinuxSandboxSecurityContext holds sandbox security attributes. - LinuxSandboxSecurityContext security_context = 2; - // Sysctls holds linux sysctls config for the sandbox. - map sysctls = 3; -} - -// PodSandboxMetadata holds all necessary information for building the sandbox name. -// The container runtime is encouraged to expose the metadata associated with the -// PodSandbox in its user interface for better user experience. For example, -// the runtime can construct a unique PodSandboxName based on the metadata. -message PodSandboxMetadata { - // Pod name of the sandbox. Same as the pod name in the PodSpec. - string name = 1; - // Pod UID of the sandbox. Same as the pod UID in the PodSpec. - string uid = 2; - // Pod namespace of the sandbox. Same as the pod namespace in the PodSpec. - string namespace = 3; - // Attempt number of creating the sandbox. Default: 0. - uint32 attempt = 4; -} - -// PodSandboxConfig holds all the required and optional fields for creating a -// sandbox. -message PodSandboxConfig { - // Metadata of the sandbox. This information will uniquely identify the - // sandbox, and the runtime should leverage this to ensure correct - // operation. The runtime may also use this information to improve UX, such - // as by constructing a readable name. - PodSandboxMetadata metadata = 1; - // Hostname of the sandbox. - string hostname = 2; - // Path to the directory on the host in which container log files are - // stored. - // By default the log of a container going into the LogDirectory will be - // hooked up to STDOUT and STDERR. However, the LogDirectory may contain - // binary log files with structured logging data from the individual - // containers. For example, the files might be newline separated JSON - // structured logs, systemd-journald journal files, gRPC trace files, etc. - // E.g., - // PodSandboxConfig.LogDirectory = `/var/log/pods//` - // ContainerConfig.LogPath = `containerName/Instance#.log` - // - // WARNING: Log management and how kubelet should interface with the - // container logs are under active discussion in - // https://issues.k8s.io/24677. There *may* be future change of direction - // for logging as the discussion carries on. - string log_directory = 3; - // DNS config for the sandbox. - DNSConfig dns_config = 4; - // Port mappings for the sandbox. - repeated PortMapping port_mappings = 5; - // Key-value pairs that may be used to scope and select individual resources. - map labels = 6; - // Unstructured key-value map that may be set by the kubelet to store and - // retrieve arbitrary metadata. This will include any annotations set on a - // pod through the Kubernetes API. - // - // Annotations MUST NOT be altered by the runtime; the annotations stored - // here MUST be returned in the PodSandboxStatus associated with the pod - // this PodSandboxConfig creates. - // - // In general, in order to preserve a well-defined interface between the - // kubelet and the container runtime, annotations SHOULD NOT influence - // runtime behaviour. - // - // Annotations can also be useful for runtime authors to experiment with - // new features that are opaque to the Kubernetes APIs (both user-facing - // and the CRI). Whenever possible, however, runtime authors SHOULD - // consider proposing new typed fields for any new features instead. - map annotations = 7; - // Optional configurations specific to Linux hosts. - LinuxPodSandboxConfig linux = 8; -} - -message RunPodSandboxRequest { - // Configuration for creating a PodSandbox. - PodSandboxConfig config = 1; -} - -message RunPodSandboxResponse { - // ID of the PodSandbox to run. - string pod_sandbox_id = 1; -} - -message StopPodSandboxRequest { - // ID of the PodSandbox to stop. - string pod_sandbox_id = 1; -} - -message StopPodSandboxResponse {} - -message RemovePodSandboxRequest { - // ID of the PodSandbox to remove. - string pod_sandbox_id = 1; -} - -message RemovePodSandboxResponse {} - -message PodSandboxStatusRequest { - // ID of the PodSandbox for which to retrieve status. - string pod_sandbox_id = 1; - // Verbose indicates whether to return extra information about the pod sandbox. - bool verbose = 2; -} - -// PodSandboxNetworkStatus is the status of the network for a PodSandbox. -message PodSandboxNetworkStatus { - // IP address of the PodSandbox. - string ip = 1; -} - -// Namespace contains paths to the namespaces. -message Namespace { - // Namespace options for Linux namespaces. - NamespaceOption options = 2; -} - -// LinuxSandboxStatus contains status specific to Linux sandboxes. -message LinuxPodSandboxStatus { - // Paths to the sandbox's namespaces. - Namespace namespaces = 1; -} - -enum PodSandboxState { - SANDBOX_READY = 0; - SANDBOX_NOTREADY = 1; -} - -// PodSandboxStatus contains the status of the PodSandbox. -message PodSandboxStatus { - // ID of the sandbox. - string id = 1; - // Metadata of the sandbox. - PodSandboxMetadata metadata = 2; - // State of the sandbox. - PodSandboxState state = 3; - // Creation timestamp of the sandbox in nanoseconds. Must be > 0. - int64 created_at = 4; - // Network contains network status if network is handled by the runtime. - PodSandboxNetworkStatus network = 5; - // Linux-specific status to a pod sandbox. - LinuxPodSandboxStatus linux = 6; - // Labels are key-value pairs that may be used to scope and select individual resources. - map labels = 7; - // Unstructured key-value map holding arbitrary metadata. - // Annotations MUST NOT be altered by the runtime; the value of this field - // MUST be identical to that of the corresponding PodSandboxConfig used to - // instantiate the pod sandbox this status represents. - map annotations = 8; -} - -message PodSandboxStatusResponse { - // Status of the PodSandbox. - PodSandboxStatus status = 1; - // Info is extra information of the PodSandbox. The key could be arbitrary string, and - // value should be in json format. The information could include anything useful for - // debug, e.g. network namespace for linux container based container runtime. - // It should only be returned non-empty when Verbose is true. - map info = 2; -} - -// PodSandboxStateValue is the wrapper of PodSandboxState. -message PodSandboxStateValue { - // State of the sandbox. - PodSandboxState state = 1; -} - -// PodSandboxFilter is used to filter a list of PodSandboxes. -// All those fields are combined with 'AND' -message PodSandboxFilter { - // ID of the sandbox. - string id = 1; - // State of the sandbox. - PodSandboxStateValue state = 2; - // LabelSelector to select matches. - // Only api.MatchLabels is supported for now and the requirements - // are ANDed. MatchExpressions is not supported yet. - map label_selector = 3; -} - -message ListPodSandboxRequest { - // PodSandboxFilter to filter a list of PodSandboxes. - PodSandboxFilter filter = 1; -} - - -// PodSandbox contains minimal information about a sandbox. -message PodSandbox { - // ID of the PodSandbox. - string id = 1; - // Metadata of the PodSandbox. - PodSandboxMetadata metadata = 2; - // State of the PodSandbox. - PodSandboxState state = 3; - // Creation timestamps of the PodSandbox in nanoseconds. Must be > 0. - int64 created_at = 4; - // Labels of the PodSandbox. - map labels = 5; - // Unstructured key-value map holding arbitrary metadata. - // Annotations MUST NOT be altered by the runtime; the value of this field - // MUST be identical to that of the corresponding PodSandboxConfig used to - // instantiate this PodSandbox. - map annotations = 6; -} - -message ListPodSandboxResponse { - // List of PodSandboxes. - repeated PodSandbox items = 1; -} - -// ImageSpec is an internal representation of an image. Currently, it wraps the -// value of a Container's Image field (e.g. imageID or imageDigest), but in the -// future it will include more detailed information about the different image types. -message ImageSpec { - string image = 1; -} - -message KeyValue { - string key = 1; - string value = 2; -} - -// LinuxContainerResources specifies Linux specific configuration for -// resources. -// TODO: Consider using Resources from opencontainers/runtime-spec/specs-go -// directly. -message LinuxContainerResources { - // CPU CFS (Completely Fair Scheduler) period. Default: 0 (not specified). - int64 cpu_period = 1; - // CPU CFS (Completely Fair Scheduler) quota. Default: 0 (not specified). - int64 cpu_quota = 2; - // CPU shares (relative weight vs. other containers). Default: 0 (not specified). - int64 cpu_shares = 3; - // Memory limit in bytes. Default: 0 (not specified). - int64 memory_limit_in_bytes = 4; - // OOMScoreAdj adjusts the oom-killer score. Default: 0 (not specified). - int64 oom_score_adj = 5; - // CpusetCpus constrains the allowed set of logical CPUs. Default: "" (not specified). - string cpuset_cpus = 6; - // CpusetMems constrains the allowed set of memory nodes. Default: "" (not specified). - string cpuset_mems = 7; -} - -// SELinuxOption are the labels to be applied to the container. -message SELinuxOption { - string user = 1; - string role = 2; - string type = 3; - string level = 4; -} - -// Capability contains the container capabilities to add or drop -message Capability { - // List of capabilities to add. - repeated string add_capabilities = 1; - // List of capabilities to drop. - repeated string drop_capabilities = 2; -} - -// LinuxContainerSecurityContext holds linux security configuration that will be applied to a container. -message LinuxContainerSecurityContext { - // Capabilities to add or drop. - Capability capabilities = 1; - // If set, run container in privileged mode. - // Privileged mode is incompatible with the following options. If - // privileged is set, the following features MAY have no effect: - // 1. capabilities - // 2. selinux_options - // 4. seccomp - // 5. apparmor - // - // Privileged mode implies the following specific options are applied: - // 1. All capabilities are added. - // 2. Sensitive paths, such as kernel module paths within sysfs, are not masked. - // 3. Any sysfs and procfs mounts are mounted RW. - // 4. Apparmor confinement is not applied. - // 5. Seccomp restrictions are not applied. - // 6. The device cgroup does not restrict access to any devices. - // 7. All devices from the host's /dev are available within the container. - // 8. SELinux restrictions are not applied (e.g. label=disabled). - bool privileged = 2; - // Configurations for the container's namespaces. - // Only used if the container uses namespace for isolation. - NamespaceOption namespace_options = 3; - // SELinux context to be optionally applied. - SELinuxOption selinux_options = 4; - // UID to run the container process as. Only one of run_as_user and - // run_as_username can be specified at a time. - Int64Value run_as_user = 5; - // GID to run the container process as. run_as_group should only be specified - // when run_as_user or run_as_username is specified; otherwise, the runtime - // MUST error. - Int64Value run_as_group = 12; - // User name to run the container process as. If specified, the user MUST - // exist in the container image (i.e. in the /etc/passwd inside the image), - // and be resolved there by the runtime; otherwise, the runtime MUST error. - string run_as_username = 6; - // If set, the root filesystem of the container is read-only. - bool readonly_rootfs = 7; - // List of groups applied to the first process run in the container, in - // addition to the container's primary GID. - repeated int64 supplemental_groups = 8; - // AppArmor profile for the container, candidate values are: - // * runtime/default: equivalent to not specifying a profile. - // * unconfined: no profiles are loaded - // * localhost/: profile loaded on the node - // (localhost) by name. The possible profile names are detailed at - // http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference - string apparmor_profile = 9; - // Seccomp profile for the container, candidate values are: - // * runtime/default: the default profile for the container runtime - // * unconfined: unconfined profile, ie, no seccomp sandboxing - // * localhost/: the profile installed on the node. - // is the full path of the profile. - // Default: "", which is identical with unconfined. - string seccomp_profile_path = 10; - // no_new_privs defines if the flag for no_new_privs should be set on the - // container. - bool no_new_privs = 11; -} - -// LinuxContainerConfig contains platform-specific configuration for -// Linux-based containers. -message LinuxContainerConfig { - // Resources specification for the container. - LinuxContainerResources resources = 1; - // LinuxContainerSecurityContext configuration for the container. - LinuxContainerSecurityContext security_context = 2; -} - -// WindowsContainerConfig contains platform-specific configuration for -// Windows-based containers. -message WindowsContainerConfig { - // Resources specification for the container. - WindowsContainerResources resources = 1; -} - -// WindowsContainerResources specifies Windows specific configuration for -// resources. -message WindowsContainerResources { - // CPU shares (relative weight vs. other containers). Default: 0 (not specified). - int64 cpu_shares = 1; - // Number of CPUs available to the container. Default: 0 (not specified). - int64 cpu_count = 2; - // Specifies the portion of processor cycles that this container can use as a percentage times 100. - int64 cpu_maximum = 3; - // Memory limit in bytes. Default: 0 (not specified). - int64 memory_limit_in_bytes = 4; -} - -// ContainerMetadata holds all necessary information for building the container -// name. The container runtime is encouraged to expose the metadata in its user -// interface for better user experience. E.g., runtime can construct a unique -// container name based on the metadata. Note that (name, attempt) is unique -// within a sandbox for the entire lifetime of the sandbox. -message ContainerMetadata { - // Name of the container. Same as the container name in the PodSpec. - string name = 1; - // Attempt number of creating the container. Default: 0. - uint32 attempt = 2; -} - -// Device specifies a host device to mount into a container. -message Device { - // Path of the device within the container. - string container_path = 1; - // Path of the device on the host. - string host_path = 2; - // Cgroups permissions of the device, candidates are one or more of - // * r - allows container to read from the specified device. - // * w - allows container to write to the specified device. - // * m - allows container to create device files that do not yet exist. - string permissions = 3; -} - -// ContainerConfig holds all the required and optional fields for creating a -// container. -message ContainerConfig { - // Metadata of the container. This information will uniquely identify the - // container, and the runtime should leverage this to ensure correct - // operation. The runtime may also use this information to improve UX, such - // as by constructing a readable name. - ContainerMetadata metadata = 1 ; - // Image to use. - ImageSpec image = 2; - // Command to execute (i.e., entrypoint for docker) - repeated string command = 3; - // Args for the Command (i.e., command for docker) - repeated string args = 4; - // Current working directory of the command. - string working_dir = 5; - // List of environment variable to set in the container. - repeated KeyValue envs = 6; - // Mounts for the container. - repeated Mount mounts = 7; - // Devices for the container. - repeated Device devices = 8; - // Key-value pairs that may be used to scope and select individual resources. - // Label keys are of the form: - // label-key ::= prefixed-name | name - // prefixed-name ::= prefix '/' name - // prefix ::= DNS_SUBDOMAIN - // name ::= DNS_LABEL - map labels = 9; - // Unstructured key-value map that may be used by the kubelet to store and - // retrieve arbitrary metadata. - // - // Annotations MUST NOT be altered by the runtime; the annotations stored - // here MUST be returned in the ContainerStatus associated with the container - // this ContainerConfig creates. - // - // In general, in order to preserve a well-defined interface between the - // kubelet and the container runtime, annotations SHOULD NOT influence - // runtime behaviour. - map annotations = 10; - // Path relative to PodSandboxConfig.LogDirectory for container to store - // the log (STDOUT and STDERR) on the host. - // E.g., - // PodSandboxConfig.LogDirectory = `/var/log/pods//` - // ContainerConfig.LogPath = `containerName/Instance#.log` - // - // WARNING: Log management and how kubelet should interface with the - // container logs are under active discussion in - // https://issues.k8s.io/24677. There *may* be future change of direction - // for logging as the discussion carries on. - string log_path = 11; - - // Variables for interactive containers, these have very specialized - // use-cases (e.g. debugging). - // TODO: Determine if we need to continue supporting these fields that are - // part of Kubernetes's Container Spec. - bool stdin = 12; - bool stdin_once = 13; - bool tty = 14; - - // Configuration specific to Linux containers. - LinuxContainerConfig linux = 15; - // Configuration specific to Windows containers. - WindowsContainerConfig windows = 16; -} - -message CreateContainerRequest { - // ID of the PodSandbox in which the container should be created. - string pod_sandbox_id = 1; - // Config of the container. - ContainerConfig config = 2; - // Config of the PodSandbox. This is the same config that was passed - // to RunPodSandboxRequest to create the PodSandbox. It is passed again - // here just for easy reference. The PodSandboxConfig is immutable and - // remains the same throughout the lifetime of the pod. - PodSandboxConfig sandbox_config = 3; -} - -message CreateContainerResponse { - // ID of the created container. - string container_id = 1; -} - -message StartContainerRequest { - // ID of the container to start. - string container_id = 1; -} - -message StartContainerResponse {} - -message StopContainerRequest { - // ID of the container to stop. - string container_id = 1; - // Timeout in seconds to wait for the container to stop before forcibly - // terminating it. Default: 0 (forcibly terminate the container immediately) - int64 timeout = 2; -} - -message StopContainerResponse {} - -message RemoveContainerRequest { - // ID of the container to remove. - string container_id = 1; -} - -message RemoveContainerResponse {} - -enum ContainerState { - CONTAINER_CREATED = 0; - CONTAINER_RUNNING = 1; - CONTAINER_EXITED = 2; - CONTAINER_UNKNOWN = 3; -} - -// ContainerStateValue is the wrapper of ContainerState. -message ContainerStateValue { - // State of the container. - ContainerState state = 1; -} - -// ContainerFilter is used to filter containers. -// All those fields are combined with 'AND' -message ContainerFilter { - // ID of the container. - string id = 1; - // State of the container. - ContainerStateValue state = 2; - // ID of the PodSandbox. - string pod_sandbox_id = 3; - // LabelSelector to select matches. - // Only api.MatchLabels is supported for now and the requirements - // are ANDed. MatchExpressions is not supported yet. - map label_selector = 4; -} - -message ListContainersRequest { - ContainerFilter filter = 1; -} - -// Container provides the runtime information for a container, such as ID, hash, -// state of the container. -message Container { - // ID of the container, used by the container runtime to identify - // a container. - string id = 1; - // ID of the sandbox to which this container belongs. - string pod_sandbox_id = 2; - // Metadata of the container. - ContainerMetadata metadata = 3; - // Spec of the image. - ImageSpec image = 4; - // Reference to the image in use. For most runtimes, this should be an - // image ID. - string image_ref = 5; - // State of the container. - ContainerState state = 6; - // Creation time of the container in nanoseconds. - int64 created_at = 7; - // Key-value pairs that may be used to scope and select individual resources. - map labels = 8; - // Unstructured key-value map holding arbitrary metadata. - // Annotations MUST NOT be altered by the runtime; the value of this field - // MUST be identical to that of the corresponding ContainerConfig used to - // instantiate this Container. - map annotations = 9; -} - -message ListContainersResponse { - // List of containers. - repeated Container containers = 1; -} - -message ContainerStatusRequest { - // ID of the container for which to retrieve status. - string container_id = 1; - // Verbose indicates whether to return extra information about the container. - bool verbose = 2; -} - -// ContainerStatus represents the status of a container. -message ContainerStatus { - // ID of the container. - string id = 1; - // Metadata of the container. - ContainerMetadata metadata = 2; - // Status of the container. - ContainerState state = 3; - // Creation time of the container in nanoseconds. - int64 created_at = 4; - // Start time of the container in nanoseconds. Default: 0 (not specified). - int64 started_at = 5; - // Finish time of the container in nanoseconds. Default: 0 (not specified). - int64 finished_at = 6; - // Exit code of the container. Only required when finished_at != 0. Default: 0. - int32 exit_code = 7; - // Spec of the image. - ImageSpec image = 8; - // Reference to the image in use. For most runtimes, this should be an - // image ID - string image_ref = 9; - // Brief CamelCase string explaining why container is in its current state. - string reason = 10; - // Human-readable message indicating details about why container is in its - // current state. - string message = 11; - // Key-value pairs that may be used to scope and select individual resources. - map labels = 12; - // Unstructured key-value map holding arbitrary metadata. - // Annotations MUST NOT be altered by the runtime; the value of this field - // MUST be identical to that of the corresponding ContainerConfig used to - // instantiate the Container this status represents. - map annotations = 13; - // Mounts for the container. - repeated Mount mounts = 14; - // Log path of container. - string log_path = 15; -} - -message ContainerStatusResponse { - // Status of the container. - ContainerStatus status = 1; - // Info is extra information of the Container. The key could be arbitrary string, and - // value should be in json format. The information could include anything useful for - // debug, e.g. pid for linux container based container runtime. - // It should only be returned non-empty when Verbose is true. - map info = 2; -} - -message UpdateContainerResourcesRequest { - // ID of the container to update. - string container_id = 1; - // Resource configuration specific to Linux containers. - LinuxContainerResources linux = 2; -} - -message UpdateContainerResourcesResponse {} - -message ExecSyncRequest { - // ID of the container. - string container_id = 1; - // Command to execute. - repeated string cmd = 2; - // Timeout in seconds to stop the command. Default: 0 (run forever). - int64 timeout = 3; -} - -message ExecSyncResponse { - // Captured command stdout output. - bytes stdout = 1; - // Captured command stderr output. - bytes stderr = 2; - // Exit code the command finished with. Default: 0 (success). - int32 exit_code = 3; -} - -message ExecRequest { - // ID of the container in which to execute the command. - string container_id = 1; - // Command to execute. - repeated string cmd = 2; - // Whether to exec the command in a TTY. - bool tty = 3; - // Whether to stream stdin. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - bool stdin = 4; - // Whether to stream stdout. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - bool stdout = 5; - // Whether to stream stderr. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported - // in this case. The output of stdout and stderr will be combined to a - // single stream. - bool stderr = 6; -} - -message ExecResponse { - // Fully qualified URL of the exec streaming server. - string url = 1; -} - -message AttachRequest { - // ID of the container to which to attach. - string container_id = 1; - // Whether to stream stdin. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - bool stdin = 2; - // Whether the process being attached is running in a TTY. - // This must match the TTY setting in the ContainerConfig. - bool tty = 3; - // Whether to stream stdout. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - bool stdout = 4; - // Whether to stream stderr. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported - // in this case. The output of stdout and stderr will be combined to a - // single stream. - bool stderr = 5; -} - -message AttachResponse { - // Fully qualified URL of the attach streaming server. - string url = 1; -} - -message PortForwardRequest { - // ID of the container to which to forward the port. - string pod_sandbox_id = 1; - // Port to forward. - repeated int32 port = 2; -} - -message PortForwardResponse { - // Fully qualified URL of the port-forward streaming server. - string url = 1; -} - -message ImageFilter { - // Spec of the image. - ImageSpec image = 1; -} - -message ListImagesRequest { - // Filter to list images. - ImageFilter filter = 1; -} - -// Basic information about a container image. -message Image { - // ID of the image. - string id = 1; - // Other names by which this image is known. - repeated string repo_tags = 2; - // Digests by which this image is known. - repeated string repo_digests = 3; - // Size of the image in bytes. Must be > 0. - uint64 size = 4; - // UID that will run the command(s). This is used as a default if no user is - // specified when creating the container. UID and the following user name - // are mutually exclusive. - Int64Value uid = 5; - // User name that will run the command(s). This is used if UID is not set - // and no user is specified when creating container. - string username = 6; -} - -message ListImagesResponse { - // List of images. - repeated Image images = 1; -} - -message ImageStatusRequest { - // Spec of the image. - ImageSpec image = 1; - // Verbose indicates whether to return extra information about the image. - bool verbose = 2; -} - -message ImageStatusResponse { - // Status of the image. - Image image = 1; - // Info is extra information of the Image. The key could be arbitrary string, and - // value should be in json format. The information could include anything useful - // for debug, e.g. image config for oci image based container runtime. - // It should only be returned non-empty when Verbose is true. - map info = 2; -} - -// AuthConfig contains authorization information for connecting to a registry. -message AuthConfig { - string username = 1; - string password = 2; - string auth = 3; - string server_address = 4; - // IdentityToken is used to authenticate the user and get - // an access token for the registry. - string identity_token = 5; - // RegistryToken is a bearer token to be sent to a registry - string registry_token = 6; -} - -message PullImageRequest { - // Spec of the image. - ImageSpec image = 1; - // Authentication configuration for pulling the image. - AuthConfig auth = 2; - // Config of the PodSandbox, which is used to pull image in PodSandbox context. - PodSandboxConfig sandbox_config = 3; -} - -message PullImageResponse { - // Reference to the image in use. For most runtimes, this should be an - // image ID or digest. - string image_ref = 1; -} - -message RemoveImageRequest { - // Spec of the image to remove. - ImageSpec image = 1; -} - -message RemoveImageResponse {} - -message NetworkConfig { - // CIDR to use for pod IP addresses. If the CIDR is empty, runtimes - // should omit it. - string pod_cidr = 1; -} - -message RuntimeConfig { - NetworkConfig network_config = 1; -} - -message UpdateRuntimeConfigRequest { - RuntimeConfig runtime_config = 1; -} - -message UpdateRuntimeConfigResponse {} - -// RuntimeCondition contains condition information for the runtime. -// There are 2 kinds of runtime conditions: -// 1. Required conditions: Conditions are required for kubelet to work -// properly. If any required condition is unmet, the node will be not ready. -// The required conditions include: -// * RuntimeReady: RuntimeReady means the runtime is up and ready to accept -// basic containers e.g. container only needs host network. -// * NetworkReady: NetworkReady means the runtime network is up and ready to -// accept containers which require container network. -// 2. Optional conditions: Conditions are informative to the user, but kubelet -// will not rely on. Since condition type is an arbitrary string, all conditions -// not required are optional. These conditions will be exposed to users to help -// them understand the status of the system. -message RuntimeCondition { - // Type of runtime condition. - string type = 1; - // Status of the condition, one of true/false. Default: false. - bool status = 2; - // Brief CamelCase string containing reason for the condition's last transition. - string reason = 3; - // Human-readable message indicating details about last transition. - string message = 4; -} - -// RuntimeStatus is information about the current status of the runtime. -message RuntimeStatus { - // List of current observed runtime conditions. - repeated RuntimeCondition conditions = 1; -} - -message StatusRequest { - // Verbose indicates whether to return extra information about the runtime. - bool verbose = 1; -} - -message StatusResponse { - // Status of the Runtime. - RuntimeStatus status = 1; - // Info is extra information of the Runtime. The key could be arbitrary string, and - // value should be in json format. The information could include anything useful for - // debug, e.g. plugins used by the container runtime. - // It should only be returned non-empty when Verbose is true. - map info = 2; -} - -message ImageFsInfoRequest {} - -// UInt64Value is the wrapper of uint64. -message UInt64Value { - // The value. - uint64 value = 1; -} - -// FilesystemIdentifier uniquely identify the filesystem. -message FilesystemIdentifier{ - // Mountpoint of a filesystem. - string mountpoint = 1; -} - -// FilesystemUsage provides the filesystem usage information. -message FilesystemUsage { - // Timestamp in nanoseconds at which the information were collected. Must be > 0. - int64 timestamp = 1; - // The unique identifier of the filesystem. - FilesystemIdentifier fs_id = 2; - // UsedBytes represents the bytes used for images on the filesystem. - // This may differ from the total bytes used on the filesystem and may not - // equal CapacityBytes - AvailableBytes. - UInt64Value used_bytes = 3; - // InodesUsed represents the inodes used by the images. - // This may not equal InodesCapacity - InodesAvailable because the underlying - // filesystem may also be used for purposes other than storing images. - UInt64Value inodes_used = 4; -} - -message ImageFsInfoResponse { - // Information of image filesystem(s). - repeated FilesystemUsage image_filesystems = 1; -} - -message ContainerStatsRequest{ - // ID of the container for which to retrieve stats. - string container_id = 1; -} - -message ContainerStatsResponse { - // Stats of the container. - ContainerStats stats = 1; -} - -message ListContainerStatsRequest{ - // Filter for the list request. - ContainerStatsFilter filter = 1; -} - -// ContainerStatsFilter is used to filter containers. -// All those fields are combined with 'AND' -message ContainerStatsFilter { - // ID of the container. - string id = 1; - // ID of the PodSandbox. - string pod_sandbox_id = 2; - // LabelSelector to select matches. - // Only api.MatchLabels is supported for now and the requirements - // are ANDed. MatchExpressions is not supported yet. - map label_selector = 3; -} - -message ListContainerStatsResponse { - // Stats of the container. - repeated ContainerStats stats = 1; -} - -// ContainerAttributes provides basic information of the container. -message ContainerAttributes { - // ID of the container. - string id = 1; - // Metadata of the container. - ContainerMetadata metadata = 2; - // Key-value pairs that may be used to scope and select individual resources. - map labels = 3; - // Unstructured key-value map holding arbitrary metadata. - // Annotations MUST NOT be altered by the runtime; the value of this field - // MUST be identical to that of the corresponding ContainerConfig used to - // instantiate the Container this status represents. - map annotations = 4; -} - -// ContainerStats provides the resource usage statistics for a container. -message ContainerStats { - // Information of the container. - ContainerAttributes attributes = 1; - // CPU usage gathered from the container. - CpuUsage cpu = 2; - // Memory usage gathered from the container. - MemoryUsage memory = 3; - // Usage of the writeable layer. - FilesystemUsage writable_layer = 4; -} - -// CpuUsage provides the CPU usage information. -message CpuUsage { - // Timestamp in nanoseconds at which the information were collected. Must be > 0. - int64 timestamp = 1; - // Cumulative CPU usage (sum across all cores) since object creation. - UInt64Value usage_core_nano_seconds = 2; -} - -// MemoryUsage provides the memory usage information. -message MemoryUsage { - // Timestamp in nanoseconds at which the information were collected. Must be > 0. - int64 timestamp = 1; - // The amount of working set memory in bytes. - UInt64Value working_set_bytes = 2; -} - -message ReopenContainerLogRequest { - // ID of the container for which to reopen the log. - string container_id = 1; -} - -message ReopenContainerLogResponse{ -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.proto b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.proto deleted file mode 100644 index 93428edc8a..0000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.proto +++ /dev/null @@ -1,1155 +0,0 @@ -// To regenerate api.pb.go run hack/update-generated-runtime.sh -syntax = 'proto3'; - -package runtime; - -import "github.com/gogo/protobuf/gogoproto/gogo.proto"; - -option (gogoproto.goproto_stringer_all) = false; -option (gogoproto.stringer_all) = true; -option (gogoproto.goproto_getters_all) = true; -option (gogoproto.marshaler_all) = true; -option (gogoproto.sizer_all) = true; -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.goproto_unrecognized_all) = false; - -// Runtime service defines the public APIs for remote container runtimes -service RuntimeService { - // Version returns the runtime name, runtime version, and runtime API version. - rpc Version(VersionRequest) returns (VersionResponse) {} - - // RunPodSandbox creates and starts a pod-level sandbox. Runtimes must ensure - // the sandbox is in the ready state on success. - rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} - // StopPodSandbox stops any running process that is part of the sandbox and - // reclaims network resources (e.g., IP addresses) allocated to the sandbox. - // If there are any running containers in the sandbox, they must be forcibly - // terminated. - // This call is idempotent, and must not return an error if all relevant - // resources have already been reclaimed. kubelet will call StopPodSandbox - // at least once before calling RemovePodSandbox. It will also attempt to - // reclaim resources eagerly, as soon as a sandbox is not needed. Hence, - // multiple StopPodSandbox calls are expected. - rpc StopPodSandbox(StopPodSandboxRequest) returns (StopPodSandboxResponse) {} - // RemovePodSandbox removes the sandbox. If there are any running containers - // in the sandbox, they must be forcibly terminated and removed. - // This call is idempotent, and must not return an error if the sandbox has - // already been removed. - rpc RemovePodSandbox(RemovePodSandboxRequest) returns (RemovePodSandboxResponse) {} - // PodSandboxStatus returns the status of the PodSandbox. If the PodSandbox is not - // present, returns an error. - rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) {} - // ListPodSandbox returns a list of PodSandboxes. - rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} - - // CreateContainer creates a new container in specified PodSandbox - rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {} - // StartContainer starts the container. - rpc StartContainer(StartContainerRequest) returns (StartContainerResponse) {} - // StopContainer stops a running container with a grace period (i.e., timeout). - // This call is idempotent, and must not return an error if the container has - // already been stopped. - // TODO: what must the runtime do after the grace period is reached? - rpc StopContainer(StopContainerRequest) returns (StopContainerResponse) {} - // RemoveContainer removes the container. If the container is running, the - // container must be forcibly removed. - // This call is idempotent, and must not return an error if the container has - // already been removed. - rpc RemoveContainer(RemoveContainerRequest) returns (RemoveContainerResponse) {} - // ListContainers lists all containers by filters. - rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} - // ContainerStatus returns status of the container. If the container is not - // present, returns an error. - rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} - // UpdateContainerResources updates ContainerConfig of the container. - rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateContainerResourcesResponse) {} - - // ExecSync runs a command in a container synchronously. - rpc ExecSync(ExecSyncRequest) returns (ExecSyncResponse) {} - // Exec prepares a streaming endpoint to execute a command in the container. - rpc Exec(ExecRequest) returns (ExecResponse) {} - // Attach prepares a streaming endpoint to attach to a running container. - rpc Attach(AttachRequest) returns (AttachResponse) {} - // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. - rpc PortForward(PortForwardRequest) returns (PortForwardResponse) {} - - // ContainerStats returns stats of the container. If the container does not - // exist, the call returns an error. - rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} - // ListContainerStats returns stats of all running containers. - rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} - - // UpdateRuntimeConfig updates the runtime configuration based on the given request. - rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse) {} - - // Status returns the status of the runtime. - rpc Status(StatusRequest) returns (StatusResponse) {} -} - -// ImageService defines the public APIs for managing images. -service ImageService { - // ListImages lists existing images. - rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} - // ImageStatus returns the status of the image. If the image is not - // present, returns a response with ImageStatusResponse.Image set to - // nil. - rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} - // PullImage pulls an image with authentication config. - rpc PullImage(PullImageRequest) returns (PullImageResponse) {} - // RemoveImage removes the image. - // This call is idempotent, and must not return an error if the image has - // already been removed. - rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} - // ImageFSInfo returns information of the filesystem that is used to store images. - rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} -} - -message VersionRequest { - // Version of the kubelet runtime API. - string version = 1; -} - -message VersionResponse { - // Version of the kubelet runtime API. - string version = 1; - // Name of the container runtime. - string runtime_name = 2; - // Version of the container runtime. The string must be - // semver-compatible. - string runtime_version = 3; - // API version of the container runtime. The string must be - // semver-compatible. - string runtime_api_version = 4; -} - -// DNSConfig specifies the DNS servers and search domains of a sandbox. -message DNSConfig { - // List of DNS servers of the cluster. - repeated string servers = 1; - // List of DNS search domains of the cluster. - repeated string searches = 2; - // List of DNS options. See https://linux.die.net/man/5/resolv.conf - // for all available options. - repeated string options = 3; -} - -enum Protocol { - TCP = 0; - UDP = 1; -} - -// PortMapping specifies the port mapping configurations of a sandbox. -message PortMapping { - // Protocol of the port mapping. - Protocol protocol = 1; - // Port number within the container. Default: 0 (not specified). - int32 container_port = 2; - // Port number on the host. Default: 0 (not specified). - int32 host_port = 3; - // Host IP. - string host_ip = 4; -} - -enum MountPropagation { - // No mount propagation ("private" in Linux terminology). - PROPAGATION_PRIVATE = 0; - // Mounts get propagated from the host to the container ("rslave" in Linux). - PROPAGATION_HOST_TO_CONTAINER = 1; - // Mounts get propagated from the host to the container and from the - // container to the host ("rshared" in Linux). - PROPAGATION_BIDIRECTIONAL = 2; -} - -// Mount specifies a host volume to mount into a container. -message Mount { - // Path of the mount within the container. - string container_path = 1; - // Path of the mount on the host. - string host_path = 2; - // If set, the mount is read-only. - bool readonly = 3; - // If set, the mount needs SELinux relabeling. - bool selinux_relabel = 4; - // Requested propagation mode. - MountPropagation propagation = 5; -} - -// NamespaceOption provides options for Linux namespaces. -message NamespaceOption { - // If set, use the host's network namespace. - bool host_network = 1; - // If set, use the host's PID namespace. - bool host_pid = 2; - // If set, use the host's IPC namespace. - bool host_ipc = 3; -} - -// Int64Value is the wrapper of int64. -message Int64Value { - // The value. - int64 value = 1; -} - -// LinuxSandboxSecurityContext holds linux security configuration that will be -// applied to a sandbox. Note that: -// 1) It does not apply to containers in the pods. -// 2) It may not be applicable to a PodSandbox which does not contain any running -// process. -message LinuxSandboxSecurityContext { - // Configurations for the sandbox's namespaces. - // This will be used only if the PodSandbox uses namespace for isolation. - NamespaceOption namespace_options = 1; - // Optional SELinux context to be applied. - SELinuxOption selinux_options = 2; - // UID to run sandbox processes as, when applicable. - Int64Value run_as_user = 3; - // If set, the root filesystem of the sandbox is read-only. - bool readonly_rootfs = 4; - // List of groups applied to the first process run in the sandbox, in - // addition to the sandbox's primary GID. - repeated int64 supplemental_groups = 5; - // Indicates whether the sandbox will be asked to run a privileged - // container. If a privileged container is to be executed within it, this - // MUST be true. - // This allows a sandbox to take additional security precautions if no - // privileged containers are expected to be run. - bool privileged = 6; - // Seccomp profile for the sandbox, candidate values are: - // * docker/default: the default profile for the docker container runtime - // * unconfined: unconfined profile, ie, no seccomp sandboxing - // * localhost/: the profile installed on the node. - // is the full path of the profile. - // Default: "", which is identical with unconfined. - string seccomp_profile_path = 7; -} - -// LinuxPodSandboxConfig holds platform-specific configurations for Linux -// host platforms and Linux-based containers. -message LinuxPodSandboxConfig { - // Parent cgroup of the PodSandbox. - // The cgroupfs style syntax will be used, but the container runtime can - // convert it to systemd semantics if needed. - string cgroup_parent = 1; - // LinuxSandboxSecurityContext holds sandbox security attributes. - LinuxSandboxSecurityContext security_context = 2; - // Sysctls holds linux sysctls config for the sandbox. - map sysctls = 3; -} - -// PodSandboxMetadata holds all necessary information for building the sandbox name. -// The container runtime is encouraged to expose the metadata associated with the -// PodSandbox in its user interface for better user experience. For example, -// the runtime can construct a unique PodSandboxName based on the metadata. -message PodSandboxMetadata { - // Pod name of the sandbox. Same as the pod name in the PodSpec. - string name = 1; - // Pod UID of the sandbox. Same as the pod UID in the PodSpec. - string uid = 2; - // Pod namespace of the sandbox. Same as the pod namespace in the PodSpec. - string namespace = 3; - // Attempt number of creating the sandbox. Default: 0. - uint32 attempt = 4; -} - -// PodSandboxConfig holds all the required and optional fields for creating a -// sandbox. -message PodSandboxConfig { - // Metadata of the sandbox. This information will uniquely identify the - // sandbox, and the runtime should leverage this to ensure correct - // operation. The runtime may also use this information to improve UX, such - // as by constructing a readable name. - PodSandboxMetadata metadata = 1; - // Hostname of the sandbox. - string hostname = 2; - // Path to the directory on the host in which container log files are - // stored. - // By default the log of a container going into the LogDirectory will be - // hooked up to STDOUT and STDERR. However, the LogDirectory may contain - // binary log files with structured logging data from the individual - // containers. For example, the files might be newline separated JSON - // structured logs, systemd-journald journal files, gRPC trace files, etc. - // E.g., - // PodSandboxConfig.LogDirectory = `/var/log/pods//` - // ContainerConfig.LogPath = `containerName_Instance#.log` - // - // WARNING: Log management and how kubelet should interface with the - // container logs are under active discussion in - // https://issues.k8s.io/24677. There *may* be future change of direction - // for logging as the discussion carries on. - string log_directory = 3; - // DNS config for the sandbox. - DNSConfig dns_config = 4; - // Port mappings for the sandbox. - repeated PortMapping port_mappings = 5; - // Key-value pairs that may be used to scope and select individual resources. - map labels = 6; - // Unstructured key-value map that may be set by the kubelet to store and - // retrieve arbitrary metadata. This will include any annotations set on a - // pod through the Kubernetes API. - // - // Annotations MUST NOT be altered by the runtime; the annotations stored - // here MUST be returned in the PodSandboxStatus associated with the pod - // this PodSandboxConfig creates. - // - // In general, in order to preserve a well-defined interface between the - // kubelet and the container runtime, annotations SHOULD NOT influence - // runtime behaviour. - // - // Annotations can also be useful for runtime authors to experiment with - // new features that are opaque to the Kubernetes APIs (both user-facing - // and the CRI). Whenever possible, however, runtime authors SHOULD - // consider proposing new typed fields for any new features instead. - map annotations = 7; - // Optional configurations specific to Linux hosts. - LinuxPodSandboxConfig linux = 8; -} - -message RunPodSandboxRequest { - // Configuration for creating a PodSandbox. - PodSandboxConfig config = 1; -} - -message RunPodSandboxResponse { - // ID of the PodSandbox to run. - string pod_sandbox_id = 1; -} - -message StopPodSandboxRequest { - // ID of the PodSandbox to stop. - string pod_sandbox_id = 1; -} - -message StopPodSandboxResponse {} - -message RemovePodSandboxRequest { - // ID of the PodSandbox to remove. - string pod_sandbox_id = 1; -} - -message RemovePodSandboxResponse {} - -message PodSandboxStatusRequest { - // ID of the PodSandbox for which to retrieve status. - string pod_sandbox_id = 1; - // Verbose indicates whether to return extra information about the pod sandbox. - bool verbose = 2; -} - -// PodSandboxNetworkStatus is the status of the network for a PodSandbox. -message PodSandboxNetworkStatus { - // IP address of the PodSandbox. - string ip = 1; -} - -// Namespace contains paths to the namespaces. -message Namespace { - // Namespace options for Linux namespaces. - NamespaceOption options = 2; -} - -// LinuxSandboxStatus contains status specific to Linux sandboxes. -message LinuxPodSandboxStatus { - // Paths to the sandbox's namespaces. - Namespace namespaces = 1; -} - -enum PodSandboxState { - SANDBOX_READY = 0; - SANDBOX_NOTREADY = 1; -} - -// PodSandboxStatus contains the status of the PodSandbox. -message PodSandboxStatus { - // ID of the sandbox. - string id = 1; - // Metadata of the sandbox. - PodSandboxMetadata metadata = 2; - // State of the sandbox. - PodSandboxState state = 3; - // Creation timestamp of the sandbox in nanoseconds. Must be > 0. - int64 created_at = 4; - // Network contains network status if network is handled by the runtime. - PodSandboxNetworkStatus network = 5; - // Linux-specific status to a pod sandbox. - LinuxPodSandboxStatus linux = 6; - // Labels are key-value pairs that may be used to scope and select individual resources. - map labels = 7; - // Unstructured key-value map holding arbitrary metadata. - // Annotations MUST NOT be altered by the runtime; the value of this field - // MUST be identical to that of the corresponding PodSandboxConfig used to - // instantiate the pod sandbox this status represents. - map annotations = 8; -} - -message PodSandboxStatusResponse { - // Status of the PodSandbox. - PodSandboxStatus status = 1; - // Info is extra information of the PodSandbox. The key could be abitrary string, and - // value should be in json format. The information could include anything useful for - // debug, e.g. network namespace for linux container based container runtime. - // It should only be returned non-empty when Verbose is true. - map info = 2; -} - -// PodSandboxStateValue is the wrapper of PodSandboxState. -message PodSandboxStateValue { - // State of the sandbox. - PodSandboxState state = 1; -} - -// PodSandboxFilter is used to filter a list of PodSandboxes. -// All those fields are combined with 'AND' -message PodSandboxFilter { - // ID of the sandbox. - string id = 1; - // State of the sandbox. - PodSandboxStateValue state = 2; - // LabelSelector to select matches. - // Only api.MatchLabels is supported for now and the requirements - // are ANDed. MatchExpressions is not supported yet. - map label_selector = 3; -} - -message ListPodSandboxRequest { - // PodSandboxFilter to filter a list of PodSandboxes. - PodSandboxFilter filter = 1; -} - - -// PodSandbox contains minimal information about a sandbox. -message PodSandbox { - // ID of the PodSandbox. - string id = 1; - // Metadata of the PodSandbox. - PodSandboxMetadata metadata = 2; - // State of the PodSandbox. - PodSandboxState state = 3; - // Creation timestamps of the PodSandbox in nanoseconds. Must be > 0. - int64 created_at = 4; - // Labels of the PodSandbox. - map labels = 5; - // Unstructured key-value map holding arbitrary metadata. - // Annotations MUST NOT be altered by the runtime; the value of this field - // MUST be identical to that of the corresponding PodSandboxConfig used to - // instantiate this PodSandbox. - map annotations = 6; -} - -message ListPodSandboxResponse { - // List of PodSandboxes. - repeated PodSandbox items = 1; -} - -// ImageSpec is an internal representation of an image. Currently, it wraps the -// value of a Container's Image field (e.g. imageID or imageDigest), but in the -// future it will include more detailed information about the different image types. -message ImageSpec { - string image = 1; -} - -message KeyValue { - string key = 1; - string value = 2; -} - -// LinuxContainerResources specifies Linux specific configuration for -// resources. -// TODO: Consider using Resources from opencontainers/runtime-spec/specs-go -// directly. -message LinuxContainerResources { - // CPU CFS (Completely Fair Scheduler) period. Default: 0 (not specified). - int64 cpu_period = 1; - // CPU CFS (Completely Fair Scheduler) quota. Default: 0 (not specified). - int64 cpu_quota = 2; - // CPU shares (relative weight vs. other containers). Default: 0 (not specified). - int64 cpu_shares = 3; - // Memory limit in bytes. Default: 0 (not specified). - int64 memory_limit_in_bytes = 4; - // OOMScoreAdj adjusts the oom-killer score. Default: 0 (not specified). - int64 oom_score_adj = 5; - // CpusetCpus constrains the allowed set of logical CPUs. Default: "" (not specified). - string cpuset_cpus = 6; - // CpusetMems constrains the allowed set of memory nodes. Default: "" (not specified). - string cpuset_mems = 7; -} - -// SELinuxOption are the labels to be applied to the container. -message SELinuxOption { - string user = 1; - string role = 2; - string type = 3; - string level = 4; -} - -// Capability contains the container capabilities to add or drop -message Capability { - // List of capabilities to add. - repeated string add_capabilities = 1; - // List of capabilities to drop. - repeated string drop_capabilities = 2; -} - -// LinuxContainerSecurityContext holds linux security configuration that will be applied to a container. -message LinuxContainerSecurityContext { - // Capabilities to add or drop. - Capability capabilities = 1; - // If set, run container in privileged mode. - // Privileged mode is incompatible with the following options. If - // privileged is set, the following features MAY have no effect: - // 1. capabilities - // 2. selinux_options - // 4. seccomp - // 5. apparmor - // - // Privileged mode implies the following specific options are applied: - // 1. All capabilities are added. - // 2. Sensitive paths, such as kernel module paths within sysfs, are not masked. - // 3. Any sysfs and procfs mounts are mounted RW. - // 4. Apparmor confinement is not applied. - // 5. Seccomp restrictions are not applied. - // 6. The device cgroup does not restrict access to any devices. - // 7. All devices from the host's /dev are available within the container. - // 8. SELinux restrictions are not applied (e.g. label=disabled). - bool privileged = 2; - // Configurations for the container's namespaces. - // Only used if the container uses namespace for isolation. - NamespaceOption namespace_options = 3; - // SELinux context to be optionally applied. - SELinuxOption selinux_options = 4; - // UID to run the container process as. Only one of run_as_user and - // run_as_username can be specified at a time. - Int64Value run_as_user = 5; - // User name to run the container process as. If specified, the user MUST - // exist in the container image (i.e. in the /etc/passwd inside the image), - // and be resolved there by the runtime; otherwise, the runtime MUST error. - string run_as_username = 6; - // If set, the root filesystem of the container is read-only. - bool readonly_rootfs = 7; - // List of groups applied to the first process run in the container, in - // addition to the container's primary GID. - repeated int64 supplemental_groups = 8; - // AppArmor profile for the container, candidate values are: - // * runtime/default: equivalent to not specifying a profile. - // * unconfined: no profiles are loaded - // * localhost/: profile loaded on the node - // (localhost) by name. The possible profile names are detailed at - // http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference - string apparmor_profile = 9; - // Seccomp profile for the container, candidate values are: - // * docker/default: the default profile for the docker container runtime - // * unconfined: unconfined profile, ie, no seccomp sandboxing - // * localhost/: the profile installed on the node. - // is the full path of the profile. - // Default: "", which is identical with unconfined. - string seccomp_profile_path = 10; - // no_new_privs defines if the flag for no_new_privs should be set on the - // container. - bool no_new_privs = 11; -} - -// LinuxContainerConfig contains platform-specific configuration for -// Linux-based containers. -message LinuxContainerConfig { - // Resources specification for the container. - LinuxContainerResources resources = 1; - // LinuxContainerSecurityContext configuration for the container. - LinuxContainerSecurityContext security_context = 2; -} - -// ContainerMetadata holds all necessary information for building the container -// name. The container runtime is encouraged to expose the metadata in its user -// interface for better user experience. E.g., runtime can construct a unique -// container name based on the metadata. Note that (name, attempt) is unique -// within a sandbox for the entire lifetime of the sandbox. -message ContainerMetadata { - // Name of the container. Same as the container name in the PodSpec. - string name = 1; - // Attempt number of creating the container. Default: 0. - uint32 attempt = 2; -} - -// Device specifies a host device to mount into a container. -message Device { - // Path of the device within the container. - string container_path = 1; - // Path of the device on the host. - string host_path = 2; - // Cgroups permissions of the device, candidates are one or more of - // * r - allows container to read from the specified device. - // * w - allows container to write to the specified device. - // * m - allows container to create device files that do not yet exist. - string permissions = 3; -} - -// ContainerConfig holds all the required and optional fields for creating a -// container. -message ContainerConfig { - // Metadata of the container. This information will uniquely identify the - // container, and the runtime should leverage this to ensure correct - // operation. The runtime may also use this information to improve UX, such - // as by constructing a readable name. - ContainerMetadata metadata = 1 ; - // Image to use. - ImageSpec image = 2; - // Command to execute (i.e., entrypoint for docker) - repeated string command = 3; - // Args for the Command (i.e., command for docker) - repeated string args = 4; - // Current working directory of the command. - string working_dir = 5; - // List of environment variable to set in the container. - repeated KeyValue envs = 6; - // Mounts for the container. - repeated Mount mounts = 7; - // Devices for the container. - repeated Device devices = 8; - // Key-value pairs that may be used to scope and select individual resources. - // Label keys are of the form: - // label-key ::= prefixed-name | name - // prefixed-name ::= prefix '/' name - // prefix ::= DNS_SUBDOMAIN - // name ::= DNS_LABEL - map labels = 9; - // Unstructured key-value map that may be used by the kubelet to store and - // retrieve arbitrary metadata. - // - // Annotations MUST NOT be altered by the runtime; the annotations stored - // here MUST be returned in the ContainerStatus associated with the container - // this ContainerConfig creates. - // - // In general, in order to preserve a well-defined interface between the - // kubelet and the container runtime, annotations SHOULD NOT influence - // runtime behaviour. - map annotations = 10; - // Path relative to PodSandboxConfig.LogDirectory for container to store - // the log (STDOUT and STDERR) on the host. - // E.g., - // PodSandboxConfig.LogDirectory = `/var/log/pods//` - // ContainerConfig.LogPath = `containerName_Instance#.log` - // - // WARNING: Log management and how kubelet should interface with the - // container logs are under active discussion in - // https://issues.k8s.io/24677. There *may* be future change of direction - // for logging as the discussion carries on. - string log_path = 11; - - // Variables for interactive containers, these have very specialized - // use-cases (e.g. debugging). - // TODO: Determine if we need to continue supporting these fields that are - // part of Kubernetes's Container Spec. - bool stdin = 12; - bool stdin_once = 13; - bool tty = 14; - - // Configuration specific to Linux containers. - LinuxContainerConfig linux = 15; -} - -message CreateContainerRequest { - // ID of the PodSandbox in which the container should be created. - string pod_sandbox_id = 1; - // Config of the container. - ContainerConfig config = 2; - // Config of the PodSandbox. This is the same config that was passed - // to RunPodSandboxRequest to create the PodSandbox. It is passed again - // here just for easy reference. The PodSandboxConfig is immutable and - // remains the same throughout the lifetime of the pod. - PodSandboxConfig sandbox_config = 3; -} - -message CreateContainerResponse { - // ID of the created container. - string container_id = 1; -} - -message StartContainerRequest { - // ID of the container to start. - string container_id = 1; -} - -message StartContainerResponse {} - -message StopContainerRequest { - // ID of the container to stop. - string container_id = 1; - // Timeout in seconds to wait for the container to stop before forcibly - // terminating it. Default: 0 (forcibly terminate the container immediately) - int64 timeout = 2; -} - -message StopContainerResponse {} - -message RemoveContainerRequest { - // ID of the container to remove. - string container_id = 1; -} - -message RemoveContainerResponse {} - -enum ContainerState { - CONTAINER_CREATED = 0; - CONTAINER_RUNNING = 1; - CONTAINER_EXITED = 2; - CONTAINER_UNKNOWN = 3; -} - -// ContainerStateValue is the wrapper of ContainerState. -message ContainerStateValue { - // State of the container. - ContainerState state = 1; -} - -// ContainerFilter is used to filter containers. -// All those fields are combined with 'AND' -message ContainerFilter { - // ID of the container. - string id = 1; - // State of the container. - ContainerStateValue state = 2; - // ID of the PodSandbox. - string pod_sandbox_id = 3; - // LabelSelector to select matches. - // Only api.MatchLabels is supported for now and the requirements - // are ANDed. MatchExpressions is not supported yet. - map label_selector = 4; -} - -message ListContainersRequest { - ContainerFilter filter = 1; -} - -// Container provides the runtime information for a container, such as ID, hash, -// state of the container. -message Container { - // ID of the container, used by the container runtime to identify - // a container. - string id = 1; - // ID of the sandbox to which this container belongs. - string pod_sandbox_id = 2; - // Metadata of the container. - ContainerMetadata metadata = 3; - // Spec of the image. - ImageSpec image = 4; - // Reference to the image in use. For most runtimes, this should be an - // image ID. - string image_ref = 5; - // State of the container. - ContainerState state = 6; - // Creation time of the container in nanoseconds. - int64 created_at = 7; - // Key-value pairs that may be used to scope and select individual resources. - map labels = 8; - // Unstructured key-value map holding arbitrary metadata. - // Annotations MUST NOT be altered by the runtime; the value of this field - // MUST be identical to that of the corresponding ContainerConfig used to - // instantiate this Container. - map annotations = 9; -} - -message ListContainersResponse { - // List of containers. - repeated Container containers = 1; -} - -message ContainerStatusRequest { - // ID of the container for which to retrieve status. - string container_id = 1; - // Verbose indicates whether to return extra information about the container. - bool verbose = 2; -} - -// ContainerStatus represents the status of a container. -message ContainerStatus { - // ID of the container. - string id = 1; - // Metadata of the container. - ContainerMetadata metadata = 2; - // Status of the container. - ContainerState state = 3; - // Creation time of the container in nanoseconds. - int64 created_at = 4; - // Start time of the container in nanoseconds. Default: 0 (not specified). - int64 started_at = 5; - // Finish time of the container in nanoseconds. Default: 0 (not specified). - int64 finished_at = 6; - // Exit code of the container. Only required when finished_at != 0. Default: 0. - int32 exit_code = 7; - // Spec of the image. - ImageSpec image = 8; - // Reference to the image in use. For most runtimes, this should be an - // image ID - string image_ref = 9; - // Brief CamelCase string explaining why container is in its current state. - string reason = 10; - // Human-readable message indicating details about why container is in its - // current state. - string message = 11; - // Key-value pairs that may be used to scope and select individual resources. - map labels = 12; - // Unstructured key-value map holding arbitrary metadata. - // Annotations MUST NOT be altered by the runtime; the value of this field - // MUST be identical to that of the corresponding ContainerConfig used to - // instantiate the Container this status represents. - map annotations = 13; - // Mounts for the container. - repeated Mount mounts = 14; - // Log path of container. - string log_path = 15; -} - -message ContainerStatusResponse { - // Status of the container. - ContainerStatus status = 1; - // Info is extra information of the Container. The key could be abitrary string, and - // value should be in json format. The information could include anything useful for - // debug, e.g. pid for linux container based container runtime. - // It should only be returned non-empty when Verbose is true. - map info = 2; -} - -message UpdateContainerResourcesRequest { - // ID of the container to update. - string container_id = 1; - // Resource configuration specific to Linux containers. - LinuxContainerResources linux = 2; -} - -message UpdateContainerResourcesResponse {} - -message ExecSyncRequest { - // ID of the container. - string container_id = 1; - // Command to execute. - repeated string cmd = 2; - // Timeout in seconds to stop the command. Default: 0 (run forever). - int64 timeout = 3; -} - -message ExecSyncResponse { - // Captured command stdout output. - bytes stdout = 1; - // Captured command stderr output. - bytes stderr = 2; - // Exit code the command finished with. Default: 0 (success). - int32 exit_code = 3; -} - -message ExecRequest { - // ID of the container in which to execute the command. - string container_id = 1; - // Command to execute. - repeated string cmd = 2; - // Whether to exec the command in a TTY. - bool tty = 3; - // Whether to stream stdin. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - bool stdin = 4; - // Whether to stream stdout. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - bool stdout = 5; - // Whether to stream stderr. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported - // in this case. The output of stdout and stderr will be combined to a - // single stream. - bool stderr = 6; -} - -message ExecResponse { - // Fully qualified URL of the exec streaming server. - string url = 1; -} - -message AttachRequest { - // ID of the container to which to attach. - string container_id = 1; - // Whether to stream stdin. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - bool stdin = 2; - // Whether the process being attached is running in a TTY. - // This must match the TTY setting in the ContainerConfig. - bool tty = 3; - // Whether to stream stdout. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - bool stdout = 4; - // Whether to stream stderr. - // One of `stdin`, `stdout`, and `stderr` MUST be true. - // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported - // in this case. The output of stdout and stderr will be combined to a - // single stream. - bool stderr = 5; -} - -message AttachResponse { - // Fully qualified URL of the attach streaming server. - string url = 1; -} - -message PortForwardRequest { - // ID of the container to which to forward the port. - string pod_sandbox_id = 1; - // Port to forward. - repeated int32 port = 2; -} - -message PortForwardResponse { - // Fully qualified URL of the port-forward streaming server. - string url = 1; -} - -message ImageFilter { - // Spec of the image. - ImageSpec image = 1; -} - -message ListImagesRequest { - // Filter to list images. - ImageFilter filter = 1; -} - -// Basic information about a container image. -message Image { - // ID of the image. - string id = 1; - // Other names by which this image is known. - repeated string repo_tags = 2; - // Digests by which this image is known. - repeated string repo_digests = 3; - // Size of the image in bytes. Must be > 0. - uint64 size = 4; - // UID that will run the command(s). This is used as a default if no user is - // specified when creating the container. UID and the following user name - // are mutually exclusive. - Int64Value uid = 5; - // User name that will run the command(s). This is used if UID is not set - // and no user is specified when creating container. - string username = 6; -} - -message ListImagesResponse { - // List of images. - repeated Image images = 1; -} - -message ImageStatusRequest { - // Spec of the image. - ImageSpec image = 1; - // Verbose indicates whether to return extra information about the image. - bool verbose = 2; -} - -message ImageStatusResponse { - // Status of the image. - Image image = 1; - // Info is extra information of the Image. The key could be abitrary string, and - // value should be in json format. The information could include anything useful - // for debug, e.g. image config for oci image based container runtime. - // It should only be returned non-empty when Verbose is true. - map info = 2; -} - -// AuthConfig contains authorization information for connecting to a registry. -message AuthConfig { - string username = 1; - string password = 2; - string auth = 3; - string server_address = 4; - // IdentityToken is used to authenticate the user and get - // an access token for the registry. - string identity_token = 5; - // RegistryToken is a bearer token to be sent to a registry - string registry_token = 6; -} - -message PullImageRequest { - // Spec of the image. - ImageSpec image = 1; - // Authentication configuration for pulling the image. - AuthConfig auth = 2; - // Config of the PodSandbox, which is used to pull image in PodSandbox context. - PodSandboxConfig sandbox_config = 3; -} - -message PullImageResponse { - // Reference to the image in use. For most runtimes, this should be an - // image ID or digest. - string image_ref = 1; -} - -message RemoveImageRequest { - // Spec of the image to remove. - ImageSpec image = 1; -} - -message RemoveImageResponse {} - -message NetworkConfig { - // CIDR to use for pod IP addresses. - string pod_cidr = 1; -} - -message RuntimeConfig { - NetworkConfig network_config = 1; -} - -message UpdateRuntimeConfigRequest { - RuntimeConfig runtime_config = 1; -} - -message UpdateRuntimeConfigResponse {} - -// RuntimeCondition contains condition information for the runtime. -// There are 2 kinds of runtime conditions: -// 1. Required conditions: Conditions are required for kubelet to work -// properly. If any required condition is unmet, the node will be not ready. -// The required conditions include: -// * RuntimeReady: RuntimeReady means the runtime is up and ready to accept -// basic containers e.g. container only needs host network. -// * NetworkReady: NetworkReady means the runtime network is up and ready to -// accept containers which require container network. -// 2. Optional conditions: Conditions are informative to the user, but kubelet -// will not rely on. Since condition type is an arbitrary string, all conditions -// not required are optional. These conditions will be exposed to users to help -// them understand the status of the system. -message RuntimeCondition { - // Type of runtime condition. - string type = 1; - // Status of the condition, one of true/false. Default: false. - bool status = 2; - // Brief CamelCase string containing reason for the condition's last transition. - string reason = 3; - // Human-readable message indicating details about last transition. - string message = 4; -} - -// RuntimeStatus is information about the current status of the runtime. -message RuntimeStatus { - // List of current observed runtime conditions. - repeated RuntimeCondition conditions = 1; -} - -message StatusRequest { - // Verbose indicates whether to return extra information about the runtime. - bool verbose = 1; -} - -message StatusResponse { - // Status of the Runtime. - RuntimeStatus status = 1; - // Info is extra information of the Runtime. The key could be abitrary string, and - // value should be in json format. The information could include anything useful for - // debug, e.g. plugins used by the container runtime. - // It should only be returned non-empty when Verbose is true. - map info = 2; -} - -message ImageFsInfoRequest {} - -// UInt64Value is the wrapper of uint64. -message UInt64Value { - // The value. - uint64 value = 1; -} - -// StorageIdentifier uniquely identify the storage.. -message StorageIdentifier{ - // UUID of the device. - string uuid = 1; -} - -// FilesystemUsage provides the filesystem usage information. -message FilesystemUsage { - // Timestamp in nanoseconds at which the information were collected. Must be > 0. - int64 timestamp = 1; - // The underlying storage of the filesystem. - StorageIdentifier storage_id = 2; - // UsedBytes represents the bytes used for images on the filesystem. - // This may differ from the total bytes used on the filesystem and may not - // equal CapacityBytes - AvailableBytes. - UInt64Value used_bytes = 3; - // InodesUsed represents the inodes used by the images. - // This may not equal InodesCapacity - InodesAvailable because the underlying - // filesystem may also be used for purposes other than storing images. - UInt64Value inodes_used = 4; -} - -message ImageFsInfoResponse { - // Information of image filesystem(s). - repeated FilesystemUsage image_filesystems = 1; -} - -message ContainerStatsRequest{ - // ID of the container for which to retrieve stats. - string container_id = 1; -} - -message ContainerStatsResponse { - // Stats of the container. - ContainerStats stats = 1; -} - -message ListContainerStatsRequest{ - // Filter for the list request. - ContainerStatsFilter filter = 1; -} - -// ContainerStatsFilter is used to filter containers. -// All those fields are combined with 'AND' -message ContainerStatsFilter { - // ID of the container. - string id = 1; - // ID of the PodSandbox. - string pod_sandbox_id = 2; - // LabelSelector to select matches. - // Only api.MatchLabels is supported for now and the requirements - // are ANDed. MatchExpressions is not supported yet. - map label_selector = 3; -} - -message ListContainerStatsResponse { - // Stats of the container. - repeated ContainerStats stats = 1; -} - -// ContainerAttributes provides basic information of the container. -message ContainerAttributes { - // ID of the container. - string id = 1; - // Metadata of the container. - ContainerMetadata metadata = 2; - // Key-value pairs that may be used to scope and select individual resources. - map labels = 3; - // Unstructured key-value map holding arbitrary metadata. - // Annotations MUST NOT be altered by the runtime; the value of this field - // MUST be identical to that of the corresponding ContainerConfig used to - // instantiate the Container this status represents. - map annotations = 4; -} - -// ContainerStats provides the resource usage statistics for a container. -message ContainerStats { - // Information of the container. - ContainerAttributes attributes = 1; - // CPU usage gathered from the container. - CpuUsage cpu = 2; - // Memory usage gathered from the container. - MemoryUsage memory = 3; - // Usage of the writeable layer. - FilesystemUsage writable_layer = 4; -} - -// CpuUsage provides the CPU usage information. -message CpuUsage { - // Timestamp in nanoseconds at which the information were collected. Must be > 0. - int64 timestamp = 1; - // Cumulative CPU usage (sum across all cores) since object creation. - UInt64Value usage_core_nano_seconds = 2; -} - -// MemoryUsage provides the memory usage information. -message MemoryUsage { - // Timestamp in nanoseconds at which the information were collected. Must be > 0. - int64 timestamp = 1; - // The amount of working set memory in bytes. - UInt64Value working_set_bytes = 2; -} diff --git a/vendor/vendor.json b/vendor/vendor.json index 420984eb45..aac92669b3 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1943,18 +1943,6 @@ "path": "k8s.io/apiserver/pkg/util/wsstream", "revision": "d3f753a815b5b1a7f4ecc1d2fdf497dc715c98c7", "revisionTime": "2017-10-18T16:57:59Z" - }, - { - "checksumSHA1": "o+lVDhZsT+PFILKt5S6CgBmcrMs=", - "path": "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2", - "revision": "86bd9771515c19a8df7128f53b1c1fa4f00d64ee", - "revisionTime": "2018-05-23T02:20:24Z" - }, - { - "checksumSHA1": "oRQMrak6qTTdEUnRUMtVpzO9T/A=", - "path": "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime", - "revision": "18758f502c4a249bf999f34e4a115ec9881cd9f2", - "revisionTime": "2017-12-26T11:59:59Z" } ], "rootPath": "github.com/alibaba/pouch"