feat: Add APId

This PR introduces APId. This service replaces the frontend functionality
previously provided by OSD. The main driver for this is two fold:

1. Create a single purpose application to expose the talos api

2. Make use of code generation to DRY api changes

Signed-off-by: Brad Beam <brad.beam@talos-systems.com>
This commit is contained in:
Brad Beam 2019-10-23 21:31:18 -05:00 committed by Brad Beam
parent a9fe8beb0f
commit 573cce8d18
25 changed files with 1741 additions and 920 deletions

View File

@ -48,6 +48,24 @@ steps:
depends_on:
- fetch-tags
- name: apid
pull: always
image: autonomy/build-container:latest
commands:
- make apid
environment:
BINDIR: /usr/local/bin
BUILDKIT_HOST: ${BUILDKIT_HOST=tcp://buildkitd.ci.svc:1234}
volumes:
- name: dockersock
path: /var/run
- name: dev
path: /dev
- name: tmp
path: /tmp
depends_on:
- fetch-tags
- name: trustd
pull: always
image: autonomy/build-container:latest
@ -159,6 +177,7 @@ steps:
- trustd
- ntpd
- networkd
- apid
- name: initramfs
pull: always
@ -465,6 +484,24 @@ steps:
depends_on:
- fetch-tags
- name: apid
pull: always
image: autonomy/build-container:latest
commands:
- make apid
environment:
BINDIR: /usr/local/bin
BUILDKIT_HOST: ${BUILDKIT_HOST=tcp://buildkitd.ci.svc:1234}
volumes:
- name: dockersock
path: /var/run
- name: dev
path: /dev
- name: tmp
path: /tmp
depends_on:
- fetch-tags
- name: trustd
pull: always
image: autonomy/build-container:latest
@ -576,6 +613,7 @@ steps:
- trustd
- ntpd
- networkd
- apid
- name: initramfs
pull: always
@ -1095,6 +1133,24 @@ steps:
depends_on:
- fetch-tags
- name: apid
pull: always
image: autonomy/build-container:latest
commands:
- make apid
environment:
BINDIR: /usr/local/bin
BUILDKIT_HOST: ${BUILDKIT_HOST=tcp://buildkitd.ci.svc:1234}
volumes:
- name: dockersock
path: /var/run
- name: dev
path: /dev
- name: tmp
path: /tmp
depends_on:
- fetch-tags
- name: trustd
pull: always
image: autonomy/build-container:latest
@ -1206,6 +1262,7 @@ steps:
- trustd
- ntpd
- networkd
- apid
- name: initramfs
pull: always
@ -1728,6 +1785,24 @@ steps:
depends_on:
- fetch-tags
- name: apid
pull: always
image: autonomy/build-container:latest
commands:
- make apid
environment:
BINDIR: /usr/local/bin
BUILDKIT_HOST: ${BUILDKIT_HOST=tcp://buildkitd.ci.svc:1234}
volumes:
- name: dockersock
path: /var/run
- name: dev
path: /dev
- name: tmp
path: /tmp
depends_on:
- fetch-tags
- name: trustd
pull: always
image: autonomy/build-container:latest
@ -1839,6 +1914,7 @@ steps:
- trustd
- ntpd
- networkd
- apid
- name: initramfs
pull: always
@ -2361,6 +2437,24 @@ steps:
depends_on:
- fetch-tags
- name: apid
pull: always
image: autonomy/build-container:latest
commands:
- make apid
environment:
BINDIR: /usr/local/bin
BUILDKIT_HOST: ${BUILDKIT_HOST=tcp://buildkitd.ci.svc:1234}
volumes:
- name: dockersock
path: /var/run
- name: dev
path: /dev
- name: tmp
path: /tmp
depends_on:
- fetch-tags
- name: trustd
pull: always
image: autonomy/build-container:latest
@ -2472,6 +2566,7 @@ steps:
- trustd
- ntpd
- networkd
- apid
- name: initramfs
pull: always

View File

@ -18,13 +18,13 @@ RUN cd $(mktemp -d) \
&& go get mvdan.cc/gofumpt/gofumports \
&& mv /go/bin/gofumports /toolchain/go/bin/gofumports
RUN curl -sfL https://github.com/uber/prototool/releases/download/v1.8.0/prototool-Linux-x86_64.tar.gz | tar -xz --strip-components=2 -C /toolchain/bin prototool/bin/prototool
COPY --from=autonomy/protoc-gen-proxy:ec650af /protoc-gen-proxy /toolchain/bin/protoc-gen-proxy
# The build target creates a container that will be used to build Talos source
# code.
FROM scratch AS build
COPY --from=tools / /
COPY --from=autonomy/protoc-gen-proxy:a87401e /protoc-gen-proxy /toolchain/bin/protoc-gen-proxy
SHELL ["/toolchain/bin/bash", "-c"]
ENV PATH /toolchain/bin:/toolchain/go/bin
ENV GO111MODULE on
@ -35,13 +35,11 @@ WORKDIR /src
# The generate target generates code from protobuf service definitions.
FROM build AS generate-build
# Common needs to be at or near the top to satisfy the subsequent imports
COPY ./api/common/common.proto /api/common/common.proto
RUN protoc -I/api --go_out=plugins=grpc:/api/common /api/common/common.proto
#RUN protoc -I/api --plugin=proxy --proxy_out=plugins=grpc+proxy:proto api/api.proto
COPY ./api/os/os.proto /api/os/os.proto
# TODO: switch up os proxy generation with apid
#RUN protoc -I/api --go_out=plugins=grpc:/api/os /api/os/os.proto
RUN protoc -I/api --plugin=proxy --proxy_out=plugins=grpc+proxy:/api/os /api/os/os.proto
RUN protoc -I/api --go_out=plugins=grpc:/api/os /api/os/os.proto
COPY ./api/security/security.proto /api/security/security.proto
RUN protoc -I/api --go_out=plugins=grpc:/api/security /api/security/security.proto
COPY ./api/machine/machine.proto /api/machine/machine.proto
@ -50,9 +48,13 @@ COPY ./api/time/time.proto /api/time/time.proto
RUN protoc -I/api --go_out=plugins=grpc:/api/time /api/time/time.proto
COPY ./api/network/network.proto /api/network/network.proto
RUN protoc -I/api --go_out=plugins=grpc:/api/network /api/network/network.proto
# Genenrate api bits last so we have other proto files in place to satisfy the import
COPY ./api/api.proto /api/api.proto
RUN protoc -I/api --plugin=proxy --proxy_out=plugins=grpc+proxy:/api /api/api.proto
FROM scratch AS generate
COPY --from=generate-build /api/common/github.com/talos-systems/talos/api/common/common.pb.go /api/common/
COPY --from=generate-build /api/github.com/talos-systems/talos/api/api.pb.go /api/
COPY --from=generate-build /api/os/github.com/talos-systems/talos/api/os/os.pb.go /api/os/
COPY --from=generate-build /api/security/github.com/talos-systems/talos/api/security/security.pb.go /api/security/
COPY --from=generate-build /api/machine/github.com/talos-systems/talos/api/machine/machine.pb.go /api/machine/
@ -114,6 +116,20 @@ FROM scratch AS ntpd
COPY --from=ntpd-build /ntpd /ntpd
ENTRYPOINT ["/ntpd"]
# The apid target builds the api image.
FROM base AS apid-build
ARG SHA
ARG TAG
ARG VERSION_PKG="github.com/talos-systems/talos/pkg/version"
WORKDIR /src/internal/app/apid
RUN --mount=type=cache,target=/.cache/go-build go build -ldflags "-s -w -X ${VERSION_PKG}.Name=Server -X ${VERSION_PKG}.SHA=${SHA} -X ${VERSION_PKG}.Tag=${TAG}" -o /apid
RUN chmod +x /apid
FROM scratch AS apid
COPY --from=apid-build /apid /apid
ENTRYPOINT ["/apid"]
# The osd target builds the osd image.
FROM base AS osd-build
@ -208,6 +224,7 @@ COPY --from=docker.io/autonomy/util-linux:dad1273 /lib/libuuid.* /rootfs/lib
COPY --from=docker.io/autonomy/kmod:dad1273 /lib/libkmod.* /rootfs/lib
COPY --from=docker.io/autonomy/kernel:dad1273 /lib/modules /rootfs/lib/modules
COPY --from=machined /machined /rootfs/sbin/init
COPY images/apid.tar /rootfs/usr/images/
COPY images/ntpd.tar /rootfs/usr/images/
COPY images/osd.tar /rootfs/usr/images/
COPY images/trustd.tar /rootfs/usr/images/

View File

@ -136,7 +136,7 @@ initramfs: buildkitd
$(COMMON_ARGS)
.PHONY: rootfs
rootfs: buildkitd osd trustd ntpd networkd
rootfs: buildkitd osd trustd ntpd networkd apid
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
build \
--opt target=$@ \
@ -318,6 +318,14 @@ osd: buildkitd images
--opt target=$@ \
$(COMMON_ARGS)
.PHONY: apid
apid: buildkitd images
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \
build \
--output type=docker,dest=images/$@.tar,name=docker.io/autonomy/$@:$(TAG) \
--opt target=$@ \
$(COMMON_ARGS)
.PHONY: trustd
trustd: buildkitd images
@$(BINDIR)/buildctl --addr $(BUILDKIT_HOST) \

1026
api/api.pb.go Normal file

File diff suppressed because it is too large Load Diff

10
api/api.proto Normal file
View File

@ -0,0 +1,10 @@
syntax = "proto3";
package api;
option go_package = "github.com/talos-systems/talos/api";
import public "os/os.proto";
import public "machine/machine.proto";
import public "common/common.proto";
import public "google/protobuf/empty.proto";

View File

@ -1962,137 +1962,136 @@ func (m *VersionInfo) GetArch() string {
}
func init() {
proto.RegisterType((*RebootResponse)(nil), "machineapi.RebootResponse")
proto.RegisterType((*RebootReply)(nil), "machineapi.RebootReply")
proto.RegisterType((*ResetResponse)(nil), "machineapi.ResetResponse")
proto.RegisterType((*ResetReply)(nil), "machineapi.ResetReply")
proto.RegisterType((*ShutdownResponse)(nil), "machineapi.ShutdownResponse")
proto.RegisterType((*ShutdownReply)(nil), "machineapi.ShutdownReply")
proto.RegisterType((*UpgradeRequest)(nil), "machineapi.UpgradeRequest")
proto.RegisterType((*UpgradeResponse)(nil), "machineapi.UpgradeResponse")
proto.RegisterType((*UpgradeReply)(nil), "machineapi.UpgradeReply")
proto.RegisterType((*ServiceListResponse)(nil), "machineapi.ServiceListResponse")
proto.RegisterType((*ServiceListReply)(nil), "machineapi.ServiceListReply")
proto.RegisterType((*ServiceInfo)(nil), "machineapi.ServiceInfo")
proto.RegisterType((*ServiceEvents)(nil), "machineapi.ServiceEvents")
proto.RegisterType((*ServiceEvent)(nil), "machineapi.ServiceEvent")
proto.RegisterType((*ServiceHealth)(nil), "machineapi.ServiceHealth")
proto.RegisterType((*ServiceStartRequest)(nil), "machineapi.ServiceStartRequest")
proto.RegisterType((*ServiceStartResponse)(nil), "machineapi.ServiceStartResponse")
proto.RegisterType((*ServiceStartReply)(nil), "machineapi.ServiceStartReply")
proto.RegisterType((*ServiceStopRequest)(nil), "machineapi.ServiceStopRequest")
proto.RegisterType((*ServiceStopResponse)(nil), "machineapi.ServiceStopResponse")
proto.RegisterType((*ServiceStopReply)(nil), "machineapi.ServiceStopReply")
proto.RegisterType((*ServiceRestartRequest)(nil), "machineapi.ServiceRestartRequest")
proto.RegisterType((*ServiceRestartResponse)(nil), "machineapi.ServiceRestartResponse")
proto.RegisterType((*ServiceRestartReply)(nil), "machineapi.ServiceRestartReply")
proto.RegisterType((*StartRequest)(nil), "machineapi.StartRequest")
proto.RegisterType((*StartReply)(nil), "machineapi.StartReply")
proto.RegisterType((*StopRequest)(nil), "machineapi.StopRequest")
proto.RegisterType((*StopReply)(nil), "machineapi.StopReply")
proto.RegisterType((*StreamingData)(nil), "machineapi.StreamingData")
proto.RegisterType((*CopyOutRequest)(nil), "machineapi.CopyOutRequest")
proto.RegisterType((*LSRequest)(nil), "machineapi.LSRequest")
proto.RegisterType((*FileInfo)(nil), "machineapi.FileInfo")
proto.RegisterType((*MountsResponse)(nil), "machineapi.MountsResponse")
proto.RegisterType((*MountsReply)(nil), "machineapi.MountsReply")
proto.RegisterType((*MountStat)(nil), "machineapi.MountStat")
proto.RegisterType((*VersionResponse)(nil), "machineapi.VersionResponse")
proto.RegisterType((*VersionReply)(nil), "machineapi.VersionReply")
proto.RegisterType((*VersionInfo)(nil), "machineapi.VersionInfo")
proto.RegisterType((*RebootResponse)(nil), "machine.RebootResponse")
proto.RegisterType((*RebootReply)(nil), "machine.RebootReply")
proto.RegisterType((*ResetResponse)(nil), "machine.ResetResponse")
proto.RegisterType((*ResetReply)(nil), "machine.ResetReply")
proto.RegisterType((*ShutdownResponse)(nil), "machine.ShutdownResponse")
proto.RegisterType((*ShutdownReply)(nil), "machine.ShutdownReply")
proto.RegisterType((*UpgradeRequest)(nil), "machine.UpgradeRequest")
proto.RegisterType((*UpgradeResponse)(nil), "machine.UpgradeResponse")
proto.RegisterType((*UpgradeReply)(nil), "machine.UpgradeReply")
proto.RegisterType((*ServiceListResponse)(nil), "machine.ServiceListResponse")
proto.RegisterType((*ServiceListReply)(nil), "machine.ServiceListReply")
proto.RegisterType((*ServiceInfo)(nil), "machine.ServiceInfo")
proto.RegisterType((*ServiceEvents)(nil), "machine.ServiceEvents")
proto.RegisterType((*ServiceEvent)(nil), "machine.ServiceEvent")
proto.RegisterType((*ServiceHealth)(nil), "machine.ServiceHealth")
proto.RegisterType((*ServiceStartRequest)(nil), "machine.ServiceStartRequest")
proto.RegisterType((*ServiceStartResponse)(nil), "machine.ServiceStartResponse")
proto.RegisterType((*ServiceStartReply)(nil), "machine.ServiceStartReply")
proto.RegisterType((*ServiceStopRequest)(nil), "machine.ServiceStopRequest")
proto.RegisterType((*ServiceStopResponse)(nil), "machine.ServiceStopResponse")
proto.RegisterType((*ServiceStopReply)(nil), "machine.ServiceStopReply")
proto.RegisterType((*ServiceRestartRequest)(nil), "machine.ServiceRestartRequest")
proto.RegisterType((*ServiceRestartResponse)(nil), "machine.ServiceRestartResponse")
proto.RegisterType((*ServiceRestartReply)(nil), "machine.ServiceRestartReply")
proto.RegisterType((*StartRequest)(nil), "machine.StartRequest")
proto.RegisterType((*StartReply)(nil), "machine.StartReply")
proto.RegisterType((*StopRequest)(nil), "machine.StopRequest")
proto.RegisterType((*StopReply)(nil), "machine.StopReply")
proto.RegisterType((*StreamingData)(nil), "machine.StreamingData")
proto.RegisterType((*CopyOutRequest)(nil), "machine.CopyOutRequest")
proto.RegisterType((*LSRequest)(nil), "machine.LSRequest")
proto.RegisterType((*FileInfo)(nil), "machine.FileInfo")
proto.RegisterType((*MountsResponse)(nil), "machine.MountsResponse")
proto.RegisterType((*MountsReply)(nil), "machine.MountsReply")
proto.RegisterType((*MountStat)(nil), "machine.MountStat")
proto.RegisterType((*VersionResponse)(nil), "machine.VersionResponse")
proto.RegisterType((*VersionReply)(nil), "machine.VersionReply")
proto.RegisterType((*VersionInfo)(nil), "machine.VersionInfo")
}
func init() { proto.RegisterFile("machine/machine.proto", fileDescriptor_84b4f59d98cc997c) }
var fileDescriptor_84b4f59d98cc997c = []byte{
// 1379 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x6d, 0x6f, 0x13, 0xc7,
0x13, 0x97, 0xed, 0x38, 0xb6, 0xc7, 0x89, 0xc3, 0x7f, 0x49, 0xc2, 0x61, 0x02, 0x81, 0x83, 0x7f,
0x41, 0x54, 0x38, 0x3c, 0xa8, 0xa5, 0x2d, 0xa5, 0x15, 0x49, 0x68, 0x8b, 0x20, 0x40, 0xcf, 0xd0,
0x17, 0x6d, 0x55, 0x6b, 0x6d, 0x6f, 0x7c, 0x2b, 0xee, 0x6e, 0xaf, 0xb7, 0xeb, 0x20, 0x57, 0xfd,
0x00, 0x55, 0xbf, 0x41, 0x5f, 0xf3, 0x65, 0xfa, 0xb1, 0xaa, 0x7d, 0xb8, 0xf3, 0x9e, 0xed, 0x8b,
0xa2, 0x84, 0x57, 0xde, 0x87, 0xb9, 0x99, 0xdf, 0x6f, 0x66, 0x76, 0x76, 0xd6, 0xb0, 0x11, 0xe2,
0x81, 0x4f, 0x23, 0xb2, 0x63, 0x7e, 0x3b, 0x71, 0xc2, 0x04, 0x43, 0x60, 0xa6, 0x38, 0xa6, 0xed,
0x4b, 0x23, 0xc6, 0x46, 0x01, 0xd9, 0x51, 0x3b, 0xfd, 0xf1, 0xe1, 0x0e, 0x09, 0x63, 0x31, 0xd1,
0x82, 0xed, 0xed, 0xd9, 0x4d, 0x41, 0x43, 0xc2, 0x05, 0x0e, 0x63, 0x23, 0x70, 0x7e, 0xc0, 0xc2,
0x90, 0x45, 0x3b, 0xfa, 0x47, 0x2f, 0xba, 0xbb, 0xd0, 0xf2, 0x48, 0x9f, 0x31, 0xe1, 0x11, 0x1e,
0xb3, 0x88, 0x13, 0x74, 0x17, 0xea, 0x21, 0x11, 0x78, 0x88, 0x05, 0x76, 0x4a, 0x57, 0x4b, 0xb7,
0x9a, 0xf7, 0xd7, 0x3b, 0xe6, 0x93, 0x97, 0x6c, 0x48, 0x0e, 0xcc, 0x9e, 0x97, 0x49, 0xb9, 0x4f,
0xa1, 0x99, 0xea, 0x88, 0x83, 0x09, 0xfa, 0x1c, 0xea, 0x89, 0x51, 0xe6, 0x94, 0xae, 0x56, 0x6e,
0x35, 0xef, 0xb7, 0x3b, 0x53, 0x12, 0x9d, 0xbc, 0x39, 0x2f, 0x93, 0x75, 0x9f, 0xc0, 0xaa, 0x47,
0x38, 0x39, 0x0b, 0x92, 0x3d, 0x00, 0xa3, 0x42, 0x02, 0xf9, 0x6c, 0x0e, 0xc8, 0xc5, 0x3c, 0x10,
0xcb, 0x98, 0x85, 0x63, 0x1f, 0xce, 0x75, 0xfd, 0xb1, 0x18, 0xb2, 0xf7, 0xd1, 0x19, 0xa0, 0x3c,
0x83, 0xd5, 0xa9, 0x16, 0x89, 0xe6, 0x8b, 0x39, 0x34, 0x5b, 0x36, 0x9a, 0x59, 0x93, 0x16, 0xa0,
0x4f, 0xa0, 0xf5, 0x36, 0x1e, 0x25, 0x78, 0x48, 0x3c, 0xf2, 0xfb, 0x98, 0x70, 0x81, 0xd6, 0xa1,
0x4a, 0x43, 0x3c, 0x22, 0x0a, 0x4b, 0xc3, 0xd3, 0x13, 0xf7, 0x2d, 0xac, 0x65, 0x72, 0xa7, 0xc5,
0x8d, 0xce, 0x41, 0x05, 0x0f, 0xde, 0x39, 0x65, 0xa5, 0x58, 0x0e, 0xdd, 0xef, 0x61, 0x25, 0x53,
0x2b, 0x89, 0x3c, 0x9c, 0x23, 0x72, 0xc9, 0x26, 0x32, 0x03, 0xc1, 0xe2, 0xf1, 0x27, 0x9c, 0xef,
0x92, 0xe4, 0x88, 0x0e, 0xc8, 0x0b, 0xca, 0xcf, 0x10, 0x66, 0xf4, 0x00, 0xea, 0x5c, 0x2b, 0xe2,
0x4e, 0x59, 0x21, 0xb8, 0x90, 0x73, 0xa5, 0xde, 0x7b, 0x16, 0x1d, 0x32, 0x2f, 0x13, 0x74, 0x5f,
0xc1, 0xb9, 0x9c, 0x75, 0x49, 0xe5, 0xd1, 0x1c, 0x95, 0xed, 0x05, 0x8a, 0x6c, 0xb4, 0x16, 0x9d,
0x7f, 0x4a, 0xd0, 0xb4, 0x4c, 0xa1, 0x16, 0x94, 0xe9, 0xd0, 0x44, 0xa4, 0x4c, 0x87, 0x32, 0x48,
0x5c, 0x60, 0x41, 0x8c, 0x2f, 0xf5, 0x04, 0xdd, 0x83, 0x65, 0x72, 0x44, 0x22, 0xc1, 0x9d, 0x8a,
0xe2, 0x7a, 0x71, 0x81, 0xc1, 0xa7, 0x4a, 0xc0, 0x33, 0x82, 0xf2, 0x13, 0x9f, 0xe0, 0x40, 0xf8,
0xce, 0x52, 0xe1, 0x27, 0x3f, 0x28, 0x01, 0xcf, 0x08, 0xca, 0xb3, 0x94, 0xd3, 0x85, 0xee, 0x66,
0x66, 0x35, 0x4f, 0xa7, 0xc8, 0x6c, 0x6a, 0xd5, 0xed, 0xc3, 0x8a, 0xbd, 0x2e, 0x13, 0x23, 0xe4,
0x23, 0xc3, 0x4f, 0x0e, 0x0b, 0x08, 0xde, 0x86, 0x72, 0x46, 0xae, 0xdd, 0xd1, 0x45, 0xa9, 0x93,
0x16, 0xa5, 0xce, 0x9b, 0xb4, 0x28, 0x79, 0x65, 0xc1, 0xdd, 0x0f, 0xa5, 0x0c, 0xa7, 0x26, 0x80,
0x1c, 0xa8, 0x8d, 0xa3, 0x77, 0x11, 0x7b, 0x1f, 0x29, 0x4b, 0x75, 0x2f, 0x9d, 0xca, 0x1d, 0x4d,
0x6e, 0xa2, 0xec, 0xd5, 0xbd, 0x74, 0x8a, 0xae, 0xc1, 0x4a, 0x80, 0xb9, 0xe8, 0x85, 0x84, 0x73,
0x79, 0x28, 0x2a, 0x0a, 0x4e, 0x53, 0xae, 0x1d, 0xe8, 0x25, 0xf4, 0x08, 0xd4, 0xb4, 0x37, 0xf0,
0x71, 0x34, 0x22, 0xc6, 0x8f, 0xc7, 0xa1, 0x03, 0x29, 0xbe, 0xa7, 0xa4, 0xdd, 0xff, 0x67, 0x79,
0xdb, 0x15, 0x38, 0x11, 0xe9, 0x21, 0x9c, 0x89, 0xb7, 0xfb, 0x2b, 0xac, 0xe7, 0xc5, 0x4e, 0x9d,
0xdf, 0x08, 0x96, 0x64, 0x96, 0x19, 0xbf, 0xaa, 0xb1, 0xfb, 0x23, 0xfc, 0x2f, 0xaf, 0x5d, 0xe6,
0xef, 0xd7, 0x73, 0xf9, 0x7b, 0x75, 0x41, 0x5c, 0x73, 0x70, 0xac, 0x04, 0xbe, 0x01, 0x28, 0x93,
0x60, 0x71, 0x11, 0xad, 0x5f, 0x2c, 0xf6, 0x52, 0xea, 0xa3, 0xb2, 0x9a, 0x1e, 0x4a, 0xad, 0xfc,
0xe4, 0x87, 0xd2, 0x06, 0x63, 0x71, 0xba, 0x09, 0x1b, 0x46, 0xc0, 0x93, 0x91, 0x2c, 0x8e, 0xd6,
0x6f, 0xb0, 0x39, 0x2b, 0xf8, 0x51, 0x99, 0xbd, 0xcd, 0xdc, 0x96, 0xe9, 0x97, 0xe4, 0xbe, 0x99,
0x23, 0xe7, 0x2e, 0x20, 0x37, 0x03, 0xc9, 0xe2, 0xe7, 0xc2, 0xca, 0x71, 0x49, 0xf8, 0x55, 0xd9,
0x29, 0xb9, 0x37, 0x00, 0xac, 0x1c, 0x49, 0xc1, 0x95, 0xa6, 0xe0, 0x94, 0xd4, 0x35, 0x68, 0x1e,
0x13, 0x76, 0x25, 0x72, 0x1d, 0x1a, 0xd3, 0xb0, 0x14, 0xe9, 0x79, 0x0c, 0xab, 0x5d, 0x91, 0x10,
0x1c, 0xd2, 0x68, 0xb4, 0x2f, 0xbd, 0xb1, 0x0e, 0xd5, 0xfe, 0x44, 0x10, 0xae, 0x24, 0x57, 0x3c,
0x3d, 0x41, 0x9b, 0xb0, 0x4c, 0x92, 0x84, 0x25, 0xdc, 0x78, 0xc9, 0xcc, 0xdc, 0x3b, 0xd0, 0xda,
0x63, 0xf1, 0xe4, 0xd5, 0x38, 0xa3, 0x74, 0x09, 0x1a, 0x09, 0x63, 0xa2, 0x17, 0x63, 0xe1, 0x1b,
0x6b, 0x75, 0xb9, 0xf0, 0x1a, 0x0b, 0xdf, 0xed, 0x43, 0xe3, 0x45, 0x37, 0x95, 0x94, 0x90, 0x18,
0x13, 0x19, 0x24, 0xc6, 0x84, 0x2c, 0x13, 0x09, 0x19, 0x8c, 0x13, 0x4e, 0xd2, 0x32, 0x61, 0xa6,
0xe8, 0x26, 0xac, 0xe9, 0x21, 0x65, 0x51, 0x6f, 0x48, 0x62, 0xe1, 0xab, 0x4a, 0x51, 0xf5, 0x5a,
0xd9, 0xf2, 0xbe, 0x5c, 0x75, 0xff, 0x2d, 0x41, 0xfd, 0x3b, 0x1a, 0xe8, 0xaa, 0x8e, 0x60, 0x29,
0xc2, 0x61, 0x7a, 0xd3, 0xaa, 0xb1, 0x5c, 0xe3, 0xf4, 0x0f, 0x6d, 0xa0, 0xe2, 0xa9, 0xb1, 0x5c,
0x0b, 0xd9, 0x50, 0x17, 0x9f, 0x55, 0x4f, 0x8d, 0x51, 0x1b, 0xea, 0x21, 0x1b, 0xd2, 0x43, 0x4a,
0x86, 0xaa, 0xe4, 0x54, 0xbc, 0x6c, 0x8e, 0x36, 0x60, 0x99, 0xf2, 0xde, 0x90, 0x26, 0x4e, 0x55,
0xc1, 0xac, 0x52, 0xbe, 0x4f, 0x13, 0xe9, 0x3c, 0xe5, 0x18, 0x67, 0x59, 0xd7, 0x54, 0x35, 0x91,
0xca, 0x03, 0x1a, 0xbd, 0x73, 0x6a, 0x1a, 0x84, 0x1c, 0xa3, 0xeb, 0xb0, 0x9a, 0x90, 0x00, 0x0b,
0x7a, 0x44, 0x7a, 0x0a, 0x61, 0x5d, 0x6d, 0xae, 0xa4, 0x8b, 0x2f, 0x71, 0x48, 0x5c, 0x06, 0xad,
0x03, 0x36, 0x96, 0x97, 0xc9, 0xe9, 0xb3, 0xfb, 0x53, 0x5d, 0xe6, 0xd3, 0xab, 0x76, 0xc3, 0xce,
0x57, 0xa5, 0xbc, 0x2b, 0xb0, 0xd0, 0xd5, 0x9f, 0xcb, 0x5e, 0x30, 0x35, 0x78, 0x82, 0x5e, 0x30,
0x8f, 0x2d, 0xd7, 0x2a, 0x34, 0x32, 0xd5, 0xe8, 0x0a, 0xc0, 0x21, 0x0d, 0x08, 0x9f, 0x70, 0x41,
0x42, 0x13, 0x08, 0x6b, 0x25, 0x17, 0x8e, 0x25, 0x13, 0x8e, 0x2d, 0x68, 0xe0, 0x23, 0x4c, 0x03,
0xdc, 0x0f, 0x74, 0x4c, 0x96, 0xbc, 0xe9, 0x02, 0xba, 0x0c, 0x10, 0x4a, 0xf5, 0x64, 0xd8, 0x63,
0x91, 0x0a, 0x4d, 0xc3, 0x6b, 0x98, 0x95, 0x57, 0x91, 0x7b, 0x04, 0x6b, 0x3f, 0x11, 0x95, 0x10,
0x67, 0x70, 0xdb, 0x3d, 0xa8, 0x1d, 0x69, 0x25, 0x8b, 0x7a, 0x14, 0xa3, 0x5f, 0xf5, 0x28, 0xa9,
0x9c, 0xec, 0xb4, 0x32, 0xbb, 0x27, 0xe8, 0xb4, 0x66, 0x30, 0x5a, 0xee, 0xfb, 0xbb, 0x04, 0x4d,
0xcb, 0x82, 0xbc, 0xbb, 0x05, 0xce, 0xee, 0x6e, 0x81, 0x47, 0x72, 0x85, 0xfb, 0x38, 0x6d, 0xf3,
0xb8, 0xaf, 0x8f, 0xed, 0x98, 0x06, 0xc2, 0x5c, 0x9f, 0x7a, 0x22, 0x3d, 0x35, 0x62, 0xbd, 0x94,
0x88, 0xf1, 0xd4, 0x88, 0x19, 0xe5, 0xb2, 0x6a, 0x30, 0xae, 0x32, 0xb8, 0xe1, 0x95, 0x19, 0x97,
0xa1, 0xc0, 0xc9, 0xc0, 0x37, 0xd9, 0xab, 0xc6, 0xf7, 0x3f, 0xd4, 0xa0, 0x76, 0xa0, 0x51, 0xa3,
0x5d, 0xa8, 0x99, 0xd3, 0x8e, 0x72, 0x89, 0x90, 0x2f, 0x01, 0xed, 0x7c, 0x87, 0x63, 0x57, 0x97,
0xbb, 0x25, 0xf4, 0x25, 0x2c, 0xeb, 0xbc, 0x41, 0x9b, 0x73, 0x17, 0xf8, 0x53, 0xf9, 0x20, 0x6a,
0x5f, 0x58, 0x94, 0x63, 0xd2, 0xa1, 0x0f, 0xa0, 0xfc, 0xa2, 0x8b, 0x72, 0x19, 0x9c, 0x55, 0x93,
0xf6, 0xba, 0xbd, 0x9c, 0x9e, 0x7f, 0x6d, 0x4f, 0xbf, 0x59, 0x4e, 0x66, 0xcf, 0x7e, 0x0a, 0x3d,
0x84, 0xaa, 0x7a, 0x65, 0x14, 0x7e, 0xb9, 0xb9, 0xe0, 0x41, 0x22, 0x3f, 0x7c, 0x0c, 0xf5, 0xf4,
0x41, 0x50, 0xf8, 0xed, 0xc5, 0xc5, 0xcf, 0x07, 0xf9, 0xf9, 0xb7, 0x50, 0x33, 0x6d, 0x78, 0xde,
0xcd, 0xf9, 0x67, 0x44, 0xdb, 0x59, 0xb8, 0x27, 0x15, 0xec, 0x65, 0xad, 0xad, 0x6c, 0x7e, 0x0b,
0x21, 0x6c, 0x15, 0x76, 0xcb, 0x52, 0xc9, 0xcb, 0xac, 0x83, 0x54, 0xd7, 0x11, 0xda, 0x2e, 0xee,
0x4d, 0x34, 0x9e, 0xcb, 0xc5, 0x02, 0x52, 0xdf, 0xf3, 0x0c, 0x94, 0xbc, 0x95, 0xd0, 0x95, 0xc2,
0xae, 0x40, 0x6b, 0xdb, 0x2a, 0xdc, 0x97, 0xca, 0xde, 0x40, 0x2b, 0x7f, 0xd9, 0xa2, 0x6b, 0xc7,
0x5d, 0xc4, 0x5a, 0xe5, 0xf6, 0x71, 0x22, 0xfa, 0x7a, 0xaf, 0x6a, 0xae, 0xf9, 0xfe, 0xda, 0xd6,
0xb1, 0xb9, 0x60, 0x27, 0x0e, 0x26, 0x6e, 0xe5, 0xaf, 0x72, 0x09, 0x3d, 0x82, 0x25, 0xc5, 0x2d,
0xff, 0x9e, 0xb1, 0x48, 0x6d, 0xcc, 0x6f, 0x58, 0x1f, 0xd7, 0xd2, 0x73, 0x59, 0x14, 0x30, 0x67,
0x61, 0xfd, 0x88, 0x83, 0xc9, 0xee, 0x73, 0x58, 0x1b, 0xb0, 0x30, 0xdd, 0xee, 0xe0, 0x98, 0xee,
0x82, 0x39, 0xb5, 0x4f, 0x62, 0xfa, 0xba, 0xf4, 0xf3, 0xed, 0x11, 0x15, 0xfe, 0xb8, 0x2f, 0xab,
0xde, 0x8e, 0xc0, 0x01, 0xe3, 0x77, 0x74, 0xf9, 0xe5, 0x7a, 0xb6, 0x83, 0x63, 0x9a, 0xfe, 0x75,
0xd1, 0x5f, 0x56, 0x66, 0x1f, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0x31, 0xe8, 0x4c, 0xb0, 0xd4,
0x10, 0x00, 0x00,
// 1371 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xfd, 0x6e, 0x13, 0x47,
0x10, 0x97, 0xed, 0xf8, 0x6b, 0x9c, 0x38, 0xb0, 0xf9, 0xa8, 0x31, 0xe1, 0xeb, 0xa0, 0x05, 0x21,
0xc5, 0x41, 0x01, 0x2a, 0x0a, 0x6d, 0x05, 0x21, 0x20, 0xaa, 0x26, 0x01, 0x9d, 0x4b, 0xff, 0x68,
0xab, 0x5a, 0x6b, 0x7b, 0x63, 0xaf, 0xb8, 0xbb, 0xbd, 0xde, 0xae, 0x83, 0x5c, 0xf5, 0x01, 0xaa,
0xfe, 0xdb, 0x47, 0xe8, 0xcb, 0xf4, 0x35, 0xfa, 0x26, 0xd5, 0x7e, 0xdc, 0x7a, 0x7d, 0xce, 0x01,
0x22, 0xfc, 0xe5, 0xdd, 0xd9, 0xd9, 0x99, 0xdf, 0x6f, 0x67, 0x76, 0x76, 0xce, 0xb0, 0x11, 0xe2,
0xc1, 0x98, 0x46, 0x64, 0xc7, 0xfc, 0x76, 0xe2, 0x84, 0x09, 0x86, 0xaa, 0x66, 0xda, 0xbe, 0x38,
0x62, 0x6c, 0x14, 0x90, 0x1d, 0x25, 0xee, 0x4f, 0x8e, 0x77, 0x48, 0x18, 0x8b, 0xa9, 0xd6, 0x6a,
0x5f, 0xc9, 0x2e, 0x0a, 0x1a, 0x12, 0x2e, 0x70, 0x18, 0x1b, 0x85, 0xb5, 0x01, 0x0b, 0x43, 0x16,
0xed, 0xe8, 0x1f, 0x2d, 0xf4, 0xf6, 0xa0, 0xe9, 0x93, 0x3e, 0x63, 0xc2, 0x27, 0x3c, 0x66, 0x11,
0x27, 0xe8, 0x0e, 0xd4, 0x42, 0x22, 0xf0, 0x10, 0x0b, 0xdc, 0x2a, 0x5c, 0x2d, 0xdc, 0x6a, 0xec,
0xae, 0x77, 0xcc, 0x96, 0x23, 0x36, 0x24, 0x87, 0x66, 0xcd, 0xb7, 0x5a, 0xde, 0x1e, 0x34, 0x52,
0x1b, 0x71, 0x30, 0x45, 0x77, 0xa1, 0x96, 0x18, 0x63, 0xad, 0xc2, 0xd5, 0xd2, 0xad, 0xc6, 0xee,
0x67, 0x9d, 0x94, 0xd0, 0xbc, 0x2f, 0xdf, 0x2a, 0x7a, 0x4f, 0x60, 0xc5, 0x27, 0x9c, 0x9c, 0x05,
0xc6, 0x63, 0x00, 0x63, 0x42, 0xa2, 0xd8, 0x5d, 0x40, 0xb1, 0xe9, 0xa0, 0x70, 0x3c, 0x39, 0x20,
0xf6, 0xe1, 0x5c, 0x77, 0x3c, 0x11, 0x43, 0xf6, 0x36, 0x3a, 0x03, 0x8e, 0xe7, 0xb0, 0x32, 0xb3,
0x22, 0xa1, 0xdc, 0x5f, 0x80, 0x72, 0xc1, 0x42, 0xc9, 0xfa, 0x73, 0xd0, 0x7c, 0x01, 0xcd, 0xd7,
0xf1, 0x28, 0xc1, 0x43, 0xe2, 0x93, 0xdf, 0x26, 0x84, 0x0b, 0xb4, 0x0e, 0x65, 0x1a, 0xe2, 0x11,
0x51, 0x40, 0xea, 0xbe, 0x9e, 0x78, 0xaf, 0x61, 0xd5, 0xea, 0x7d, 0x2c, 0x68, 0x74, 0x0e, 0x4a,
0x78, 0xf0, 0xa6, 0x55, 0x54, 0x86, 0xe5, 0xd0, 0xdb, 0x87, 0x65, 0x6b, 0x56, 0xb2, 0xb8, 0xb7,
0xc0, 0xa2, 0x65, 0x59, 0x64, 0xfc, 0x3b, 0x24, 0xa6, 0xb0, 0xd6, 0x25, 0xc9, 0x09, 0x1d, 0x90,
0x03, 0xca, 0xcf, 0x10, 0x5d, 0xb9, 0x83, 0x6b, 0x43, 0xbc, 0x55, 0x54, 0xee, 0xd7, 0x67, 0x87,
0xa8, 0x17, 0xbe, 0x8b, 0x8e, 0x99, 0x6f, 0xb5, 0xbc, 0x03, 0x38, 0x37, 0xe7, 0x5a, 0x92, 0x78,
0xb0, 0x40, 0x62, 0x2b, 0x6b, 0xc5, 0xc5, 0xe9, 0x10, 0xf9, 0xbb, 0x00, 0x0d, 0xc7, 0x0f, 0x6a,
0x42, 0x91, 0x0e, 0x4d, 0x20, 0x8a, 0x74, 0x28, 0x63, 0xc3, 0x05, 0x16, 0xc4, 0x1c, 0xa1, 0x9e,
0xa0, 0x0e, 0x54, 0xc8, 0x09, 0x89, 0x04, 0x6f, 0x95, 0x14, 0xcb, 0xcd, 0xac, 0xb7, 0x67, 0x6a,
0xd5, 0x37, 0x5a, 0x52, 0x7f, 0x4c, 0x70, 0x20, 0xc6, 0xad, 0xa5, 0xd3, 0xf5, 0x5f, 0xa8, 0x55,
0xdf, 0x68, 0x79, 0xdf, 0xc2, 0xca, 0x9c, 0x21, 0xb4, 0x6d, 0x1d, 0x6a, 0x7a, 0x1b, 0xa7, 0x3a,
0x4c, 0xfd, 0x79, 0x7d, 0x58, 0x76, 0xe5, 0x32, 0x0d, 0x42, 0x3e, 0x32, 0xb4, 0xe4, 0x30, 0x87,
0xd7, 0x6d, 0x28, 0x5a, 0x4e, 0xed, 0x8e, 0xae, 0x3c, 0x9d, 0xb4, 0xf2, 0x74, 0x7e, 0x48, 0x2b,
0x8f, 0x5f, 0x14, 0xdc, 0xfb, 0xa7, 0x60, 0x41, 0x6a, 0xf4, 0xa8, 0x05, 0xd5, 0x49, 0xf4, 0x26,
0x62, 0x6f, 0x23, 0xe5, 0xa9, 0xe6, 0xa7, 0x53, 0xb9, 0xa2, 0x99, 0x4d, 0x95, 0xbf, 0x9a, 0x9f,
0x4e, 0xd1, 0x35, 0x58, 0x0e, 0x30, 0x17, 0xbd, 0x90, 0x70, 0x2e, 0xaf, 0x40, 0x49, 0xc1, 0x69,
0x48, 0xd9, 0xa1, 0x16, 0xa1, 0x47, 0xa0, 0xa6, 0xbd, 0xc1, 0x18, 0x47, 0x23, 0x62, 0x4e, 0xf0,
0x5d, 0xe8, 0x40, 0xaa, 0x3f, 0x55, 0xda, 0xde, 0xe7, 0x36, 0x51, 0xbb, 0x02, 0x27, 0x22, 0xbd,
0x72, 0x99, 0x30, 0x7b, 0xbf, 0xc0, 0xfa, 0xbc, 0xda, 0x47, 0x27, 0x34, 0x82, 0x25, 0x99, 0x5c,
0xe6, 0x5c, 0xd5, 0xd8, 0x3b, 0x82, 0xf3, 0xf3, 0xd6, 0x65, 0xce, 0x7e, 0xb5, 0x90, 0xb3, 0x97,
0xb2, 0x41, 0x9d, 0xc3, 0xe2, 0x24, 0xed, 0x0d, 0x40, 0x56, 0x83, 0xc5, 0x79, 0x9c, 0x7e, 0x76,
0xa8, 0x4b, 0xad, 0x4f, 0x4a, 0x69, 0x76, 0x0b, 0xb5, 0xf1, 0x0f, 0xbc, 0x85, 0x2e, 0x12, 0x87,
0xd0, 0x4d, 0xd8, 0x30, 0x0a, 0xbe, 0x8c, 0x61, 0x7e, 0x9c, 0x7e, 0x85, 0xcd, 0xac, 0xe2, 0x27,
0xa5, 0xe5, 0xdb, 0x33, 0xb3, 0xf6, 0x25, 0xb3, 0x47, 0x0b, 0xcc, 0xae, 0x64, 0x99, 0x65, 0xf0,
0x38, 0xe4, 0x3c, 0x58, 0x7e, 0x57, 0xee, 0x3d, 0x2c, 0xb6, 0x0a, 0xde, 0x0d, 0x00, 0x27, 0x35,
0x52, 0x64, 0x85, 0x19, 0x32, 0xa5, 0x75, 0x0d, 0x1a, 0xef, 0x08, 0xb8, 0x52, 0xb9, 0x0e, 0xf5,
0x59, 0x40, 0xf2, 0xec, 0x7c, 0x03, 0x2b, 0x5d, 0x91, 0x10, 0x1c, 0xd2, 0x68, 0xb4, 0x2f, 0x8f,
0x62, 0x1d, 0xca, 0xfd, 0xa9, 0x20, 0x5c, 0x69, 0x2e, 0xfb, 0x7a, 0x82, 0x36, 0xa1, 0x42, 0x92,
0x84, 0x25, 0xdc, 0x1c, 0x91, 0x99, 0x79, 0xdb, 0xd0, 0x7c, 0xca, 0xe2, 0xe9, 0xcb, 0x89, 0xa5,
0x74, 0x11, 0xea, 0x09, 0x63, 0xa2, 0x17, 0x63, 0x31, 0x36, 0xde, 0x6a, 0x52, 0xf0, 0x0a, 0x8b,
0xb1, 0xd7, 0x87, 0xfa, 0x41, 0x37, 0xd5, 0x94, 0x90, 0x18, 0x13, 0x16, 0x12, 0x63, 0x42, 0x56,
0x87, 0x84, 0x0c, 0x26, 0x09, 0x27, 0x69, 0x75, 0x30, 0x53, 0x74, 0x13, 0x56, 0xf5, 0x90, 0xb2,
0xa8, 0x37, 0x24, 0xb1, 0x18, 0xab, 0x02, 0x51, 0xf6, 0x9b, 0x56, 0xbc, 0x2f, 0xa5, 0xde, 0xbf,
0x05, 0xa8, 0x3d, 0xa7, 0x81, 0xae, 0xe1, 0x08, 0x96, 0x22, 0x1c, 0xa6, 0xcf, 0xa9, 0x1a, 0x4b,
0x19, 0xa7, 0xbf, 0x6b, 0x07, 0x25, 0x5f, 0x8d, 0xa5, 0x2c, 0x64, 0x43, 0x5d, 0x73, 0x56, 0x7c,
0x35, 0x46, 0x6d, 0xa8, 0x85, 0x6c, 0x48, 0x8f, 0x29, 0x19, 0xaa, 0x4a, 0x53, 0xf2, 0xed, 0x1c,
0x6d, 0x40, 0x85, 0xf2, 0xde, 0x90, 0x26, 0xad, 0xb2, 0x82, 0x59, 0xa6, 0x7c, 0x9f, 0x26, 0xf2,
0xf0, 0xd4, 0xc1, 0xb4, 0x2a, 0xba, 0x94, 0xaa, 0x89, 0x34, 0x1e, 0xd0, 0xe8, 0x4d, 0xab, 0xaa,
0x41, 0xc8, 0x31, 0xba, 0x0e, 0x2b, 0x09, 0x09, 0xb0, 0xa0, 0x27, 0xa4, 0xa7, 0x10, 0xd6, 0xd4,
0xe2, 0x72, 0x2a, 0x3c, 0xc2, 0x21, 0xf1, 0x02, 0x68, 0x1e, 0xb2, 0x89, 0x7c, 0x3d, 0x3e, 0x3e,
0xb5, 0x6f, 0xe9, 0xea, 0x9e, 0x3e, 0xa9, 0xc8, 0x26, 0xab, 0xb2, 0xdc, 0x15, 0x58, 0xe8, 0x8a,
0xcf, 0x65, 0x93, 0x97, 0x7a, 0x7b, 0x5f, 0x93, 0x37, 0x8f, 0xca, 0x49, 0xf0, 0x3f, 0xa0, 0x6e,
0xed, 0xa2, 0xcb, 0x00, 0xc7, 0x34, 0x20, 0x7c, 0xca, 0x05, 0x09, 0x4d, 0x08, 0x1c, 0xc9, 0x5c,
0x20, 0x96, 0x4c, 0x20, 0xb6, 0xa0, 0x8e, 0x4f, 0x30, 0x0d, 0x70, 0x3f, 0xd0, 0xd1, 0x58, 0xf2,
0x67, 0x02, 0x74, 0x09, 0x20, 0x94, 0xe6, 0xc9, 0xb0, 0xc7, 0x22, 0x15, 0x94, 0xba, 0x5f, 0x37,
0x92, 0x97, 0x91, 0xc7, 0x61, 0xf5, 0x47, 0xa2, 0x52, 0xe1, 0x0c, 0x07, 0xd6, 0x81, 0xea, 0x89,
0x36, 0xb2, 0xd0, 0x85, 0x18, 0xe3, 0xaa, 0x0b, 0x49, 0x95, 0x64, 0x17, 0x65, 0x9d, 0xbe, 0xaf,
0x8b, 0xca, 0xa0, 0x73, 0x0e, 0xee, 0xaf, 0x02, 0x34, 0x1c, 0xf3, 0xf2, 0x99, 0x16, 0xd8, 0x3e,
0xd3, 0x02, 0x8f, 0xa4, 0x84, 0x8f, 0x71, 0xda, 0xbf, 0xf1, 0xb1, 0xbe, 0xaa, 0x13, 0x1a, 0x08,
0xf3, 0x52, 0xea, 0x89, 0x3c, 0xa3, 0x11, 0xeb, 0xa5, 0x14, 0xcc, 0x19, 0x8d, 0x98, 0x31, 0x2e,
0x2b, 0x05, 0xe3, 0x2a, 0x6b, 0xeb, 0x7e, 0x91, 0x71, 0x19, 0x04, 0x9c, 0x0c, 0xc6, 0x26, 0x63,
0xd5, 0x78, 0xf7, 0xbf, 0x0a, 0x54, 0x0f, 0x35, 0x64, 0xf4, 0x35, 0x54, 0xcd, 0x0d, 0x47, 0xb3,
0xf8, 0xcf, 0xdf, 0xf9, 0xb6, 0xd3, 0xc3, 0xb8, 0xb5, 0xe4, 0x4e, 0x01, 0x7d, 0x09, 0x15, 0x9d,
0x2b, 0x68, 0x73, 0xe1, 0x95, 0x7e, 0x26, 0x3f, 0x6d, 0xda, 0xeb, 0x0b, 0x49, 0x25, 0x0f, 0x71,
0x1b, 0x8a, 0x07, 0x5d, 0x34, 0x4b, 0x56, 0x5b, 0x35, 0xda, 0xe7, 0xad, 0x2c, 0xbd, 0xe4, 0xda,
0x8d, 0xfe, 0xee, 0xf8, 0x00, 0x37, 0xee, 0x87, 0xcc, 0x3d, 0x28, 0xab, 0x2f, 0x85, 0xdc, 0x6d,
0x6b, 0xd9, 0x2f, 0x0a, 0xb9, 0xeb, 0x21, 0xd4, 0xd2, 0xa6, 0x3e, 0x77, 0xe3, 0xe6, 0x29, 0xfd,
0xbf, 0x7e, 0xea, 0xab, 0xa6, 0x95, 0x76, 0x8e, 0x73, 0xfe, 0x23, 0xa0, 0xbd, 0xb1, 0xb8, 0x20,
0xb7, 0x3e, 0xb6, 0xed, 0xa9, 0x6c, 0x60, 0x73, 0x3d, 0x5f, 0x38, 0xbd, 0xdd, 0x95, 0x16, 0x5e,
0xd8, 0x5e, 0x50, 0xbd, 0x30, 0x68, 0x2b, 0xa7, 0xcb, 0xd0, 0x30, 0xda, 0x39, 0xab, 0xd2, 0xd2,
0x33, 0x8b, 0x45, 0x3e, 0x31, 0xe8, 0xe2, 0xe9, 0x8f, 0xbb, 0xb6, 0x73, 0xe1, 0xf4, 0x45, 0x69,
0xe6, 0x08, 0x9a, 0xf3, 0x6f, 0x26, 0xba, 0x9c, 0xfb, 0x98, 0x6a, 0x63, 0x5b, 0xb9, 0xeb, 0xba,
0xed, 0x28, 0x6b, 0x66, 0x4e, 0x53, 0xec, 0xee, 0x5e, 0xcb, 0x8a, 0xe3, 0x60, 0xea, 0x95, 0xfe,
0x2c, 0x16, 0xd0, 0x7d, 0x58, 0x52, 0x4c, 0x9c, 0x4f, 0x0e, 0x87, 0x02, 0xca, 0x48, 0xed, 0xb6,
0x07, 0x50, 0x4d, 0x2f, 0x56, 0x5e, 0x3c, 0x36, 0x16, 0x6f, 0x7f, 0x1c, 0x4c, 0xf7, 0xbe, 0x87,
0xd5, 0x01, 0x0b, 0xed, 0x1a, 0x8e, 0xe9, 0x1e, 0x98, 0x3b, 0xf7, 0x24, 0xa6, 0xaf, 0x0a, 0x3f,
0xdd, 0x1e, 0x51, 0x31, 0x9e, 0xf4, 0x65, 0xb5, 0xda, 0x11, 0x38, 0x60, 0x7c, 0x5b, 0x97, 0x4d,
0xae, 0x67, 0x3b, 0x38, 0xa6, 0xe9, 0xbf, 0x08, 0xfd, 0x8a, 0xf2, 0x79, 0xf7, 0xff, 0x00, 0x00,
0x00, 0xff, 0xff, 0x16, 0x91, 0x56, 0x62, 0x5f, 0x10, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -2132,7 +2131,7 @@ func NewMachineClient(cc *grpc.ClientConn) MachineClient {
}
func (c *machineClient) CopyOut(ctx context.Context, in *CopyOutRequest, opts ...grpc.CallOption) (Machine_CopyOutClient, error) {
stream, err := c.cc.NewStream(ctx, &_Machine_serviceDesc.Streams[0], "/machineapi.Machine/CopyOut", opts...)
stream, err := c.cc.NewStream(ctx, &_Machine_serviceDesc.Streams[0], "/machine.Machine/CopyOut", opts...)
if err != nil {
return nil, err
}
@ -2165,7 +2164,7 @@ func (x *machineCopyOutClient) Recv() (*StreamingData, error) {
func (c *machineClient) Mounts(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*MountsReply, error) {
out := new(MountsReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/Mounts", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/Mounts", in, out, opts...)
if err != nil {
return nil, err
}
@ -2173,7 +2172,7 @@ func (c *machineClient) Mounts(ctx context.Context, in *empty.Empty, opts ...grp
}
func (c *machineClient) LS(ctx context.Context, in *LSRequest, opts ...grpc.CallOption) (Machine_LSClient, error) {
stream, err := c.cc.NewStream(ctx, &_Machine_serviceDesc.Streams[1], "/machineapi.Machine/LS", opts...)
stream, err := c.cc.NewStream(ctx, &_Machine_serviceDesc.Streams[1], "/machine.Machine/LS", opts...)
if err != nil {
return nil, err
}
@ -2206,7 +2205,7 @@ func (x *machineLSClient) Recv() (*FileInfo, error) {
func (c *machineClient) Reboot(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*RebootReply, error) {
out := new(RebootReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/Reboot", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/Reboot", in, out, opts...)
if err != nil {
return nil, err
}
@ -2215,7 +2214,7 @@ func (c *machineClient) Reboot(ctx context.Context, in *empty.Empty, opts ...grp
func (c *machineClient) Reset(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*ResetReply, error) {
out := new(ResetReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/Reset", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/Reset", in, out, opts...)
if err != nil {
return nil, err
}
@ -2224,7 +2223,7 @@ func (c *machineClient) Reset(ctx context.Context, in *empty.Empty, opts ...grpc
func (c *machineClient) Shutdown(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*ShutdownReply, error) {
out := new(ShutdownReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/Shutdown", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/Shutdown", in, out, opts...)
if err != nil {
return nil, err
}
@ -2233,7 +2232,7 @@ func (c *machineClient) Shutdown(ctx context.Context, in *empty.Empty, opts ...g
func (c *machineClient) Upgrade(ctx context.Context, in *UpgradeRequest, opts ...grpc.CallOption) (*UpgradeReply, error) {
out := new(UpgradeReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/Upgrade", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/Upgrade", in, out, opts...)
if err != nil {
return nil, err
}
@ -2242,7 +2241,7 @@ func (c *machineClient) Upgrade(ctx context.Context, in *UpgradeRequest, opts ..
func (c *machineClient) ServiceList(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*ServiceListReply, error) {
out := new(ServiceListReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/ServiceList", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/ServiceList", in, out, opts...)
if err != nil {
return nil, err
}
@ -2251,7 +2250,7 @@ func (c *machineClient) ServiceList(ctx context.Context, in *empty.Empty, opts .
func (c *machineClient) ServiceStart(ctx context.Context, in *ServiceStartRequest, opts ...grpc.CallOption) (*ServiceStartReply, error) {
out := new(ServiceStartReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/ServiceStart", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/ServiceStart", in, out, opts...)
if err != nil {
return nil, err
}
@ -2260,7 +2259,7 @@ func (c *machineClient) ServiceStart(ctx context.Context, in *ServiceStartReques
func (c *machineClient) ServiceStop(ctx context.Context, in *ServiceStopRequest, opts ...grpc.CallOption) (*ServiceStopReply, error) {
out := new(ServiceStopReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/ServiceStop", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/ServiceStop", in, out, opts...)
if err != nil {
return nil, err
}
@ -2269,7 +2268,7 @@ func (c *machineClient) ServiceStop(ctx context.Context, in *ServiceStopRequest,
func (c *machineClient) ServiceRestart(ctx context.Context, in *ServiceRestartRequest, opts ...grpc.CallOption) (*ServiceRestartReply, error) {
out := new(ServiceRestartReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/ServiceRestart", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/ServiceRestart", in, out, opts...)
if err != nil {
return nil, err
}
@ -2279,7 +2278,7 @@ func (c *machineClient) ServiceRestart(ctx context.Context, in *ServiceRestartRe
// Deprecated: Do not use.
func (c *machineClient) Start(ctx context.Context, in *StartRequest, opts ...grpc.CallOption) (*StartReply, error) {
out := new(StartReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/Start", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/Start", in, out, opts...)
if err != nil {
return nil, err
}
@ -2289,7 +2288,7 @@ func (c *machineClient) Start(ctx context.Context, in *StartRequest, opts ...grp
// Deprecated: Do not use.
func (c *machineClient) Stop(ctx context.Context, in *StopRequest, opts ...grpc.CallOption) (*StopReply, error) {
out := new(StopReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/Stop", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/Stop", in, out, opts...)
if err != nil {
return nil, err
}
@ -2298,7 +2297,7 @@ func (c *machineClient) Stop(ctx context.Context, in *StopRequest, opts ...grpc.
func (c *machineClient) Version(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*VersionReply, error) {
out := new(VersionReply)
err := c.cc.Invoke(ctx, "/machineapi.Machine/Version", in, out, opts...)
err := c.cc.Invoke(ctx, "/machine.Machine/Version", in, out, opts...)
if err != nil {
return nil, err
}
@ -2358,7 +2357,7 @@ func _Machine_Mounts_Handler(srv interface{}, ctx context.Context, dec func(inte
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/Mounts",
FullMethod: "/machine.Machine/Mounts",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).Mounts(ctx, req.(*empty.Empty))
@ -2397,7 +2396,7 @@ func _Machine_Reboot_Handler(srv interface{}, ctx context.Context, dec func(inte
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/Reboot",
FullMethod: "/machine.Machine/Reboot",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).Reboot(ctx, req.(*empty.Empty))
@ -2415,7 +2414,7 @@ func _Machine_Reset_Handler(srv interface{}, ctx context.Context, dec func(inter
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/Reset",
FullMethod: "/machine.Machine/Reset",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).Reset(ctx, req.(*empty.Empty))
@ -2433,7 +2432,7 @@ func _Machine_Shutdown_Handler(srv interface{}, ctx context.Context, dec func(in
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/Shutdown",
FullMethod: "/machine.Machine/Shutdown",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).Shutdown(ctx, req.(*empty.Empty))
@ -2451,7 +2450,7 @@ func _Machine_Upgrade_Handler(srv interface{}, ctx context.Context, dec func(int
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/Upgrade",
FullMethod: "/machine.Machine/Upgrade",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).Upgrade(ctx, req.(*UpgradeRequest))
@ -2469,7 +2468,7 @@ func _Machine_ServiceList_Handler(srv interface{}, ctx context.Context, dec func
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/ServiceList",
FullMethod: "/machine.Machine/ServiceList",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).ServiceList(ctx, req.(*empty.Empty))
@ -2487,7 +2486,7 @@ func _Machine_ServiceStart_Handler(srv interface{}, ctx context.Context, dec fun
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/ServiceStart",
FullMethod: "/machine.Machine/ServiceStart",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).ServiceStart(ctx, req.(*ServiceStartRequest))
@ -2505,7 +2504,7 @@ func _Machine_ServiceStop_Handler(srv interface{}, ctx context.Context, dec func
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/ServiceStop",
FullMethod: "/machine.Machine/ServiceStop",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).ServiceStop(ctx, req.(*ServiceStopRequest))
@ -2523,7 +2522,7 @@ func _Machine_ServiceRestart_Handler(srv interface{}, ctx context.Context, dec f
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/ServiceRestart",
FullMethod: "/machine.Machine/ServiceRestart",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).ServiceRestart(ctx, req.(*ServiceRestartRequest))
@ -2541,7 +2540,7 @@ func _Machine_Start_Handler(srv interface{}, ctx context.Context, dec func(inter
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/Start",
FullMethod: "/machine.Machine/Start",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).Start(ctx, req.(*StartRequest))
@ -2559,7 +2558,7 @@ func _Machine_Stop_Handler(srv interface{}, ctx context.Context, dec func(interf
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/Stop",
FullMethod: "/machine.Machine/Stop",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).Stop(ctx, req.(*StopRequest))
@ -2577,7 +2576,7 @@ func _Machine_Version_Handler(srv interface{}, ctx context.Context, dec func(int
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/machineapi.Machine/Version",
FullMethod: "/machine.Machine/Version",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MachineServer).Version(ctx, req.(*empty.Empty))
@ -2586,7 +2585,7 @@ func _Machine_Version_Handler(srv interface{}, ctx context.Context, dec func(int
}
var _Machine_serviceDesc = grpc.ServiceDesc{
ServiceName: "machineapi.Machine",
ServiceName: "machine.Machine",
HandlerType: (*MachineServer)(nil),
Methods: []grpc.MethodDesc{
{

View File

@ -1,6 +1,6 @@
syntax = "proto3";
package machineapi;
package machine;
option go_package = "github.com/talos-systems/talos/api/machine";
option java_multiple_files = true;

View File

@ -7,20 +7,12 @@ import (
context "context"
fmt "fmt"
math "math"
strings "strings"
sync "sync"
proto "github.com/golang/protobuf/proto"
empty "github.com/golang/protobuf/ptypes/empty"
go_multierror "github.com/hashicorp/go-multierror"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
credentials "google.golang.org/grpc/credentials"
metadata "google.golang.org/grpc/metadata"
status "google.golang.org/grpc/status"
common "github.com/talos-systems/talos/api/common"
tls "github.com/talos-systems/talos/pkg/grpc/tls"
)
// Reference imports to suppress errors if they are not otherwise used.
@ -34,9 +26,6 @@ var _ = math.Inf
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
// NodeMetadata from public import common/common.proto
type NodeMetadata = common.NodeMetadata
// The request message containing the containerd namespace.
type ContainerDriver int32
@ -66,7 +55,7 @@ func (ContainerDriver) EnumDescriptor() ([]byte, []int) {
type ContainersRequest struct {
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
// driver might be default "containerd" or "cri"
Driver ContainerDriver `protobuf:"varint,2,opt,name=driver,proto3,enum=osapi.ContainerDriver" json:"driver,omitempty"`
Driver ContainerDriver `protobuf:"varint,2,opt,name=driver,proto3,enum=os.ContainerDriver" json:"driver,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -445,7 +434,7 @@ type LogsRequest struct {
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
// driver might be default "containerd" or "cri"
Driver ContainerDriver `protobuf:"varint,3,opt,name=driver,proto3,enum=osapi.ContainerDriver" json:"driver,omitempty"`
Driver ContainerDriver `protobuf:"varint,3,opt,name=driver,proto3,enum=os.ContainerDriver" json:"driver,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -752,7 +741,7 @@ type RestartRequest struct {
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
// driver might be default "containerd" or "cri"
Driver ContainerDriver `protobuf:"varint,3,opt,name=driver,proto3,enum=osapi.ContainerDriver" json:"driver,omitempty"`
Driver ContainerDriver `protobuf:"varint,3,opt,name=driver,proto3,enum=os.ContainerDriver" json:"driver,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -899,7 +888,7 @@ func (m *RestartReply) GetResponse() []*RestartResponse {
type StatsRequest struct {
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
// driver might be default "containerd" or "cri"
Driver ContainerDriver `protobuf:"varint,2,opt,name=driver,proto3,enum=osapi.ContainerDriver" json:"driver,omitempty"`
Driver ContainerDriver `protobuf:"varint,2,opt,name=driver,proto3,enum=os.ContainerDriver" json:"driver,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -1128,89 +1117,89 @@ func (m *Stat) GetName() string {
}
func init() {
proto.RegisterEnum("osapi.ContainerDriver", ContainerDriver_name, ContainerDriver_value)
proto.RegisterType((*ContainersRequest)(nil), "osapi.ContainersRequest")
proto.RegisterType((*Container)(nil), "osapi.Container")
proto.RegisterType((*ContainerResponse)(nil), "osapi.ContainerResponse")
proto.RegisterType((*ContainersReply)(nil), "osapi.ContainersReply")
proto.RegisterType((*Data)(nil), "osapi.Data")
proto.RegisterType((*DataResponse)(nil), "osapi.DataResponse")
proto.RegisterType((*DataReply)(nil), "osapi.DataReply")
proto.RegisterType((*LogsRequest)(nil), "osapi.LogsRequest")
proto.RegisterType((*ProcessesRequest)(nil), "osapi.ProcessesRequest")
proto.RegisterType((*ProcessesReply)(nil), "osapi.ProcessesReply")
proto.RegisterType((*ProcessResponse)(nil), "osapi.ProcessResponse")
proto.RegisterType((*Process)(nil), "osapi.Process")
proto.RegisterType((*RestartRequest)(nil), "osapi.RestartRequest")
proto.RegisterType((*RestartResponse)(nil), "osapi.RestartResponse")
proto.RegisterType((*RestartReply)(nil), "osapi.RestartReply")
proto.RegisterType((*StatsRequest)(nil), "osapi.StatsRequest")
proto.RegisterType((*StatsResponse)(nil), "osapi.StatsResponse")
proto.RegisterType((*StatsReply)(nil), "osapi.StatsReply")
proto.RegisterType((*Stat)(nil), "osapi.Stat")
proto.RegisterEnum("os.ContainerDriver", ContainerDriver_name, ContainerDriver_value)
proto.RegisterType((*ContainersRequest)(nil), "os.ContainersRequest")
proto.RegisterType((*Container)(nil), "os.Container")
proto.RegisterType((*ContainerResponse)(nil), "os.ContainerResponse")
proto.RegisterType((*ContainersReply)(nil), "os.ContainersReply")
proto.RegisterType((*Data)(nil), "os.Data")
proto.RegisterType((*DataResponse)(nil), "os.DataResponse")
proto.RegisterType((*DataReply)(nil), "os.DataReply")
proto.RegisterType((*LogsRequest)(nil), "os.LogsRequest")
proto.RegisterType((*ProcessesRequest)(nil), "os.ProcessesRequest")
proto.RegisterType((*ProcessesReply)(nil), "os.ProcessesReply")
proto.RegisterType((*ProcessResponse)(nil), "os.ProcessResponse")
proto.RegisterType((*Process)(nil), "os.Process")
proto.RegisterType((*RestartRequest)(nil), "os.RestartRequest")
proto.RegisterType((*RestartResponse)(nil), "os.RestartResponse")
proto.RegisterType((*RestartReply)(nil), "os.RestartReply")
proto.RegisterType((*StatsRequest)(nil), "os.StatsRequest")
proto.RegisterType((*StatsResponse)(nil), "os.StatsResponse")
proto.RegisterType((*StatsReply)(nil), "os.StatsReply")
proto.RegisterType((*Stat)(nil), "os.Stat")
}
func init() { proto.RegisterFile("os/os.proto", fileDescriptor_b20a722d09fd3254) }
var fileDescriptor_b20a722d09fd3254 = []byte{
// 909 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xdd, 0x6f, 0xdb, 0x36,
0x10, 0x9f, 0x1c, 0xcb, 0x8e, 0xce, 0x8e, 0xe3, 0x32, 0x1f, 0xd0, 0xdc, 0x62, 0x48, 0x05, 0x14,
0xcb, 0x8a, 0x4d, 0xce, 0xbc, 0x8f, 0x87, 0xa1, 0x28, 0xd0, 0xc4, 0xc5, 0x10, 0x6c, 0x4d, 0x02,
0xb6, 0x7b, 0x19, 0x06, 0x04, 0xb4, 0xc4, 0xba, 0xc4, 0x2c, 0x91, 0x15, 0xa9, 0x6e, 0xfe, 0x4f,
0xf6, 0xb6, 0x97, 0xfd, 0x9d, 0xc3, 0xc0, 0x0f, 0x29, 0x8a, 0x9d, 0x6d, 0x69, 0x8b, 0xed, 0x49,
0xe4, 0xef, 0x8e, 0x77, 0xbc, 0xe3, 0xef, 0xee, 0x04, 0x3d, 0x2e, 0xc7, 0x5c, 0xc6, 0xa2, 0xe0,
0x8a, 0x23, 0x9f, 0x4b, 0x22, 0xd8, 0xe8, 0xee, 0x9c, 0xf3, 0xf9, 0x82, 0x8e, 0x0d, 0x38, 0x2b,
0x5f, 0x8e, 0x69, 0x26, 0xd4, 0xd2, 0xea, 0x8c, 0x76, 0x12, 0x9e, 0x65, 0x3c, 0x1f, 0xdb, 0x8f,
0x05, 0x23, 0x02, 0x77, 0x4e, 0x78, 0xae, 0x08, 0xcb, 0x69, 0x21, 0x31, 0x7d, 0x5d, 0x52, 0xa9,
0xd0, 0x3d, 0x08, 0x72, 0x92, 0x51, 0x29, 0x48, 0x42, 0x43, 0xef, 0xc0, 0x3b, 0x0c, 0xf0, 0x15,
0x80, 0x62, 0xe8, 0xa4, 0x05, 0x7b, 0x43, 0x8b, 0xb0, 0x75, 0xe0, 0x1d, 0x0e, 0x26, 0xfb, 0xb1,
0x71, 0x1e, 0xd7, 0x76, 0xa6, 0x46, 0x8a, 0x9d, 0x56, 0xf4, 0x87, 0x07, 0x41, 0x2d, 0xfb, 0x17,
0xdb, 0x03, 0x68, 0xb1, 0xd4, 0xd8, 0x0d, 0x70, 0x8b, 0xa5, 0x68, 0x17, 0x7c, 0x96, 0x91, 0x39,
0x0d, 0x37, 0x0c, 0x64, 0x37, 0x68, 0x08, 0x1b, 0x82, 0xa5, 0x61, 0xfb, 0xc0, 0x3b, 0xdc, 0xc2,
0x7a, 0x89, 0xf6, 0xa1, 0x23, 0x15, 0x51, 0xa5, 0x0c, 0x7d, 0xa3, 0xe8, 0x76, 0x68, 0x0f, 0x3a,
0x82, 0xa7, 0x97, 0x2c, 0x0d, 0x3b, 0xd6, 0x80, 0xe0, 0xe9, 0x69, 0x8a, 0x10, 0xb4, 0xb5, 0xcf,
0xb0, 0x6b, 0x40, 0xb3, 0x8e, 0x7e, 0x69, 0x64, 0x02, 0x53, 0x29, 0x78, 0x2e, 0x29, 0x3a, 0x82,
0xcd, 0x8c, 0x2a, 0x92, 0x12, 0x45, 0xcc, 0x65, 0x7b, 0x93, 0xdd, 0xd8, 0xe5, 0xef, 0x8c, 0xa7,
0xf4, 0x99, 0x93, 0xe1, 0x5a, 0x0b, 0x1d, 0x01, 0x24, 0x75, 0x42, 0xc3, 0xd6, 0xc1, 0xc6, 0x61,
0x6f, 0x32, 0x5c, 0xcd, 0x10, 0x6e, 0xe8, 0x44, 0xdf, 0xc2, 0x76, 0xf3, 0x09, 0xc4, 0x62, 0x89,
0xbe, 0x84, 0xcd, 0xc2, 0x5d, 0x21, 0xf4, 0x8c, 0x89, 0x70, 0xcd, 0x84, 0x93, 0xe3, 0x5a, 0x33,
0xba, 0x07, 0xed, 0xa9, 0xbe, 0xc2, 0x2e, 0xf8, 0xb3, 0xa5, 0xa2, 0xd2, 0xdc, 0xb8, 0x8f, 0xed,
0x26, 0x4a, 0xa0, 0xaf, 0xa5, 0xef, 0x11, 0xda, 0xfd, 0xca, 0x6e, 0xcb, 0xa8, 0xf7, 0xdc, 0x95,
0x8c, 0x55, 0xe7, 0xe4, 0x11, 0x04, 0xd6, 0x89, 0x8e, 0x62, 0xbc, 0x16, 0xc5, 0x4e, 0xf3, 0xc8,
0x7a, 0x00, 0x3f, 0x43, 0xef, 0x7b, 0x3e, 0xbf, 0x25, 0x0d, 0x57, 0xa9, 0x72, 0x45, 0xcb, 0x8d,
0x5b, 0xd1, 0x12, 0xc1, 0xf0, 0xa2, 0xe0, 0x09, 0x95, 0x92, 0x56, 0x1e, 0xa3, 0x29, 0x0c, 0x1a,
0x98, 0x8e, 0x61, 0xb2, 0x16, 0x43, 0x65, 0xd7, 0x29, 0xde, 0x10, 0xc6, 0x6b, 0xd8, 0x5e, 0x11,
0xbe, 0x43, 0xb2, 0x3f, 0x85, 0x40, 0x54, 0x57, 0x71, 0x34, 0x1a, 0xac, 0x78, 0xbe, 0x52, 0x88,
0x7e, 0x6b, 0x41, 0xd7, 0xc1, 0x55, 0x75, 0x68, 0x37, 0xbe, 0xad, 0x0e, 0x04, 0x6d, 0x21, 0x5c,
0xb2, 0x7c, 0x6c, 0xd6, 0x9a, 0x24, 0xba, 0x46, 0xea, 0xca, 0x32, 0x1b, 0x14, 0x42, 0x57, 0xbd,
0x2a, 0x28, 0x49, 0xa5, 0xa9, 0x2e, 0x1f, 0x57, 0x5b, 0xf4, 0x21, 0x6c, 0x26, 0xa2, 0xbc, 0x54,
0x2c, 0xa3, 0xa6, 0xc6, 0x3c, 0xdc, 0x4d, 0x44, 0xf9, 0x82, 0x65, 0x14, 0x3d, 0x80, 0xc1, 0x1b,
0x56, 0xa8, 0x92, 0x2c, 0x2e, 0x33, 0x9a, 0xf1, 0x62, 0x69, 0x8a, 0xad, 0x8d, 0xb7, 0x1c, 0xfa,
0xcc, 0x80, 0xe8, 0x63, 0xd8, 0x2e, 0xa8, 0x64, 0x29, 0xcd, 0x55, 0xa5, 0xd7, 0x35, 0x7a, 0x83,
0x0a, 0x76, 0x8a, 0x21, 0x74, 0x75, 0x6e, 0x48, 0x9e, 0x86, 0x9b, 0xe6, 0x72, 0xd5, 0x16, 0x7d,
0x04, 0x40, 0x7f, 0xa5, 0x49, 0xa9, 0xc8, 0x6c, 0x41, 0xc3, 0xc0, 0x08, 0x1b, 0x88, 0x0e, 0x94,
0x14, 0x73, 0x19, 0x82, 0xad, 0x6b, 0xbd, 0x8e, 0x72, 0x18, 0x60, 0x2a, 0x15, 0x29, 0xd4, 0xff,
0xc3, 0xab, 0x13, 0xd8, 0xae, 0xfd, 0xbd, 0xeb, 0xeb, 0x47, 0xc7, 0xd0, 0xaf, 0x8d, 0xfc, 0x33,
0x0d, 0x57, 0x7c, 0x35, 0x68, 0xf8, 0x13, 0xf4, 0x9f, 0x2b, 0xa2, 0xfe, 0xa3, 0xae, 0x9e, 0xc2,
0x96, 0xb3, 0xfe, 0x3e, 0xfd, 0x44, 0xb3, 0xae, 0xa2, 0x77, 0xd5, 0x4f, 0xb4, 0x59, 0xcb, 0x47,
0x19, 0x3d, 0x06, 0x70, 0x5e, 0x74, 0x16, 0x8e, 0xd6, 0xb2, 0xb0, 0xdb, 0x38, 0x73, 0x53, 0x29,
0xfe, 0xee, 0x41, 0x5b, 0xcb, 0xde, 0xf2, 0xcd, 0xef, 0x43, 0xdf, 0x32, 0xf4, 0xb2, 0x94, 0x7a,
0xfa, 0xb4, 0x0d, 0x4f, 0x7b, 0x16, 0xfb, 0x41, 0x43, 0xe8, 0x2e, 0x04, 0xba, 0x1e, 0xac, 0xdc,
0x37, 0x72, 0x5d, 0x20, 0x56, 0x78, 0xfb, 0xb1, 0xf3, 0xf0, 0x61, 0xa3, 0xfb, 0xdb, 0x14, 0xa3,
0x01, 0xc0, 0xc9, 0xf9, 0xd9, 0x8b, 0x27, 0xa7, 0x67, 0x4f, 0xf1, 0x74, 0xf8, 0x01, 0xea, 0xc2,
0xc6, 0x09, 0x3e, 0x1d, 0x7a, 0x93, 0x3f, 0x5b, 0xd0, 0x3a, 0x7f, 0x8e, 0x1e, 0x03, 0x5c, 0x0d,
0x0c, 0xb4, 0x36, 0x19, 0xaa, 0x07, 0x1f, 0xed, 0xdf, 0x20, 0xd1, 0x69, 0xfc, 0x1c, 0xfc, 0x69,
0x46, 0xe5, 0x1c, 0xed, 0xc7, 0xf6, 0x7f, 0x21, 0xae, 0xfe, 0x17, 0xe2, 0xa7, 0xfa, 0x7f, 0x61,
0x34, 0xbc, 0xd6, 0xa6, 0xf5, 0x91, 0xaf, 0x01, 0xbe, 0x2b, 0x67, 0x34, 0xe1, 0xf9, 0x4b, 0xf6,
0x36, 0xe7, 0x3e, 0x81, 0xb6, 0xee, 0xe8, 0x08, 0x39, 0x49, 0xa3, 0xbd, 0x8f, 0x9a, 0xf3, 0xe3,
0xc8, 0x43, 0xdf, 0x40, 0x50, 0xf7, 0xde, 0xbf, 0xf5, 0xb0, 0x77, 0xbd, 0x05, 0x56, 0x5d, 0xfa,
0x2b, 0xe8, 0xba, 0x3a, 0x40, 0x7b, 0xab, 0x75, 0x61, 0x9d, 0xed, 0xac, 0xc2, 0x76, 0x40, 0xf9,
0x86, 0x38, 0x68, 0xe7, 0x3a, 0x8d, 0xec, 0x91, 0x3b, 0xd7, 0x41, 0xb1, 0x58, 0x1e, 0x3f, 0xd2,
0xc3, 0x3d, 0x8b, 0xb9, 0x8c, 0x89, 0x60, 0xc7, 0xfe, 0xb9, 0x7c, 0x22, 0xd8, 0x85, 0xf7, 0xe3,
0x83, 0x39, 0x53, 0xaf, 0xca, 0x99, 0xa6, 0xfb, 0x58, 0x91, 0x05, 0x97, 0x9f, 0xc9, 0xa5, 0x54,
0x34, 0x93, 0x76, 0x37, 0x26, 0x82, 0x8d, 0xb9, 0xbc, 0xf0, 0x66, 0x1d, 0x13, 0xce, 0x17, 0x7f,
0x05, 0x00, 0x00, 0xff, 0xff, 0x20, 0x41, 0x0c, 0xc5, 0xbc, 0x09, 0x00, 0x00,
// 900 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x5f, 0x73, 0xdb, 0x44,
0x10, 0x47, 0xb2, 0x65, 0x5b, 0xeb, 0xbf, 0xbd, 0xa4, 0x1d, 0xe1, 0x76, 0x3a, 0x41, 0x4c, 0x87,
0xb4, 0x10, 0xbb, 0xa4, 0x0f, 0xc0, 0xc0, 0x0c, 0x93, 0xc6, 0x7d, 0xc8, 0x40, 0x93, 0xce, 0xb5,
0x3c, 0xc0, 0x03, 0xe1, 0x6c, 0x5d, 0x9d, 0x1b, 0x2c, 0xdd, 0xa1, 0x3b, 0x75, 0xf0, 0x37, 0xe1,
0x8d, 0x17, 0xbe, 0x16, 0xdf, 0x85, 0xb9, 0x3f, 0x92, 0xe5, 0xa4, 0xd0, 0xd0, 0x0e, 0x3c, 0xf9,
0xee, 0xb7, 0xbf, 0xdb, 0xdd, 0x5b, 0xff, 0x76, 0x4f, 0xd0, 0xe5, 0x72, 0xca, 0xe5, 0x44, 0xe4,
0x5c, 0x71, 0xe4, 0x73, 0x39, 0xbe, 0xbd, 0xe4, 0x7c, 0xb9, 0xa2, 0x53, 0x83, 0xcc, 0x8b, 0x97,
0x53, 0x9a, 0x0a, 0xb5, 0xb6, 0x84, 0xf1, 0xce, 0x82, 0xa7, 0x29, 0xcf, 0xa6, 0xf6, 0xc7, 0x82,
0xf1, 0x8f, 0x70, 0xe3, 0x98, 0x67, 0x8a, 0xb0, 0x8c, 0xe6, 0x12, 0xd3, 0x5f, 0x0a, 0x2a, 0x15,
0xba, 0x03, 0x61, 0x46, 0x52, 0x2a, 0x05, 0x59, 0xd0, 0xc8, 0xdb, 0xf3, 0xf6, 0x43, 0xbc, 0x01,
0xd0, 0xc7, 0xd0, 0x4a, 0x72, 0xf6, 0x8a, 0xe6, 0x91, 0xbf, 0xe7, 0xed, 0x0f, 0x0e, 0x77, 0x26,
0x5c, 0x4e, 0x2a, 0x27, 0x33, 0x63, 0xc2, 0x8e, 0x12, 0xff, 0xe1, 0x41, 0x58, 0xd9, 0xde, 0xe0,
0x78, 0x00, 0x3e, 0x4b, 0x8c, 0xd3, 0x10, 0xfb, 0x2c, 0x41, 0xbb, 0x10, 0xb0, 0x94, 0x2c, 0x69,
0xd4, 0x30, 0x90, 0xdd, 0xa0, 0x11, 0x34, 0x04, 0x4b, 0xa2, 0xe6, 0x9e, 0xb7, 0xdf, 0xc7, 0x7a,
0x89, 0x6e, 0x41, 0x4b, 0x2a, 0xa2, 0x0a, 0x19, 0x05, 0x86, 0xe8, 0x76, 0xe8, 0x26, 0xb4, 0x04,
0x4f, 0xce, 0x59, 0x12, 0xb5, 0xac, 0x03, 0xc1, 0x93, 0x93, 0x04, 0x21, 0x68, 0xea, 0x98, 0x51,
0xdb, 0x80, 0x66, 0x1d, 0xab, 0x5a, 0x19, 0x30, 0x95, 0x82, 0x67, 0x92, 0xa2, 0x87, 0xd0, 0x49,
0xa9, 0x22, 0x09, 0x51, 0xc4, 0x24, 0xdb, 0x3d, 0xdc, 0x9d, 0xb8, 0xe2, 0x9d, 0xf2, 0x84, 0x3e,
0x75, 0x36, 0x5c, 0xb1, 0xd0, 0x01, 0xc0, 0xa2, 0xaa, 0x66, 0xe4, 0xef, 0x35, 0xf6, 0xbb, 0x87,
0xfd, 0xad, 0xf2, 0xe0, 0x1a, 0x21, 0x9e, 0xc1, 0xb0, 0x5e, 0x7c, 0xb1, 0x5a, 0xa3, 0x4f, 0xa1,
0x93, 0xbb, 0xf8, 0x91, 0x67, 0xce, 0xdf, 0xdc, 0x3e, 0xef, 0x8c, 0xb8, 0xa2, 0xc5, 0x77, 0xa0,
0x39, 0xd3, 0xc1, 0x77, 0x21, 0x98, 0xaf, 0x15, 0x95, 0x26, 0xd7, 0x1e, 0xb6, 0x9b, 0xf8, 0x27,
0xe8, 0x69, 0xeb, 0x3b, 0x5c, 0xea, 0x6e, 0xe9, 0xd7, 0x37, 0xf4, 0x8e, 0xce, 0xc7, 0xb8, 0x74,
0x11, 0xbe, 0x80, 0xd0, 0x46, 0xd0, 0xf9, 0x7f, 0x72, 0x25, 0xff, 0x51, 0xc5, 0xbf, 0x9a, 0xfa,
0x05, 0x74, 0xbf, 0xe5, 0xcb, 0x6b, 0xea, 0xee, 0xb2, 0x3c, 0x36, 0x3a, 0x6c, 0xbc, 0x59, 0x87,
0x08, 0x46, 0xcf, 0x72, 0xbe, 0xa0, 0x52, 0xd2, 0x32, 0x5c, 0x7c, 0x04, 0x83, 0x1a, 0xa6, 0xb3,
0x9f, 0x5e, 0xc9, 0xde, 0x38, 0x75, 0xac, 0xd7, 0x5c, 0x20, 0x83, 0xe1, 0x25, 0xe3, 0x5b, 0x14,
0xf8, 0x3e, 0x84, 0xa2, 0xcc, 0xc3, 0x89, 0xa6, 0x5b, 0x0f, 0xbb, 0xb1, 0xc6, 0xbf, 0xf9, 0xd0,
0x76, 0x70, 0xd9, 0x08, 0x3a, 0x46, 0x60, 0x1b, 0x01, 0x41, 0x53, 0x08, 0x57, 0xa3, 0x00, 0x9b,
0xb5, 0x56, 0x85, 0x6e, 0x87, 0xaa, 0x89, 0xcc, 0x06, 0x45, 0xd0, 0x56, 0x17, 0x39, 0x25, 0x89,
0x34, 0x8d, 0x14, 0xe0, 0x72, 0x8b, 0xde, 0x87, 0xce, 0x42, 0x14, 0xe7, 0x8a, 0xa5, 0xd4, 0xb4,
0x93, 0x87, 0xdb, 0x0b, 0x51, 0xbc, 0x60, 0x29, 0x45, 0xf7, 0x60, 0xf0, 0x8a, 0xe5, 0xaa, 0x20,
0xab, 0xf3, 0x94, 0xa6, 0x3c, 0x5f, 0x9b, 0xbe, 0x6a, 0xe2, 0xbe, 0x43, 0x9f, 0x1a, 0x10, 0x7d,
0x04, 0xc3, 0x9c, 0x4a, 0x96, 0xd0, 0x4c, 0x95, 0xbc, 0xb6, 0xe1, 0x0d, 0x4a, 0xd8, 0x11, 0x23,
0x68, 0xeb, 0xc2, 0x90, 0x2c, 0x89, 0x3a, 0x26, 0xb9, 0x72, 0x8b, 0xee, 0x02, 0xd0, 0x5f, 0xe9,
0xa2, 0x50, 0x64, 0xbe, 0xa2, 0x51, 0x68, 0x8c, 0x35, 0x44, 0x5f, 0x94, 0xe4, 0x4b, 0x19, 0x81,
0x6d, 0x61, 0xbd, 0x8e, 0x7f, 0x86, 0x01, 0xa6, 0x52, 0x91, 0x5c, 0xfd, 0x0f, 0x72, 0x3a, 0x86,
0x61, 0x15, 0xec, 0x6d, 0xff, 0xf7, 0xf8, 0x6b, 0xe8, 0x55, 0x4e, 0xfe, 0x41, 0x7d, 0x97, 0x02,
0xd5, 0xd4, 0xf7, 0x3d, 0xf4, 0x9e, 0x2b, 0xa2, 0xfe, 0x8b, 0xb9, 0x4d, 0xa0, 0xef, 0x5c, 0xbf,
0xcb, 0xdc, 0xd0, 0x62, 0x2b, 0x25, 0x6d, 0xe6, 0x86, 0xf6, 0x69, 0x35, 0x28, 0xe3, 0x2f, 0x01,
0x5c, 0x08, 0x7d, 0xf9, 0x83, 0x2b, 0x97, 0xbf, 0x51, 0x1e, 0x78, 0x5d, 0xe3, 0xfd, 0xee, 0x41,
0x53, 0xdb, 0xfe, 0xe5, 0x9f, 0xfc, 0x01, 0xf4, 0xac, 0x24, 0xcf, 0x0b, 0xa9, 0x5f, 0x96, 0xa6,
0x11, 0x66, 0xd7, 0x62, 0xdf, 0x69, 0x08, 0xdd, 0x86, 0x50, 0x37, 0x80, 0xb5, 0x07, 0xc6, 0xae,
0x3b, 0xc2, 0x1a, 0xaf, 0xff, 0xa4, 0x3c, 0x78, 0x50, 0x1b, 0xee, 0xb6, 0xb8, 0x68, 0x00, 0x70,
0x7c, 0x76, 0xfa, 0xe2, 0xe8, 0xe4, 0xf4, 0x09, 0x9e, 0x8d, 0xde, 0x43, 0x6d, 0x68, 0x1c, 0xe3,
0x93, 0x91, 0x77, 0xf8, 0xa7, 0x0f, 0xfe, 0xd9, 0x73, 0xf4, 0x39, 0xc0, 0xe6, 0x3d, 0x40, 0xdb,
0x83, 0xbf, 0xfc, 0x93, 0xc7, 0x3b, 0x97, 0x61, 0x5d, 0xbd, 0x09, 0x04, 0xb3, 0x94, 0xca, 0x25,
0xba, 0x35, 0xb1, 0x9f, 0x00, 0x93, 0xf2, 0x13, 0x60, 0xf2, 0x44, 0x7f, 0x02, 0x8c, 0xfb, 0x9b,
0x29, 0xac, 0xf9, 0x8f, 0x00, 0xbe, 0x29, 0xe6, 0x74, 0xc1, 0xb3, 0x97, 0xec, 0xda, 0x87, 0x3e,
0x84, 0xa6, 0x9e, 0xd6, 0x68, 0xa8, 0xe1, 0xda, 0xdc, 0x1e, 0x57, 0x4f, 0xc2, 0x43, 0x0f, 0x7d,
0x06, 0x61, 0x35, 0x54, 0xff, 0xd6, 0x31, 0xaa, 0x8d, 0xb7, 0xcd, 0xec, 0x6d, 0x3b, 0xa5, 0x23,
0xb4, 0x25, 0x7b, 0x1b, 0x63, 0xb4, 0x85, 0xe9, 0x03, 0xf7, 0x21, 0x30, 0xea, 0x40, 0xa3, 0x9a,
0x50, 0x2c, 0x79, 0x50, 0x43, 0xc4, 0x6a, 0xfd, 0xf8, 0x2b, 0xfd, 0x2e, 0xa7, 0x1a, 0x24, 0x82,
0x3d, 0x0e, 0xce, 0xe4, 0x91, 0x60, 0xcf, 0xbc, 0x1f, 0xee, 0x2d, 0x99, 0xba, 0x28, 0xe6, 0x5a,
0xc7, 0x53, 0x45, 0x56, 0x5c, 0x1e, 0xc8, 0xb5, 0x54, 0x34, 0x95, 0x76, 0x37, 0x25, 0x82, 0x4d,
0xb9, 0x9c, 0xb7, 0x4c, 0xf6, 0x8f, 0xfe, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xe5, 0x4b, 0x71,
0x6f, 0x09, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -1244,7 +1233,7 @@ func NewOSClient(cc *grpc.ClientConn) OSClient {
func (c *oSClient) Containers(ctx context.Context, in *ContainersRequest, opts ...grpc.CallOption) (*ContainersReply, error) {
out := new(ContainersReply)
err := c.cc.Invoke(ctx, "/osapi.OS/Containers", in, out, opts...)
err := c.cc.Invoke(ctx, "/os.OS/Containers", in, out, opts...)
if err != nil {
return nil, err
}
@ -1253,7 +1242,7 @@ func (c *oSClient) Containers(ctx context.Context, in *ContainersRequest, opts .
func (c *oSClient) Dmesg(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DataReply, error) {
out := new(DataReply)
err := c.cc.Invoke(ctx, "/osapi.OS/Dmesg", in, out, opts...)
err := c.cc.Invoke(ctx, "/os.OS/Dmesg", in, out, opts...)
if err != nil {
return nil, err
}
@ -1262,7 +1251,7 @@ func (c *oSClient) Dmesg(ctx context.Context, in *empty.Empty, opts ...grpc.Call
func (c *oSClient) Kubeconfig(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*DataReply, error) {
out := new(DataReply)
err := c.cc.Invoke(ctx, "/osapi.OS/Kubeconfig", in, out, opts...)
err := c.cc.Invoke(ctx, "/os.OS/Kubeconfig", in, out, opts...)
if err != nil {
return nil, err
}
@ -1270,7 +1259,7 @@ func (c *oSClient) Kubeconfig(ctx context.Context, in *empty.Empty, opts ...grpc
}
func (c *oSClient) Logs(ctx context.Context, in *LogsRequest, opts ...grpc.CallOption) (OS_LogsClient, error) {
stream, err := c.cc.NewStream(ctx, &_OS_serviceDesc.Streams[0], "/osapi.OS/Logs", opts...)
stream, err := c.cc.NewStream(ctx, &_OS_serviceDesc.Streams[0], "/os.OS/Logs", opts...)
if err != nil {
return nil, err
}
@ -1303,7 +1292,7 @@ func (x *oSLogsClient) Recv() (*Data, error) {
func (c *oSClient) Processes(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*ProcessesReply, error) {
out := new(ProcessesReply)
err := c.cc.Invoke(ctx, "/osapi.OS/Processes", in, out, opts...)
err := c.cc.Invoke(ctx, "/os.OS/Processes", in, out, opts...)
if err != nil {
return nil, err
}
@ -1312,7 +1301,7 @@ func (c *oSClient) Processes(ctx context.Context, in *empty.Empty, opts ...grpc.
func (c *oSClient) Restart(ctx context.Context, in *RestartRequest, opts ...grpc.CallOption) (*RestartReply, error) {
out := new(RestartReply)
err := c.cc.Invoke(ctx, "/osapi.OS/Restart", in, out, opts...)
err := c.cc.Invoke(ctx, "/os.OS/Restart", in, out, opts...)
if err != nil {
return nil, err
}
@ -1321,7 +1310,7 @@ func (c *oSClient) Restart(ctx context.Context, in *RestartRequest, opts ...grpc
func (c *oSClient) Stats(ctx context.Context, in *StatsRequest, opts ...grpc.CallOption) (*StatsReply, error) {
out := new(StatsReply)
err := c.cc.Invoke(ctx, "/osapi.OS/Stats", in, out, opts...)
err := c.cc.Invoke(ctx, "/os.OS/Stats", in, out, opts...)
if err != nil {
return nil, err
}
@ -1339,38 +1328,6 @@ type OSServer interface {
Stats(context.Context, *StatsRequest) (*StatsReply, error)
}
// UnimplementedOSServer can be embedded to have forward compatible implementations.
type UnimplementedOSServer struct {
}
func (*UnimplementedOSServer) Containers(ctx context.Context, req *ContainersRequest) (*ContainersReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Containers not implemented")
}
func (*UnimplementedOSServer) Dmesg(ctx context.Context, req *empty.Empty) (*DataReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Dmesg not implemented")
}
func (*UnimplementedOSServer) Kubeconfig(ctx context.Context, req *empty.Empty) (*DataReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Kubeconfig not implemented")
}
func (*UnimplementedOSServer) Logs(req *LogsRequest, srv OS_LogsServer) error {
return status.Errorf(codes.Unimplemented, "method Logs not implemented")
}
func (*UnimplementedOSServer) Processes(ctx context.Context, req *empty.Empty) (*ProcessesReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Processes not implemented")
}
func (*UnimplementedOSServer) Restart(ctx context.Context, req *RestartRequest) (*RestartReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Restart not implemented")
}
func (*UnimplementedOSServer) Stats(ctx context.Context, req *StatsRequest) (*StatsReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Stats not implemented")
}
func RegisterOSServer(s *grpc.Server, srv OSServer) {
s.RegisterService(&_OS_serviceDesc, srv)
}
@ -1385,7 +1342,7 @@ func _OS_Containers_Handler(srv interface{}, ctx context.Context, dec func(inter
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/osapi.OS/Containers",
FullMethod: "/os.OS/Containers",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(OSServer).Containers(ctx, req.(*ContainersRequest))
@ -1403,7 +1360,7 @@ func _OS_Dmesg_Handler(srv interface{}, ctx context.Context, dec func(interface{
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/osapi.OS/Dmesg",
FullMethod: "/os.OS/Dmesg",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(OSServer).Dmesg(ctx, req.(*empty.Empty))
@ -1421,7 +1378,7 @@ func _OS_Kubeconfig_Handler(srv interface{}, ctx context.Context, dec func(inter
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/osapi.OS/Kubeconfig",
FullMethod: "/os.OS/Kubeconfig",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(OSServer).Kubeconfig(ctx, req.(*empty.Empty))
@ -1460,7 +1417,7 @@ func _OS_Processes_Handler(srv interface{}, ctx context.Context, dec func(interf
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/osapi.OS/Processes",
FullMethod: "/os.OS/Processes",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(OSServer).Processes(ctx, req.(*empty.Empty))
@ -1478,7 +1435,7 @@ func _OS_Restart_Handler(srv interface{}, ctx context.Context, dec func(interfac
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/osapi.OS/Restart",
FullMethod: "/os.OS/Restart",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(OSServer).Restart(ctx, req.(*RestartRequest))
@ -1496,7 +1453,7 @@ func _OS_Stats_Handler(srv interface{}, ctx context.Context, dec func(interface{
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/osapi.OS/Stats",
FullMethod: "/os.OS/Stats",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(OSServer).Stats(ctx, req.(*StatsRequest))
@ -1505,7 +1462,7 @@ func _OS_Stats_Handler(srv interface{}, ctx context.Context, dec func(interface{
}
var _OS_serviceDesc = grpc.ServiceDesc{
ServiceName: "osapi.OS",
ServiceName: "os.OS",
HandlerType: (*OSServer)(nil),
Methods: []grpc.MethodDesc{
{
@ -1542,221 +1499,3 @@ var _OS_serviceDesc = grpc.ServiceDesc{
},
Metadata: "os/os.proto",
}
type runnerfn func(*proxyOSClient, interface{}, *sync.WaitGroup, chan proto.Message, chan error)
type proxyOSClient struct {
Conn OSClient
Context context.Context
Target string
DialOpts []grpc.DialOption
}
func proxyOSRunner(clients []*proxyOSClient, in interface{}, runner runnerfn) ([]proto.Message, error) {
var (
errors *go_multierror.Error
wg sync.WaitGroup
)
respCh := make(chan proto.Message, len(clients))
errCh := make(chan error, len(clients))
wg.Add(len(clients))
for _, client := range clients {
go runner(client, in, &wg, respCh, errCh)
}
wg.Wait()
close(respCh)
close(errCh)
var response []proto.Message
for resp := range respCh {
response = append(response, resp)
}
for err := range errCh {
errors = go_multierror.Append(errors, err)
}
return response, errors.ErrorOrNil()
}
type OSProxy struct {
Provider tls.CertificateProvider
}
func NewOSProxy(provider tls.CertificateProvider) *OSProxy {
return &OSProxy{Provider: provider}
}
func (p *OSProxy) UnaryInterceptor() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
pkg := strings.Split(info.FullMethod, "/")[1]
if pkg != "osapi.OS" {
return handler(ctx, req)
}
md, _ := metadata.FromIncomingContext(ctx)
if _, ok := md["proxyfrom"]; ok {
return handler(ctx, req)
}
ca, err := p.Provider.GetCA()
if err != nil {
return nil, err
}
certs, err := p.Provider.GetCertificate(nil)
if err != nil {
return nil, err
}
tlsConfig, err := tls.New(
tls.WithClientAuthType(tls.Mutual),
tls.WithCACertPEM(ca),
tls.WithKeypair(*certs),
)
return p.Proxy(ctx, info.FullMethod, credentials.NewTLS(tlsConfig), req)
}
}
func (p *OSProxy) Proxy(ctx context.Context, method string, creds credentials.TransportCredentials, in interface{}, opts ...grpc.CallOption) (proto.Message, error) {
var (
err error
errors *go_multierror.Error
msgs []proto.Message
ok bool
response proto.Message
targets []string
)
md, _ := metadata.FromIncomingContext(ctx)
// default to target node specified in config or on cli
if targets, ok = md["targets"]; !ok {
targets = md[":authority"]
}
proxyMd := metadata.New(make(map[string]string))
proxyMd.Set("proxyfrom", md[":authority"]...)
clients := []*proxyOSClient{}
for _, target := range targets {
c := &proxyOSClient{
Context: metadata.NewOutgoingContext(context.Background(), proxyMd),
Target: target,
}
overrideCreds := creds
conn, err := grpc.Dial(fmt.Sprintf("%s:%d", c.Target, 50000), grpc.WithTransportCredentials(overrideCreds))
if err != nil {
errors = go_multierror.Append(errors, err)
continue
}
c.Conn = NewOSClient(conn)
clients = append(clients, c)
}
switch method {
case "/osapi.OS/Containers":
resp := &ContainersReply{}
msgs, err = proxyOSRunner(clients, in, proxyContainers)
for _, msg := range msgs {
resp.Response = append(resp.Response, msg.(*ContainersReply).Response[0])
}
response = resp
case "/osapi.OS/Dmesg":
resp := &DataReply{}
msgs, err = proxyOSRunner(clients, in, proxyDmesg)
for _, msg := range msgs {
resp.Response = append(resp.Response, msg.(*DataReply).Response[0])
}
response = resp
case "/osapi.OS/Kubeconfig":
resp := &DataReply{}
msgs, err = proxyOSRunner(clients, in, proxyKubeconfig)
for _, msg := range msgs {
resp.Response = append(resp.Response, msg.(*DataReply).Response[0])
}
response = resp
case "/osapi.OS/Processes":
resp := &ProcessesReply{}
msgs, err = proxyOSRunner(clients, in, proxyProcesses)
for _, msg := range msgs {
resp.Response = append(resp.Response, msg.(*ProcessesReply).Response[0])
}
response = resp
case "/osapi.OS/Restart":
resp := &RestartReply{}
msgs, err = proxyOSRunner(clients, in, proxyRestart)
for _, msg := range msgs {
resp.Response = append(resp.Response, msg.(*RestartReply).Response[0])
}
response = resp
case "/osapi.OS/Stats":
resp := &StatsReply{}
msgs, err = proxyOSRunner(clients, in, proxyStats)
for _, msg := range msgs {
resp.Response = append(resp.Response, msg.(*StatsReply).Response[0])
}
response = resp
}
if err != nil {
errors = go_multierror.Append(errors, err)
}
return response, errors.ErrorOrNil()
}
func proxyContainers(client *proxyOSClient, in interface{}, wg *sync.WaitGroup, respCh chan proto.Message, errCh chan error) {
defer wg.Done()
resp, err := client.Conn.Containers(client.Context, in.(*ContainersRequest))
if err != nil {
errCh <- err
return
}
resp.Response[0].Metadata = &NodeMetadata{Hostname: client.Target}
respCh <- resp
}
func proxyDmesg(client *proxyOSClient, in interface{}, wg *sync.WaitGroup, respCh chan proto.Message, errCh chan error) {
defer wg.Done()
resp, err := client.Conn.Dmesg(client.Context, in.(*empty.Empty))
if err != nil {
errCh <- err
return
}
resp.Response[0].Metadata = &NodeMetadata{Hostname: client.Target}
respCh <- resp
}
func proxyKubeconfig(client *proxyOSClient, in interface{}, wg *sync.WaitGroup, respCh chan proto.Message, errCh chan error) {
defer wg.Done()
resp, err := client.Conn.Kubeconfig(client.Context, in.(*empty.Empty))
if err != nil {
errCh <- err
return
}
resp.Response[0].Metadata = &NodeMetadata{Hostname: client.Target}
respCh <- resp
}
func proxyProcesses(client *proxyOSClient, in interface{}, wg *sync.WaitGroup, respCh chan proto.Message, errCh chan error) {
defer wg.Done()
resp, err := client.Conn.Processes(client.Context, in.(*empty.Empty))
if err != nil {
errCh <- err
return
}
resp.Response[0].Metadata = &NodeMetadata{Hostname: client.Target}
respCh <- resp
}
func proxyRestart(client *proxyOSClient, in interface{}, wg *sync.WaitGroup, respCh chan proto.Message, errCh chan error) {
defer wg.Done()
resp, err := client.Conn.Restart(client.Context, in.(*RestartRequest))
if err != nil {
errCh <- err
return
}
resp.Response[0].Metadata = &NodeMetadata{Hostname: client.Target}
respCh <- resp
}
func proxyStats(client *proxyOSClient, in interface{}, wg *sync.WaitGroup, respCh chan proto.Message, errCh chan error) {
defer wg.Done()
resp, err := client.Conn.Stats(client.Context, in.(*StatsRequest))
if err != nil {
errCh <- err
return
}
resp.Response[0].Metadata = &NodeMetadata{Hostname: client.Target}
respCh <- resp
}

View File

@ -1,6 +1,6 @@
syntax = "proto3";
package osapi;
package os;
option go_package = "github.com/talos-systems/talos/api/os";
option java_multiple_files = true;
@ -8,7 +8,7 @@ option java_outer_classname = "OsApi";
option java_package = "com.os.api";
import "google/protobuf/empty.proto";
import public "common/common.proto";
import "common/common.proto";
// The OS service definition.
//

View File

@ -59,11 +59,6 @@ func Execute() {
defer globalCtxCancel()
// Update context with grpc metadata for proxy/relay requests
md := metadata.New(make(map[string]string))
md.Set("targets", target...)
globalCtx = metadata.NewOutgoingContext(globalCtx, md)
// listen for ^C and SIGTERM and abort context
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
@ -111,6 +106,11 @@ func Execute() {
// setupClient wraps common code to initialize osd client
func setupClient(action func(*client.Client)) {
// Update context with grpc metadata for proxy/relay requests
md := metadata.New(make(map[string]string))
md.Set("targets", target...)
globalCtx = metadata.NewOutgoingContext(globalCtx, md)
t, creds, err := client.NewClientTargetAndCredentialsFromConfig(talosconfig)
if err != nil {
helpers.Fatalf("error getting client credentials: %s", err)

View File

@ -139,7 +139,8 @@ local ntpd = Step("ntpd", depends_on=[fetchtags]);
local networkd = Step("networkd", depends_on=[fetchtags]);
local osctl_linux = Step("osctl-linux", depends_on=[fetchtags]);
local osctl_darwin = Step("osctl-darwin", depends_on=[fetchtags]);
local rootfs = Step("rootfs", depends_on=[machined, osd, trustd, ntpd, networkd]);
local apid = Step("apid", depends_on=[fetchtags]);
local rootfs = Step("rootfs", depends_on=[machined, osd, trustd, ntpd, networkd, apid]);
local initramfs = Step("initramfs", depends_on=[rootfs]);
local installer = Step("installer", depends_on=[rootfs]);
local container = Step("container", depends_on=[rootfs]);
@ -189,6 +190,7 @@ local default_steps = [
fetchtags,
machined,
osd,
apid,
trustd,
ntpd,
networkd,

View File

@ -88,4 +88,5 @@ run "kubectl wait --timeout=${TIMEOUT}s --for=condition=ready=true pod -l k8s-ap
run "osctl config target 10.5.0.2 && osctl -t 10.5.0.2 service etcd | grep Running"
run "osctl config target 10.5.0.3 && osctl -t 10.5.0.3 service etcd | grep Running"
run "osctl config target 10.5.0.4 && osctl -t 10.5.0.4 service etcd | grep Running"
run "osctl --target 10.5.0.2,10.5.0.3,10.5.0.4,10.5.0.5 containers | grep osd"
run "osctl --target 10.5.0.2,10.5.0.3,10.5.0.4,10.5.0.5 containers"
run "osctl --target 10.5.0.2,10.5.0.3,10.5.0.4,10.5.0.5 services"

122
internal/app/apid/main.go Normal file
View File

@ -0,0 +1,122 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package main
import (
"flag"
"log"
stdlibnet "net"
"os"
"strings"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"github.com/talos-systems/talos/api"
"github.com/talos-systems/talos/pkg/config"
"github.com/talos-systems/talos/pkg/constants"
"github.com/talos-systems/talos/pkg/grpc/factory"
"github.com/talos-systems/talos/pkg/grpc/tls"
"github.com/talos-systems/talos/pkg/net"
"github.com/talos-systems/talos/pkg/startup"
)
var (
configPath *string
endpoints *string
)
func init() {
log.SetFlags(log.Lshortfile | log.Ldate | log.Lmicroseconds | log.Ltime)
configPath = flag.String("config", "", "the path to the config")
endpoints = flag.String("endpoints", "", "the IPs of the control plane nodes")
flag.Parse()
}
func main() {
if err := startup.RandSeed(); err != nil {
log.Fatalf("failed to seed RNG: %v", err)
}
provider, err := createProvider()
if err != nil {
log.Fatalf("failed to create remote certificate provider: %+v", err)
}
ca, err := provider.GetCA()
if err != nil {
log.Fatalf("failed to get root CA: %+v", err)
}
tlsConfig, err := tls.New(
tls.WithClientAuthType(tls.Mutual),
tls.WithCACertPEM(ca),
tls.WithCertificateProvider(provider),
)
if err != nil {
log.Fatalf("failed to create OS-level TLS configuration: %v", err)
}
machineClient, err := api.NewLocalMachineClient()
if err != nil {
log.Fatalf("machine client: %v", err)
}
osClient, err := api.NewLocalOSClient()
if err != nil {
log.Fatalf("networkd client: %v", err)
}
protoProxy := api.NewApiProxy(provider)
err = factory.ListenAndServe(
&api.Registrator{
MachineClient: machineClient,
OSClient: osClient,
},
factory.Port(constants.OsdPort),
factory.ServerOptions(
grpc.Creds(
credentials.NewTLS(tlsConfig),
),
grpc.UnaryInterceptor(protoProxy.UnaryInterceptor()),
),
)
if err != nil {
log.Fatalf("listen: %v", err)
}
}
func createProvider() (tls.CertificateProvider, error) {
content, err := config.FromFile(*configPath)
if err != nil {
log.Fatalf("open config: %v", err)
}
config, err := config.New(content)
if err != nil {
log.Fatalf("open config: %v", err)
}
ips, err := net.IPAddrs()
if err != nil {
log.Fatalf("failed to discover IP addresses: %+v", err)
}
// TODO(andrewrynhard): Allow for DNS names.
for _, san := range config.Machine().Security().CertSANs() {
if ip := stdlibnet.ParseIP(san); ip != nil {
ips = append(ips, ip)
}
}
hostname, err := os.Hostname()
if err != nil {
log.Fatalf("failed to discover hostname: %+v", err)
}
return tls.NewRemoteRenewingFileCertificateProvider(config.Machine().Security().Token(), strings.Split(*endpoints, ","), constants.TrustdPort, hostname, ips)
}

View File

@ -27,7 +27,7 @@ func (s *Service) Main(ctx context.Context, config runtime.Configurator, logWrit
api := reg.NewRegistrator(config)
server := factory.NewServer(api)
listener, err := factory.NewListener(factory.Network("unix"), factory.SocketPath(constants.InitSocketPath))
listener, err := factory.NewListener(factory.Network("unix"), factory.SocketPath(constants.MachineSocketPath))
if err != nil {
return err
}

View File

@ -40,6 +40,7 @@ func (task *StartServices) loadSystemServices(r runtime.Runtime) {
svcs.Load(
&services.MachinedAPI{},
&services.Containerd{},
&services.APID{},
&services.OSD{},
&services.Networkd{},
)

View File

@ -32,7 +32,7 @@ func (task *StopNonCrucialServices) TaskFunc(mode runtime.Mode) phase.TaskFunc {
func (task *StopNonCrucialServices) standard(r runtime.Runtime) (err error) {
ctx := namespaces.WithNamespace(context.Background(), "k8s.io")
services := []string{"osd", "udevd", "networkd", "ntpd"}
services := []string{"osd", "udevd", "networkd", "ntpd", "apid"}
if r.Config().Machine().Type() == machine.Bootstrap || r.Config().Machine().Type() == machine.ControlPlane {
services = append(services, "trustd", "proxyd")
}

View File

@ -0,0 +1,150 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// nolint: dupl,golint
package services
import (
"context"
"fmt"
"net"
"strings"
"time"
containerdapi "github.com/containerd/containerd"
"github.com/containerd/containerd/oci"
specs "github.com/opencontainers/runtime-spec/specs-go"
"github.com/talos-systems/talos/internal/app/machined/pkg/system/conditions"
"github.com/talos-systems/talos/internal/app/machined/pkg/system/health"
"github.com/talos-systems/talos/internal/app/machined/pkg/system/runner"
"github.com/talos-systems/talos/internal/app/machined/pkg/system/runner/containerd"
"github.com/talos-systems/talos/internal/app/machined/pkg/system/runner/restart"
"github.com/talos-systems/talos/internal/pkg/runtime"
"github.com/talos-systems/talos/pkg/config/machine"
"github.com/talos-systems/talos/pkg/constants"
"github.com/talos-systems/talos/pkg/kubernetes"
"github.com/talos-systems/talos/pkg/retry"
)
// APID implements the Service interface. It serves as the concrete type with
// the required methods.
type APID struct{}
// ID implements the Service interface.
func (o *APID) ID(config runtime.Configurator) string {
return "apid"
}
// PreFunc implements the Service interface.
func (o *APID) PreFunc(ctx context.Context, config runtime.Configurator) error {
importer := containerd.NewImporter(constants.SystemContainerdNamespace, containerd.WithContainerdAddress(constants.SystemContainerdAddress))
return importer.Import(&containerd.ImportRequest{
Path: "/usr/images/apid.tar",
Options: []containerdapi.ImportOpt{
containerdapi.WithIndexName("talos/apid"),
},
})
}
// PostFunc implements the Service interface.
func (o *APID) PostFunc(config runtime.Configurator) (err error) {
return nil
}
// Condition implements the Service interface.
func (o *APID) Condition(config runtime.Configurator) conditions.Condition {
if config.Machine().Type() == machine.Worker {
return conditions.WaitForFileToExist(constants.KubeletKubeconfig)
}
return nil
}
// DependsOn implements the Service interface.
func (o *APID) DependsOn(config runtime.Configurator) []string {
return []string{"system-containerd", "containerd"}
}
func (o *APID) Runner(config runtime.Configurator) (runner.Runner, error) {
image := "talos/apid"
endpoints := []string{"127.0.0.1"}
if config.Machine().Type() == machine.Worker {
opts := []retry.Option{retry.WithUnits(3 * time.Second), retry.WithJitter(time.Second)}
err := retry.Constant(10*time.Minute, opts...).Retry(func() error {
h, err := kubernetes.NewHelper()
if err != nil {
return retry.ExpectedError(fmt.Errorf("failed to create client: %w", err))
}
endpoints, err = h.MasterIPs()
if err != nil {
return retry.ExpectedError(err)
}
return nil
})
if err != nil {
return nil, err
}
}
// Set the process arguments.
args := runner.Args{
ID: o.ID(config),
ProcessArgs: []string{
"/apid",
"--config=" + constants.ConfigPath,
"--endpoints=" + strings.Join(endpoints, ","),
},
}
// Set the mounts.
mounts := []specs.Mount{
{Type: "bind", Destination: "/etc/ssl", Source: "/etc/ssl", Options: []string{"bind", "ro"}},
{Type: "bind", Destination: constants.ConfigPath, Source: constants.ConfigPath, Options: []string{"rbind", "ro"}},
// Other grpc server sockets
{Type: "bind", Destination: constants.SystemRunPath, Source: constants.SystemRunPath, Options: []string{"bind", "ro"}},
}
env := []string{}
for key, val := range config.Machine().Env() {
env = append(env, fmt.Sprintf("%s=%s", key, val))
}
return restart.New(containerd.NewRunner(
config.Debug(),
&args,
runner.WithContainerdAddress(constants.SystemContainerdAddress),
runner.WithContainerImage(image),
runner.WithEnv(env),
runner.WithOCISpecOpts(
oci.WithMounts(mounts),
),
),
restart.WithType(restart.Forever),
), nil
}
// HealthFunc implements the HealthcheckedService interface
func (o *APID) HealthFunc(runtime.Configurator) health.Check {
return func(ctx context.Context) error {
var d net.Dialer
conn, err := d.DialContext(ctx, "tcp", fmt.Sprintf("%s:%d", "127.0.0.1", constants.OsdPort))
if err != nil {
return err
}
return conn.Close()
}
}
// HealthSettings implements the HealthcheckedService interface
func (o *APID) HealthSettings(runtime.Configurator) *health.Settings {
return &health.DefaultSettings
}

View File

@ -0,0 +1,18 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package services_test
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/talos-systems/talos/internal/app/machined/pkg/system"
"github.com/talos-systems/talos/internal/app/machined/pkg/system/services"
)
func TestAPIDInterfaces(t *testing.T) {
assert.Implements(t, (*system.HealthcheckedService)(nil), new(services.APID))
}

View File

@ -8,13 +8,13 @@ package services
import (
"context"
"fmt"
"net"
"strings"
"time"
"os"
"path/filepath"
containerdapi "github.com/containerd/containerd"
"github.com/containerd/containerd/oci"
specs "github.com/opencontainers/runtime-spec/specs-go"
"google.golang.org/grpc"
"github.com/talos-systems/talos/internal/app/machined/pkg/system/conditions"
"github.com/talos-systems/talos/internal/app/machined/pkg/system/health"
@ -24,8 +24,6 @@ import (
"github.com/talos-systems/talos/internal/pkg/runtime"
"github.com/talos-systems/talos/pkg/config/machine"
"github.com/talos-systems/talos/pkg/constants"
"github.com/talos-systems/talos/pkg/kubernetes"
"github.com/talos-systems/talos/pkg/retry"
)
// OSD implements the Service interface. It serves as the concrete type with
@ -56,17 +54,13 @@ func (o *OSD) PostFunc(config runtime.Configurator) (err error) {
// Condition implements the Service interface.
func (o *OSD) Condition(config runtime.Configurator) conditions.Condition {
if config.Machine().Type() == machine.Worker {
return conditions.WaitForFileToExist(constants.KubeletKubeconfig)
}
return nil
}
// DependsOn implements the Service interface.
func (o *OSD) DependsOn(config runtime.Configurator) []string {
if config.Machine().Type() == machine.Worker {
return []string{"system-containerd", "containerd", "kubelet"}
return []string{"system-containerd", "containerd"}
}
return []string{"system-containerd", "containerd"}
@ -75,48 +69,30 @@ func (o *OSD) DependsOn(config runtime.Configurator) []string {
func (o *OSD) Runner(config runtime.Configurator) (runner.Runner, error) {
image := "talos/osd"
endpoints := []string{"127.0.0.1"}
if config.Machine().Type() == machine.Worker {
opts := []retry.Option{retry.WithUnits(3 * time.Second), retry.WithJitter(time.Second)}
err := retry.Constant(10*time.Minute, opts...).Retry(func() error {
h, err := kubernetes.NewHelper()
if err != nil {
return retry.ExpectedError(fmt.Errorf("failed to create client: %w", err))
}
endpoints, err = h.MasterIPs()
if err != nil {
return retry.ExpectedError(err)
}
return nil
})
if err != nil {
return nil, err
}
}
// Set the process arguments.
args := runner.Args{
ID: o.ID(config),
ProcessArgs: []string{
"/osd",
"--config=" + constants.ConfigPath,
"--endpoints=" + strings.Join(endpoints, ","),
},
}
// Ensure socket dir exists
if err := os.MkdirAll(filepath.Dir(constants.OSSocketPath), os.ModeDir); err != nil {
return nil, err
}
// Set the mounts.
mounts := []specs.Mount{
{Type: "bind", Destination: "/tmp", Source: "/tmp", Options: []string{"rbind", "rshared", "rw"}},
{Type: "bind", Destination: "/etc/kubernetes", Source: "/etc/kubernetes", Options: []string{"rbind", "ro"}},
{Type: "bind", Destination: "/etc/ssl", Source: "/etc/ssl", Options: []string{"bind", "ro"}},
{Type: "bind", Destination: "/tmp", Source: "/tmp", Options: []string{"rbind", "rshared", "rw"}},
{Type: "bind", Destination: "/var/log/pods", Source: "/var/log/pods", Options: []string{"bind", "ro"}},
{Type: "bind", Destination: constants.ConfigPath, Source: constants.ConfigPath, Options: []string{"rbind", "ro"}},
{Type: "bind", Destination: constants.ContainerdAddress, Source: constants.ContainerdAddress, Options: []string{"bind", "ro"}},
{Type: "bind", Destination: constants.DefaultLogPath, Source: constants.DefaultLogPath, Options: []string{"bind", "ro"}},
{Type: "bind", Destination: constants.SystemRunPath, Source: constants.SystemRunPath, Options: []string{"bind", "ro"}},
{Type: "bind", Destination: "/var/log/pods", Source: "/var/log/pods", Options: []string{"bind", "ro"}},
{Type: "bind", Destination: filepath.Dir(constants.OSSocketPath), Source: filepath.Dir(constants.OSSocketPath), Options: []string{"rbind", "rw"}},
}
env := []string{}
@ -141,12 +117,10 @@ func (o *OSD) Runner(config runtime.Configurator) (runner.Runner, error) {
// HealthFunc implements the HealthcheckedService interface
func (o *OSD) HealthFunc(runtime.Configurator) health.Check {
return func(ctx context.Context) error {
var d net.Dialer
conn, err := d.DialContext(ctx, "tcp", fmt.Sprintf("%s:%d", "127.0.0.1", constants.OsdPort))
conn, err := grpc.Dial("unix:"+constants.OSSocketPath, grpc.WithInsecure())
if err != nil {
return err
}
return conn.Close()
}
}

View File

@ -1,136 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package reg
import (
"context"
"io"
"github.com/golang/protobuf/ptypes/empty"
"google.golang.org/grpc"
machineapi "github.com/talos-systems/talos/api/machine"
"github.com/talos-systems/talos/pkg/constants"
)
// MachineClient is a gRPC client for init service API
type MachineClient struct {
machineapi.MachineClient
}
// NewMachineClient initializes new client and connects to init
func NewMachineClient() (*MachineClient, error) {
conn, err := grpc.Dial("unix:"+constants.InitSocketPath,
grpc.WithInsecure(),
)
if err != nil {
return nil, err
}
return &MachineClient{
MachineClient: machineapi.NewMachineClient(conn),
}, nil
}
// Reboot executes init Reboot() API
func (c *MachineClient) Reboot(ctx context.Context, in *empty.Empty) (*machineapi.RebootReply, error) {
return c.MachineClient.Reboot(ctx, in)
}
// Shutdown executes init Shutdown() API.
func (c *MachineClient) Shutdown(ctx context.Context, in *empty.Empty) (*machineapi.ShutdownReply, error) {
return c.MachineClient.Shutdown(ctx, in)
}
// Upgrade executes the init Upgrade() API.
func (c *MachineClient) Upgrade(ctx context.Context, in *machineapi.UpgradeRequest) (data *machineapi.UpgradeReply, err error) {
return c.MachineClient.Upgrade(ctx, in)
}
// Reset executes the init Reset() API.
func (c *MachineClient) Reset(ctx context.Context, in *empty.Empty) (data *machineapi.ResetReply, err error) {
return c.MachineClient.Reset(ctx, in)
}
// ServiceStart executes the init ServiceStart() API.
func (c *MachineClient) ServiceStart(ctx context.Context, in *machineapi.ServiceStartRequest) (data *machineapi.ServiceStartReply, err error) {
return c.MachineClient.ServiceStart(ctx, in)
}
// ServiceStop executes the init ServiceStop() API.
func (c *MachineClient) ServiceStop(ctx context.Context, in *machineapi.ServiceStopRequest) (data *machineapi.ServiceStopReply, err error) {
return c.MachineClient.ServiceStop(ctx, in)
}
// ServiceRestart executes the init ServiceRestart() API.
func (c *MachineClient) ServiceRestart(ctx context.Context, in *machineapi.ServiceRestartRequest) (data *machineapi.ServiceRestartReply, err error) {
return c.MachineClient.ServiceRestart(ctx, in)
}
// Start executes the init Start() API (deprecated).
//nolint: staticcheck
func (c *MachineClient) Start(ctx context.Context, in *machineapi.StartRequest) (data *machineapi.StartReply, err error) {
return c.MachineClient.Start(ctx, in)
}
// Stop executes the init Stop() API (deprecated).
//nolint: staticcheck
func (c *MachineClient) Stop(ctx context.Context, in *machineapi.StopRequest) (data *machineapi.StopReply, err error) {
return c.MachineClient.Stop(ctx, in)
}
// ServiceList executes the init ServiceList() API.
func (c *MachineClient) ServiceList(ctx context.Context, in *empty.Empty) (data *machineapi.ServiceListReply, err error) {
return c.MachineClient.ServiceList(ctx, in)
}
func copyClientServer(msg interface{}, client grpc.ClientStream, srv grpc.ServerStream) error {
for {
err := client.RecvMsg(msg)
if err == io.EOF {
break
}
if err != nil {
return err
}
err = srv.SendMsg(msg)
if err != nil {
return err
}
}
return nil
}
// CopyOut executes the init CopyOut() API.
func (c *MachineClient) CopyOut(req *machineapi.CopyOutRequest, srv machineapi.Machine_CopyOutServer) error {
client, err := c.MachineClient.CopyOut(srv.Context(), req)
if err != nil {
return err
}
var msg machineapi.StreamingData
return copyClientServer(&msg, client, srv)
}
// LS executes the init LS() API.
func (c *MachineClient) LS(req *machineapi.LSRequest, srv machineapi.Machine_LSServer) error {
client, err := c.MachineClient.LS(srv.Context(), req)
if err != nil {
return err
}
var msg machineapi.FileInfo
return copyClientServer(&msg, client, srv)
}
// Mounts implements the machineapi.OSDServer interface.
func (c *MachineClient) Mounts(ctx context.Context, in *empty.Empty) (reply *machineapi.MountsReply, err error) {
return c.MachineClient.Mounts(ctx, in)
}

View File

@ -1,44 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package reg // nolint: dupl
import (
"context"
"github.com/golang/protobuf/ptypes/empty"
"google.golang.org/grpc"
networkapi "github.com/talos-systems/talos/api/network"
"github.com/talos-systems/talos/pkg/constants"
)
// NetworkClient is a gRPC client for init service API
type NetworkClient struct {
networkapi.NetworkClient
}
// NewNetworkClient initializes new client and connects to networkd
func NewNetworkClient() (*NetworkClient, error) {
conn, err := grpc.Dial("unix:"+constants.NetworkdSocketPath,
grpc.WithInsecure(),
)
if err != nil {
return nil, err
}
return &NetworkClient{
NetworkClient: networkapi.NewNetworkClient(conn),
}, nil
}
// Routes returns the hosts routing table.
func (c *NetworkClient) Routes(ctx context.Context, in *empty.Empty) (*networkapi.RoutesReply, error) {
return c.NetworkClient.Routes(ctx, in)
}
// Interfaces returns the hosts network interfaces and addresses.
func (c *NetworkClient) Interfaces(ctx context.Context, in *empty.Empty) (*networkapi.InterfacesReply, error) {
return c.NetworkClient.Interfaces(ctx, in)
}

View File

@ -22,10 +22,7 @@ import (
"golang.org/x/sys/unix"
"google.golang.org/grpc"
machineapi "github.com/talos-systems/talos/api/machine"
networkapi "github.com/talos-systems/talos/api/network"
osapi "github.com/talos-systems/talos/api/os"
timeapi "github.com/talos-systems/talos/api/time"
"github.com/talos-systems/talos/internal/pkg/containers"
"github.com/talos-systems/talos/internal/pkg/containers/containerd"
"github.com/talos-systems/talos/internal/pkg/containers/cri"
@ -36,19 +33,11 @@ import (
// Registrator is the concrete type that implements the factory.Registrator and
// osapi.OSDServer interfaces.
type Registrator struct {
// every Init service API is proxied via OSD
*MachineClient
*TimeClient
*NetworkClient
}
type Registrator struct{}
// Register implements the factory.Registrator interface.
func (r *Registrator) Register(s *grpc.Server) {
osapi.RegisterOSServer(s, r)
machineapi.RegisterMachineServer(s, r)
timeapi.RegisterTimeServer(s, r)
networkapi.RegisterNetworkServer(s, r)
}
// Kubeconfig implements the osapi.OSDServer interface.
@ -262,11 +251,6 @@ func (r *Registrator) Logs(req *osapi.LogsRequest, l osapi.OS_LogsServer) (err e
return nil
}
// Version implements the osapi.OSDServer interface.
func (r *Registrator) Version(ctx context.Context, in *empty.Empty) (reply *machineapi.VersionReply, err error) {
return r.MachineClient.Version(ctx, in)
}
// Processes implements the osapi.OSDServer interface
func (r *Registrator) Processes(ctx context.Context, in *empty.Empty) (reply *osapi.ProcessesReply, err error) {
procs, err := procfs.AllProcs()

View File

@ -1,44 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package reg // nolint: dupl
import (
"context"
"github.com/golang/protobuf/ptypes/empty"
"google.golang.org/grpc"
timeapi "github.com/talos-systems/talos/api/time"
"github.com/talos-systems/talos/pkg/constants"
)
// TimeClient is a gRPC client for init service API
type TimeClient struct {
timeapi.TimeClient
}
// NewTimeClient initializes new client and connects to ntpd
func NewTimeClient() (*TimeClient, error) {
conn, err := grpc.Dial("unix:"+constants.NtpdSocketPath,
grpc.WithInsecure(),
)
if err != nil {
return nil, err
}
return &TimeClient{
TimeClient: timeapi.NewTimeClient(conn),
}, nil
}
// Time issues a query to the configured ntp server and displays the results
func (c *TimeClient) Time(ctx context.Context, in *empty.Empty) (*timeapi.TimeReply, error) {
return c.TimeClient.Time(ctx, in)
}
// TimeCheck issues a query to the specified ntp server and displays the results
func (c *TimeClient) TimeCheck(ctx context.Context, in *timeapi.TimeRequest) (*timeapi.TimeReply, error) {
return c.TimeClient.TimeCheck(ctx, in)
}

View File

@ -5,131 +5,27 @@
package main
import (
"flag"
"log"
stdlibnet "net"
"os"
"strings"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
osapi "github.com/talos-systems/talos/api/os"
"github.com/talos-systems/talos/internal/app/osd/internal/reg"
"github.com/talos-systems/talos/pkg/config"
"github.com/talos-systems/talos/pkg/constants"
"github.com/talos-systems/talos/pkg/grpc/factory"
"github.com/talos-systems/talos/pkg/grpc/tls"
"github.com/talos-systems/talos/pkg/net"
"github.com/talos-systems/talos/pkg/startup"
)
var (
configPath *string
endpoints *string
)
func init() {
log.SetFlags(log.Lshortfile | log.Ldate | log.Lmicroseconds | log.Ltime)
configPath = flag.String("config", "", "the path to the config")
endpoints = flag.String("endpoints", "", "the IPs of the control plane nodes")
flag.Parse()
}
// nolint: gocyclo
func main() {
if err := startup.RandSeed(); err != nil {
log.Fatalf("failed to seed RNG: %v", err)
}
provider, err := createProvider()
if err != nil {
log.Fatalf("failed to create remote certificate provider: %+v", err)
}
ca, err := provider.GetCA()
if err != nil {
log.Fatalf("failed to get root CA: %+v", err)
}
tlsConfig, err := tls.New(
tls.WithClientAuthType(tls.Mutual),
tls.WithCACertPEM(ca),
tls.WithCertificateProvider(provider),
log.Fatalf("%+v", factory.ListenAndServe(
&reg.Registrator{},
factory.Network("unix"),
factory.SocketPath(constants.OSSocketPath),
),
)
if err != nil {
log.Fatalf("failed to create OS-level TLS configuration: %v", err)
}
machineClient, err := reg.NewMachineClient()
if err != nil {
log.Fatalf("init client: %v", err)
}
timeClient, err := reg.NewTimeClient()
if err != nil {
log.Fatalf("ntp client: %v", err)
}
networkClient, err := reg.NewNetworkClient()
if err != nil {
log.Fatalf("networkd client: %v", err)
}
interceptorProvider, err := createProvider()
if err != nil {
log.Fatalf("failed to create remote certificate provider for interceptor: %+v", err)
}
protoProxy := osapi.NewOSProxy(interceptorProvider)
err = factory.ListenAndServe(
&reg.Registrator{
MachineClient: machineClient,
TimeClient: timeClient,
NetworkClient: networkClient,
},
factory.Port(constants.OsdPort),
factory.ServerOptions(
grpc.Creds(
credentials.NewTLS(tlsConfig),
),
grpc.UnaryInterceptor(protoProxy.UnaryInterceptor()),
),
)
if err != nil {
log.Fatalf("listen: %v", err)
}
}
func createProvider() (tls.CertificateProvider, error) {
content, err := config.FromFile(*configPath)
if err != nil {
log.Fatalf("open config: %v", err)
}
config, err := config.New(content)
if err != nil {
log.Fatalf("open config: %v", err)
}
ips, err := net.IPAddrs()
if err != nil {
log.Fatalf("failed to discover IP addresses: %+v", err)
}
// TODO(andrewrynhard): Allow for DNS names.
for _, san := range config.Machine().Security().CertSANs() {
if ip := stdlibnet.ParseIP(san); ip != nil {
ips = append(ips, ip)
}
}
hostname, err := os.Hostname()
if err != nil {
log.Fatalf("failed to discover hostname: %+v", err)
}
return tls.NewRemoteRenewingFileCertificateProvider(config.Machine().Security().Token(), strings.Split(*endpoints, ","), constants.TrustdPort, hostname, ips)
}

View File

@ -191,8 +191,8 @@ const (
// TalosConfigEnvVar is the environment variable for setting the Talos configuration file path.
TalosConfigEnvVar = "TALOSCONFIG"
// InitSocketPath is the path to file socket of machine API.
InitSocketPath = SystemRunPath + "/init/init.sock"
// MachineSocketPath is the path to file socket of machine API.
MachineSocketPath = SystemRunPath + "/machined/machine.sock"
// NtpdSocketPath is the path to file socket of time API.
NtpdSocketPath = SystemRunPath + "/ntpd/ntpd.sock"
@ -200,6 +200,9 @@ const (
// NetworkdSocketPath is the path to file socket of network API.
NetworkdSocketPath = SystemRunPath + "/networkd/networkd.sock"
// OSSocketPath is the path to file socket of os API.
OSSocketPath = SystemRunPath + "/osd/osd.sock"
// KernelAsset defines a well known name for our kernel filename
KernelAsset = "vmlinuz"