blob: fc20f937687ca2a138157b0e089ffe1c7aab9435 [file] [log] [blame]
#!/usr/bin/env 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
dir=$(mktemp -d "${TMPDIR:-/tmp/}$(basename 0).XXXXXXXXXXXX")
# Register function to be called on EXIT to remove generated binary.
function cleanup {
rm -rf "${dir}"
}
trap cleanup EXIT
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}
caBundle=$(base64 /var/run/kubernetes/server-ca.crt | awk 'BEGIN{ORS="";} {print}')
# 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}
${SED} -i "s/CA_BUNDLE/${caBundle}/" ${resourceFileName}
echo "registering ${resourceName} using ${resourceFileName}"
kubectl --kubeconfig=${AGG_KUBECONFIG} create -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}
${SED} -i "s/CA_BUNDLE/${caBundle}/" ${resourceFileName}
echo "registering ${resourceName} using ${resourceFileName}"
kubectl --kubeconfig=${AGG_KUBECONFIG} create -f ${resourceFileName}
done