From a8409af5b5cd27fdd98eb12a01386579381bfc81 Mon Sep 17 00:00:00 2001 From: deads2k Date: Wed, 15 Feb 2017 13:56:37 -0500 Subject: [PATCH] add script to register everything --- .../hack/apiservice-template.yaml | 12 +++ .../hack/register-all-apis-from.sh | 81 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 staging/src/k8s.io/kube-aggregator/hack/apiservice-template.yaml create mode 100755 staging/src/k8s.io/kube-aggregator/hack/register-all-apis-from.sh diff --git a/staging/src/k8s.io/kube-aggregator/hack/apiservice-template.yaml b/staging/src/k8s.io/kube-aggregator/hack/apiservice-template.yaml new file mode 100644 index 00000000000..efb02e5ddab --- /dev/null +++ b/staging/src/k8s.io/kube-aggregator/hack/apiservice-template.yaml @@ -0,0 +1,12 @@ +apiVersion: apiregistration.k8s.io/v1alpha1 +kind: APIService +metadata: + name: RESOURCE_NAME +spec: + group: API_GROUP + version: API_VERSION + service: + namespace: SERVICE_NAMESPACE + name: SERVICE_NAME + insecureSkipTLSVerify: true + priority: 100 diff --git a/staging/src/k8s.io/kube-aggregator/hack/register-all-apis-from.sh b/staging/src/k8s.io/kube-aggregator/hack/register-all-apis-from.sh new file mode 100755 index 00000000000..ca463550804 --- /dev/null +++ b/staging/src/k8s.io/kube-aggregator/hack/register-all-apis-from.sh @@ -0,0 +1,81 @@ +#!/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 + + +if LANG=C sed --help 2>&1 | grep -q GNU; then + SED="sed" +elif which gsed &>/dev/null; then + SED="gsed" +else + echo "Failed to find GNU sed as sed or gsed. If you are on Mac: brew install gnu-sed." >&2 + exit 1 +fi + +scriptDir=$(dirname "${BASH_SOURCE}") + +# this uses discovery from a kube-like API server to register ALL the API versions that server provides +# first argument is reference to kube-config file that points the API server you're adding from +# second argument is the service namespace +# third argument is the service name +# fourth argument is reference to kube-config file that points to the aggregator you're using + +FROM_KUBECONFIG=${1} +SERVICE_NAMESPACE=${2} +SERVICE_NAME=${3} +AGG_KUBECONFIG=${4} + + +dir=$(mktemp -d "${TMPDIR:-/tmp/}$(basename 0).XXXXXXXXXXXX") + + +# if we have a /api endpoint, then we need to register that +if kubectl --kubeconfig=${FROM_KUBECONFIG} get --raw / | grep -q /api/v1; then + group="" + version="v1" + resourceName=${version}.${group} + resourceFileName=${dir}/${resourceName}.yaml + cp ${scriptDir}/apiservice-template.yaml ${resourceFileName} + ${SED} -i "s/RESOURCE_NAME/${resourceName}/" ${resourceFileName} + ${SED} -i "s/API_GROUP/${group}/" ${resourceFileName} + ${SED} -i "s/API_VERSION/${version}/" ${resourceFileName} + ${SED} -i "s/SERVICE_NAMESPACE/${SERVICE_NAMESPACE}/" ${resourceFileName} + ${SED} -i "s/SERVICE_NAME/${SERVICE_NAME}/" ${resourceFileName} + echo "registering ${resourceName} using ${resourceFileName}" + + kubectl --kubeconfig=${AGG_KUBECONFIG} create --v=8 -f ${resourceFileName} +fi + +groupVersions=( $(kubectl --kubeconfig=${FROM_KUBECONFIG} get --raw / | grep /apis/ | sed 's/",.*//' | sed 's|.*"/apis/||' | grep '/') ) + +for groupVersion in "${groupVersions[@]}"; do + group=$(echo $groupVersion | awk -F/ '{print $1}') + version=$(echo $groupVersion | awk -F/ '{print $2}') + resourceName=${version}.${group} + resourceFileName=${dir}/${resourceName}.yaml + cp ${scriptDir}/apiservice-template.yaml ${resourceFileName} + ${SED} -i "s/RESOURCE_NAME/${resourceName}/" ${resourceFileName} + ${SED} -i "s/API_GROUP/${group}/" ${resourceFileName} + ${SED} -i "s/API_VERSION/${version}/" ${resourceFileName} + ${SED} -i "s/SERVICE_NAMESPACE/${SERVICE_NAMESPACE}/" ${resourceFileName} + ${SED} -i "s/SERVICE_NAME/${SERVICE_NAME}/" ${resourceFileName} + echo "registering ${resourceName} using ${resourceFileName}" + + kubectl --kubeconfig=${AGG_KUBECONFIG} create -f ${resourceFileName} +done