2017-02-01 00:45:59 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# Copyright 2014 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
|
|
|
|
|
|
|
|
# This script is only used for e2e tests! Don't use it in production!
|
|
|
|
# This is also a temporary bridge to slowly switch over everything to
|
|
|
|
# federation/develop.sh. Carefully moving things step-by-step, ensuring
|
|
|
|
# things don't break.
|
|
|
|
# TODO(madhusudancs): Remove this script and its dependencies.
|
|
|
|
|
|
|
|
|
|
|
|
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../..
|
|
|
|
# For `kube::log::status` function since it already sources
|
|
|
|
# "${KUBE_ROOT}/cluster/lib/logging.sh" and DEFAULT_KUBECONFIG
|
|
|
|
source "${KUBE_ROOT}/cluster/common.sh"
|
|
|
|
# For $KUBE_PLATFORM, $KUBE_ARCH, $KUBE_BUILD_STAGE,
|
|
|
|
# $FEDERATION_PUSH_REPO_BASE and $FEDERATION_NAMESPACE.
|
|
|
|
source "${KUBE_ROOT}/federation/cluster/common.sh"
|
|
|
|
|
|
|
|
FEDERATION_NAME="${FEDERATION_NAME:-e2e-federation}"
|
|
|
|
FEDERATION_KUBE_CONTEXT="${FEDERATION_KUBE_CONTEXT:-e2e-federation}"
|
|
|
|
DNS_ZONE_NAME="${FEDERATION_DNS_ZONE_NAME:-}"
|
|
|
|
HOST_CLUSTER_CONTEXT="${FEDERATION_HOST_CLUSTER_CONTEXT:-${1}}"
|
|
|
|
readonly CLIENT_BIN_DIR="${KUBE_ROOT}/_output/${KUBE_BUILD_STAGE}/client/${KUBE_PLATFORM}-${KUBE_ARCH}/kubernetes/client/bin"
|
|
|
|
kubefed="${CLIENT_BIN_DIR}/kubefed"
|
|
|
|
kubectl="${CLIENT_BIN_DIR}/kubectl"
|
|
|
|
|
|
|
|
# Initializes the control plane.
|
|
|
|
# TODO(madhusudancs): Move this to federation/develop.sh.
|
|
|
|
function init() {
|
|
|
|
kube::log::status "Deploying federation control plane for ${FEDERATION_NAME} in cluster ${HOST_CLUSTER_CONTEXT}"
|
|
|
|
|
|
|
|
local -r project="${KUBE_PROJECT:-${PROJECT:-}}"
|
|
|
|
local -r kube_registry="${KUBE_REGISTRY:-gcr.io/${project}}"
|
|
|
|
local -r kube_version="${KUBERNETES_RELEASE:-}"
|
|
|
|
|
|
|
|
${kubefed} init \
|
|
|
|
"${FEDERATION_NAME}" \
|
|
|
|
--host-cluster-context="${HOST_CLUSTER_CONTEXT}" \
|
|
|
|
--dns-zone-name="${DNS_ZONE_NAME}" \
|
|
|
|
--image="${kube_registry}/hyperkube-amd64:${kube_version}"
|
|
|
|
}
|
|
|
|
|
|
|
|
# create_cluster_secrets creates the secrets containing the kubeconfigs
|
|
|
|
# of the participating clusters in the host cluster. The kubeconfigs itself
|
|
|
|
# are created while deploying clusters, i.e. when kube-up is run.
|
|
|
|
function create_cluster_secrets() {
|
|
|
|
local -r kubeconfig_dir="$(dirname ${DEFAULT_KUBECONFIG})"
|
|
|
|
local -r base_dir="${kubeconfig_dir}/federation/kubernetes-apiserver"
|
|
|
|
|
|
|
|
# Create secrets with all the kubernetes-apiserver's kubeconfigs.
|
|
|
|
for dir in $(ls "${base_dir}"); do
|
|
|
|
# We create a secret with the same name as the directory name (which is
|
|
|
|
# same as cluster name in kubeconfig).
|
|
|
|
# Massage the name so that it is valid (should not contain "_" and max 253
|
|
|
|
# chars)
|
|
|
|
name=$(echo "${dir}" | sed -e "s/_/-/g") # Replace "_" by "-"
|
|
|
|
name=${name:0:252}
|
|
|
|
kube::log::status "Creating secret with name: ${name} in namespace ${FEDERATION_NAMESPACE}"
|
|
|
|
${kubectl} create secret generic ${name} --from-file="${base_dir}/${dir}/kubeconfig" --namespace="${FEDERATION_NAMESPACE}"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
USE_KUBEFED="${USE_KUBEFED:-}"
|
|
|
|
if [[ "${USE_KUBEFED}" == "true" ]]; then
|
|
|
|
init
|
|
|
|
create_cluster_secrets
|
|
|
|
else
|
2017-02-03 13:41:32 +00:00
|
|
|
# Read the version back from the versions file if no version is given.
|
|
|
|
readonly kube_version="$(cat ${KUBE_ROOT}/_output/federation/versions | python -c '\
|
|
|
|
import json, sys;\
|
|
|
|
print json.load(sys.stdin)["KUBE_VERSION"]')"
|
|
|
|
export FEDERATION_IMAGE_TAG="$(echo ${KUBERNETES_RELEASE:-${kube_version}} | tr + _)"
|
2017-02-01 00:45:59 +00:00
|
|
|
create-federation-api-objects
|
|
|
|
fi
|