From f8e80e45e799073c08fbd91558468a37524eb351 Mon Sep 17 00:00:00 2001 From: Renaud Gaubert Date: Tue, 4 Sep 2018 01:03:18 +0200 Subject: [PATCH] Create pkg/kubelet/apis/pluginregistration/v1beta1 directory --- hack/.golint_failures | 1 + ...-kubelet-plugin-registration-dockerized.sh | 6 +- ...y-generated-kubelet-plugin-registration.sh | 21 +++++-- .../pluginregistration/v1alpha1/api.proto | 12 ++-- .../apis/pluginregistration/v1beta1/api.proto | 60 +++++++++++++++++++ .../pluginregistration/v1beta1/constants.go | 22 +++++++ 6 files changed, 109 insertions(+), 13 deletions(-) create mode 100644 pkg/kubelet/apis/pluginregistration/v1beta1/api.proto create mode 100644 pkg/kubelet/apis/pluginregistration/v1beta1/constants.go diff --git a/hack/.golint_failures b/hack/.golint_failures index a6bd6789a9..2e685fea64 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -185,6 +185,7 @@ pkg/kubelet/apis/cri/testing pkg/kubelet/apis/deviceplugin/v1alpha pkg/kubelet/apis/deviceplugin/v1beta1 pkg/kubelet/apis/pluginregistration/v1alpha1 +pkg/kubelet/apis/pluginregistration/v1beta1 pkg/kubelet/cadvisor pkg/kubelet/cadvisor/testing pkg/kubelet/checkpoint diff --git a/hack/update-generated-kubelet-plugin-registration-dockerized.sh b/hack/update-generated-kubelet-plugin-registration-dockerized.sh index daf5abbd36..18b4f0c726 100755 --- a/hack/update-generated-kubelet-plugin-registration-dockerized.sh +++ b/hack/update-generated-kubelet-plugin-registration-dockerized.sh @@ -19,11 +19,13 @@ set -o nounset set -o pipefail KUBE_ROOT="$(cd "$(dirname "${BASH_SOURCE}")/../" && pwd -P)" -KUBELET_PLUGIN_REGISTRATION_ROOT="${KUBE_ROOT}/pkg/kubelet/apis/pluginregistration/v1alpha1/" +KUBELET_PLUGIN_REGISTRATION_V1ALPHA="${KUBE_ROOT}/pkg/kubelet/apis/pluginregistration/v1alpha1/" +KUBELET_PLUGIN_REGISTRATION_V1BETA="${KUBE_ROOT}/pkg/kubelet/apis/pluginregistration/v1beta1/" KUBELET_EXAMPLE_PLUGIN_V1BETA1="${KUBE_ROOT}/pkg/kubelet/util/pluginwatcher/example_plugin_apis/v1beta1/" KUBELET_EXAMPLE_PLUGIN_V1BETA2="${KUBE_ROOT}/pkg/kubelet/util/pluginwatcher/example_plugin_apis/v1beta2/" source "${KUBE_ROOT}/hack/lib/protoc.sh" -kube::protoc::generate_proto ${KUBELET_PLUGIN_REGISTRATION_ROOT} +kube::protoc::generate_proto ${KUBELET_PLUGIN_REGISTRATION_V1ALPHA} +kube::protoc::generate_proto ${KUBELET_PLUGIN_REGISTRATION_V1BETA} kube::protoc::generate_proto ${KUBELET_EXAMPLE_PLUGIN_V1BETA1} kube::protoc::generate_proto ${KUBELET_EXAMPLE_PLUGIN_V1BETA2} diff --git a/hack/verify-generated-kubelet-plugin-registration.sh b/hack/verify-generated-kubelet-plugin-registration.sh index 3dfffa8dcc..b8b7018bcf 100755 --- a/hack/verify-generated-kubelet-plugin-registration.sh +++ b/hack/verify-generated-kubelet-plugin-registration.sh @@ -20,20 +20,31 @@ set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. ERROR="Kubelet Plugin Registration api is out of date. Please run hack/update-generated-kubelet-plugin-registration.sh" -KUBELET_PLUGIN_REGISTRATION_ROOT="${KUBE_ROOT}/pkg/kubelet/apis/pluginregistration/v1alpha1/" +KUBELET_PLUGIN_REGISTRATION_V1ALPHA="${KUBE_ROOT}/pkg/kubelet/apis/pluginregistration/v1alpha1/" +KUBELET_PLUGIN_REGISTRATION_V1BETA="${KUBE_ROOT}/pkg/kubelet/apis/pluginregistration/v1beta1/" source "${KUBE_ROOT}/hack/lib/protoc.sh" kube::golang::setup_env function cleanup { - rm -rf ${KUBELET_PLUGIN_REGISTRATION_ROOT}/_tmp/ + rm -rf ${KUBELET_PLUGIN_REGISTRATION_V1ALPHA}/_tmp/ + rm -rf ${KUBELET_PLUGIN_REGISTRATION_V1BETA}/_tmp/ } trap cleanup EXIT -mkdir -p ${KUBELET_PLUGIN_REGISTRATION_ROOT}/_tmp -cp ${KUBELET_PLUGIN_REGISTRATION_ROOT}/api.pb.go ${KUBELET_PLUGIN_REGISTRATION_ROOT}/_tmp/ +mkdir -p ${KUBELET_PLUGIN_REGISTRATION_V1ALPHA}/_tmp +mkdir -p ${KUBELET_PLUGIN_REGISTRATION_V1BETA}/_tmp +cp ${KUBELET_PLUGIN_REGISTRATION_V1ALPHA}/api.pb.go ${KUBELET_PLUGIN_REGISTRATION_V1ALPHA}/_tmp/ +cp ${KUBELET_PLUGIN_REGISTRATION_V1BETA}/api.pb.go ${KUBELET_PLUGIN_REGISTRATION_V1BETA}/_tmp/ + +# Check V1Alpha KUBE_VERBOSE=3 "${KUBE_ROOT}/hack/update-generated-kubelet-plugin-registration.sh" -kube::protoc::diff "${KUBELET_PLUGIN_REGISTRATION_ROOT}/api.pb.go" "${KUBELET_PLUGIN_REGISTRATION_ROOT}/_tmp/api.pb.go" ${ERROR} +kube::protoc::diff "${KUBELET_PLUGIN_REGISTRATION_V1ALPHA}/api.pb.go" "${KUBELET_PLUGIN_REGISTRATION_V1ALPHA}/_tmp/api.pb.go" ${ERROR} +echo "Generated Kubelet Plugin Registration api is up to date." + +# Check V1Beta +KUBE_VERBOSE=3 "${KUBE_ROOT}/hack/update-generated-kubelet-plugin-registration.sh" +kube::protoc::diff "${KUBELET_PLUGIN_REGISTRATION_V1BETA}/api.pb.go" "${KUBELET_PLUGIN_REGISTRATION_V1BETA}/_tmp/api.pb.go" ${ERROR} echo "Generated Kubelet Plugin Registration api is up to date." diff --git a/pkg/kubelet/apis/pluginregistration/v1alpha1/api.proto b/pkg/kubelet/apis/pluginregistration/v1alpha1/api.proto index 319b3f19fb..c6bd26209d 100644 --- a/pkg/kubelet/apis/pluginregistration/v1alpha1/api.proto +++ b/pkg/kubelet/apis/pluginregistration/v1alpha1/api.proto @@ -22,12 +22,12 @@ message PluginInfo { // should follow the extended resource name convention. // For CSI, this is the CSI driver registrar name. string name = 2; - // Optional endpoint location. If found set by Kubelet component, - // Kubelet component will use this endpoint for specific requests. - // This allows the plugin to register using one endpoint and possibly use - // a different socket for control operations. CSI uses this model to delegate - // its registration external from the plugin. - string endpoint = 3; + // Optional endpoint location. If found set by Kubelet component, + // Kubelet component will use this endpoint for specific requests. + // This allows the plugin to register using one endpoint and possibly use + // a different socket for control operations. CSI uses this model to delegate + // its registration external from the plugin. + string endpoint = 3; // Plugin service API versions the plugin supports. // For DevicePlugin, this maps to the deviceplugin API versions the // plugin supports at the given socket. diff --git a/pkg/kubelet/apis/pluginregistration/v1beta1/api.proto b/pkg/kubelet/apis/pluginregistration/v1beta1/api.proto new file mode 100644 index 0000000000..c6bd26209d --- /dev/null +++ b/pkg/kubelet/apis/pluginregistration/v1beta1/api.proto @@ -0,0 +1,60 @@ +// To regenerate api.pb.go run hack/update-generated-kubelet-plugin-registration.sh +syntax = 'proto3'; + +package pluginregistration; + +import "github.com/gogo/protobuf/gogoproto/gogo.proto"; + +option (gogoproto.goproto_stringer_all) = false; +option (gogoproto.stringer_all) = true; +option (gogoproto.goproto_getters_all) = true; +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_unrecognized_all) = false; + +// PluginInfo is the message sent from a plugin to the Kubelet pluginwatcher for plugin registration +message PluginInfo { + // Type of the Plugin. CSIPlugin or DevicePlugin + string type = 1; + // Plugin name that uniquely identifies the plugin for the given plugin type. + // For DevicePlugin, this is the resource name that the plugin manages and + // should follow the extended resource name convention. + // For CSI, this is the CSI driver registrar name. + string name = 2; + // Optional endpoint location. If found set by Kubelet component, + // Kubelet component will use this endpoint for specific requests. + // This allows the plugin to register using one endpoint and possibly use + // a different socket for control operations. CSI uses this model to delegate + // its registration external from the plugin. + string endpoint = 3; + // Plugin service API versions the plugin supports. + // For DevicePlugin, this maps to the deviceplugin API versions the + // plugin supports at the given socket. + // The Kubelet component communicating with the plugin should be able + // to choose any preferred version from this list, or returns an error + // if none of the listed versions is supported. + repeated string supported_versions = 4; +} + +// RegistrationStatus is the message sent from Kubelet pluginwatcher to the plugin for notification on registration status +message RegistrationStatus { + // True if plugin gets registered successfully at Kubelet + bool plugin_registered = 1; + // Error message in case plugin fails to register, empty string otherwise + string error = 2; +} + +// RegistrationStatusResponse is sent by plugin to kubelet in response to RegistrationStatus RPC +message RegistrationStatusResponse { +} + +// InfoRequest is the empty request message from Kubelet +message InfoRequest { +} + +// Registration is the service advertised by the Plugins. +service Registration { + rpc GetInfo(InfoRequest) returns (PluginInfo) {} + rpc NotifyRegistrationStatus(RegistrationStatus) returns (RegistrationStatusResponse) {} +} diff --git a/pkg/kubelet/apis/pluginregistration/v1beta1/constants.go b/pkg/kubelet/apis/pluginregistration/v1beta1/constants.go new file mode 100644 index 0000000000..cfc1b7c6d7 --- /dev/null +++ b/pkg/kubelet/apis/pluginregistration/v1beta1/constants.go @@ -0,0 +1,22 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package pluginregistration + +const ( + CSIPlugin = "CSIPlugin" + DevicePlugin = "DevicePlugin" +)