From e6a210ca1b6b06045a6aec36670783992bef642e Mon Sep 17 00:00:00 2001 From: Renaud Gaubert Date: Fri, 11 Aug 2017 16:46:02 -0700 Subject: [PATCH] Added script to generate the Device Plugin API Signed-off-by: Renaud Gaubert --- hack/lib/protoc.sh | 80 +++++++++++++++++++ ...date-generated-device-plugin-dockerized.sh | 26 ++++++ hack/update-generated-device-plugin.sh | 27 +++++++ 3 files changed, 133 insertions(+) create mode 100644 hack/lib/protoc.sh create mode 100755 hack/update-generated-device-plugin-dockerized.sh create mode 100755 hack/update-generated-device-plugin.sh diff --git a/hack/lib/protoc.sh b/hack/lib/protoc.sh new file mode 100644 index 00000000000..d2eb3062e3a --- /dev/null +++ b/hack/lib/protoc.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +# Copyright 2017 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. + +set -o errexit +set -o nounset +set -o pipefail + +# The root of the build/dist directory +KUBE_ROOT="$(cd "$(dirname "${BASH_SOURCE}")/../.." && pwd -P)" +source "${KUBE_ROOT}/hack/lib/init.sh" + +# Generates $1/api.pb.go from the protobuf file $1/api.proto +# and formats it correctly +# $1: Full path to the directory where the api.proto file is +function kube::protoc::generate_proto() { + kube::golang::setup_env + local bins=( + vendor/k8s.io/kube-gen/cmd/go-to-protobuf/protoc-gen-gogo + ) + make -C "${KUBE_ROOT}" WHAT="${bins[*]}" + + kube::protoc::check_protoc + + local package=${1} + kube::protoc::protoc ${package} + kube::protoc::format ${package} +} + +# Checks that the current protoc version is at least version 3.0.0-beta1 +# exit 1 if it's not the case +function kube::protoc::check_protoc() { + if [[ -z "$(which protoc)" || "$(protoc --version)" != "libprotoc 3."* ]]; then + echo "Generating protobuf requires protoc 3.0.0-beta1 or newer. Please download and" + echo "install the platform appropriate Protobuf package for your OS: " + echo + echo " https://github.com/google/protobuf/releases" + echo + echo "WARNING: Protobuf changes are not being validated" + exit 1 + fi +} + +# Generates $1/api.pb.go from the protobuf file $1/api.proto +# $1: Full path to the directory where the api.proto file is +function kube::protoc::protoc() { + local package=${1} + gogopath=$(dirname $(kube::util::find-binary "protoc-gen-gogo")) + + PATH="${gogopath}:${PATH}" protoc \ + --proto_path="${package}" \ + --proto_path="${KUBE_ROOT}/vendor" \ + --gogo_out=plugins=grpc:${package} ${package}/api.proto +} + +# Formats $1/api.pb.go, adds the boilerplate comments and run gofmt on it +# $1: Full path to the directory where the api.proto file is +function kube::protoc::format() { + local package=${1} + + # Update boilerplate for the generated file. + echo "$(cat hack/boilerplate/boilerplate.go.txt ${package}/api.pb.go)" > ${package}/api.pb.go + sed -i".bak" "s/Copyright YEAR/Copyright $(date '+%Y')/g" ${package}/api.pb.go + + # Run gofmt to clean up the generated code. + kube::golang::verify_go_version + gofmt -l -s -w ${package}/api.pb.go +} diff --git a/hack/update-generated-device-plugin-dockerized.sh b/hack/update-generated-device-plugin-dockerized.sh new file mode 100755 index 00000000000..15003fd0ce0 --- /dev/null +++ b/hack/update-generated-device-plugin-dockerized.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Copyright 2017 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. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT="$(cd "$(dirname "${BASH_SOURCE}")/../" && pwd -P)" +DEVICE_PLUGIN_ROOT="${KUBE_ROOT}/pkg/kubelet/apis/deviceplugin/v1alpha1/" + +source "${KUBE_ROOT}/hack/lib/protoc.sh" + +kube::protoc::generate_proto ${DEVICE_PLUGIN_ROOT} diff --git a/hack/update-generated-device-plugin.sh b/hack/update-generated-device-plugin.sh new file mode 100755 index 00000000000..b7e2b5723ee --- /dev/null +++ b/hack/update-generated-device-plugin.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Copyright 2017 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. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. + +# NOTE: All output from this script needs to be copied back to the calling +# source tree. This is managed in kube::build::copy_output in build/common.sh. +# If the output set is changed update that function. + +${KUBE_ROOT}/build/run.sh hack/update-generated-device-plugin-dockerized.sh "$@"