2018-04-16 12:31:44 -04:00
|
|
|
#!/usr/bin/env bash
|
2014-06-17 02:16:40 -04:00
|
|
|
|
2016-06-02 20:25:58 -04:00
|
|
|
# Copyright 2014 The Kubernetes Authors.
|
2014-06-17 02:16:40 -04:00
|
|
|
#
|
|
|
|
|
# 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.
|
|
|
|
|
|
2014-10-06 16:25:27 -04:00
|
|
|
set -o errexit
|
|
|
|
|
set -o nounset
|
|
|
|
|
set -o pipefail
|
2014-06-17 02:16:40 -04:00
|
|
|
|
2023-01-23 09:12:41 -05:00
|
|
|
# Short-circuit if init.sh has already been sourced
|
|
|
|
|
[[ $(type -t kube::init::loaded) == function ]] && return 0
|
|
|
|
|
|
2018-02-22 04:05:46 -05:00
|
|
|
# Unset CDPATH so that path interpolation can work correctly
|
|
|
|
|
# https://github.com/kubernetes/kubernetes/issues/52255
|
|
|
|
|
unset CDPATH
|
|
|
|
|
|
2014-10-22 19:26:59 -04:00
|
|
|
# The root of the build/dist directory
|
2019-06-23 20:44:39 -04:00
|
|
|
KUBE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)"
|
2014-06-17 02:16:40 -04:00
|
|
|
|
2022-05-21 17:23:01 -04:00
|
|
|
# Where output goes. We should avoid redefining these anywhere else.
|
|
|
|
|
#
|
|
|
|
|
# KUBE_OUTPUT: the root directory (absolute) where this build should drop any
|
|
|
|
|
# files (subdirs are encouraged).
|
|
|
|
|
# KUBE_OUTPUT_BIN: the directory in which compiled binaries will be placed,
|
|
|
|
|
# under OS/ARCH specific subdirs
|
|
|
|
|
# THIS_PLATFORM_BIN: a symlink to the output directory for binaries built for
|
|
|
|
|
# the current host platform (e.g. build/test tools).
|
|
|
|
|
#
|
|
|
|
|
# Compat: The KUBE_OUTPUT_SUBPATH variable is sometimes passed in by callers.
|
|
|
|
|
# If it is specified, we'll use it in KUBE_OUTPUT.
|
|
|
|
|
_KUBE_OUTPUT_SUBPATH="${KUBE_OUTPUT_SUBPATH:-_output/local}"
|
|
|
|
|
export KUBE_OUTPUT="${KUBE_ROOT}/${_KUBE_OUTPUT_SUBPATH}"
|
2025-10-15 16:12:38 -04:00
|
|
|
readonly _KUBE_OUTPUT_BIN_SUBPATH="bin"
|
|
|
|
|
export KUBE_OUTPUT_BIN="${KUBE_OUTPUT}/${_KUBE_OUTPUT_BIN_SUBPATH}"
|
2022-05-21 17:23:01 -04:00
|
|
|
export THIS_PLATFORM_BIN="${KUBE_ROOT}/_output/bin"
|
2014-09-09 18:03:32 -04:00
|
|
|
|
2014-10-22 19:26:59 -04:00
|
|
|
source "${KUBE_ROOT}/hack/lib/util.sh"
|
2018-01-13 19:25:18 -05:00
|
|
|
source "${KUBE_ROOT}/hack/lib/logging.sh"
|
2014-06-17 02:16:40 -04:00
|
|
|
|
2014-10-22 19:26:59 -04:00
|
|
|
kube::log::install_errexit
|
2021-01-22 08:29:42 -05:00
|
|
|
kube::util::ensure-bash-version
|
2014-06-19 20:02:54 -04:00
|
|
|
|
2014-10-22 19:26:59 -04:00
|
|
|
source "${KUBE_ROOT}/hack/lib/version.sh"
|
|
|
|
|
source "${KUBE_ROOT}/hack/lib/golang.sh"
|
|
|
|
|
source "${KUBE_ROOT}/hack/lib/etcd.sh"
|
2014-06-17 02:16:40 -04:00
|
|
|
|
2016-09-21 10:44:40 -04:00
|
|
|
# list of all available group versions. This should be used when generated code
|
|
|
|
|
# or when starting an API server that you want to have everything.
|
|
|
|
|
# most preferred version for a group should appear first
|
|
|
|
|
KUBE_AVAILABLE_GROUP_VERSIONS="${KUBE_AVAILABLE_GROUP_VERSIONS:-\
|
|
|
|
|
v1 \
|
2019-06-28 18:24:56 -04:00
|
|
|
admissionregistration.k8s.io/v1 \
|
2022-10-04 00:46:55 -04:00
|
|
|
admissionregistration.k8s.io/v1alpha1 \
|
2017-11-19 16:41:20 -05:00
|
|
|
admissionregistration.k8s.io/v1beta1 \
|
2019-07-11 13:28:00 -04:00
|
|
|
admission.k8s.io/v1 \
|
2017-11-19 16:41:20 -05:00
|
|
|
admission.k8s.io/v1beta1 \
|
2018-12-09 04:12:45 -05:00
|
|
|
apps/v1 \
|
2016-10-27 17:20:52 -04:00
|
|
|
apps/v1beta1 \
|
2017-07-10 19:08:41 -04:00
|
|
|
apps/v1beta2 \
|
2017-01-30 16:43:05 -05:00
|
|
|
authentication.k8s.io/v1 \
|
2022-07-21 20:01:52 -04:00
|
|
|
authentication.k8s.io/v1alpha1 \
|
2016-09-21 10:44:40 -04:00
|
|
|
authentication.k8s.io/v1beta1 \
|
2017-01-30 14:35:28 -05:00
|
|
|
authorization.k8s.io/v1 \
|
2016-09-21 10:44:40 -04:00
|
|
|
authorization.k8s.io/v1beta1 \
|
|
|
|
|
autoscaling/v1 \
|
2021-07-06 04:02:42 -04:00
|
|
|
autoscaling/v2 \
|
2016-09-21 10:44:40 -04:00
|
|
|
batch/v1 \
|
2017-08-10 07:04:39 -04:00
|
|
|
batch/v1beta1 \
|
2020-06-01 21:26:28 -04:00
|
|
|
certificates.k8s.io/v1 \
|
2017-01-12 15:23:11 -05:00
|
|
|
certificates.k8s.io/v1beta1 \
|
2022-11-04 15:20:25 -04:00
|
|
|
certificates.k8s.io/v1alpha1 \
|
2024-10-04 10:43:11 -04:00
|
|
|
coordination.k8s.io/v1alpha2 \
|
2018-05-22 10:34:25 -04:00
|
|
|
coordination.k8s.io/v1beta1 \
|
2018-12-19 10:22:05 -05:00
|
|
|
coordination.k8s.io/v1 \
|
2021-03-03 01:47:10 -05:00
|
|
|
discovery.k8s.io/v1 \
|
2019-10-25 17:59:10 -04:00
|
|
|
discovery.k8s.io/v1beta1 \
|
2025-07-03 07:29:02 -04:00
|
|
|
resource.k8s.io/v1 \
|
2025-03-20 03:04:41 -04:00
|
|
|
resource.k8s.io/v1beta2 \
|
2024-09-26 04:34:41 -04:00
|
|
|
resource.k8s.io/v1beta1 \
|
2024-06-14 06:40:48 -04:00
|
|
|
resource.k8s.io/v1alpha3 \
|
2016-09-21 10:44:40 -04:00
|
|
|
extensions/v1beta1 \
|
2020-06-01 11:03:13 -04:00
|
|
|
events.k8s.io/v1 \
|
2017-09-13 10:46:26 -04:00
|
|
|
events.k8s.io/v1beta1 \
|
2016-09-21 10:44:40 -04:00
|
|
|
imagepolicy.k8s.io/v1alpha1 \
|
2017-03-13 10:31:16 -04:00
|
|
|
networking.k8s.io/v1 \
|
2019-02-14 00:28:00 -05:00
|
|
|
networking.k8s.io/v1beta1 \
|
2020-11-11 14:22:32 -05:00
|
|
|
node.k8s.io/v1 \
|
2019-02-22 13:45:00 -05:00
|
|
|
node.k8s.io/v1alpha1 \
|
2019-02-27 14:19:02 -05:00
|
|
|
node.k8s.io/v1beta1 \
|
2021-02-20 15:56:31 -05:00
|
|
|
policy/v1 \
|
2016-10-26 04:40:07 -04:00
|
|
|
policy/v1beta1 \
|
2017-07-26 10:36:43 -04:00
|
|
|
rbac.authorization.k8s.io/v1 \
|
2017-01-09 12:24:21 -05:00
|
|
|
rbac.authorization.k8s.io/v1beta1 \
|
2016-09-21 10:44:40 -04:00
|
|
|
rbac.authorization.k8s.io/v1alpha1 \
|
2017-05-16 20:46:57 -04:00
|
|
|
scheduling.k8s.io/v1alpha1 \
|
2018-05-09 11:02:42 -04:00
|
|
|
scheduling.k8s.io/v1beta1 \
|
2019-02-20 14:42:42 -05:00
|
|
|
scheduling.k8s.io/v1 \
|
2017-02-24 14:08:15 -05:00
|
|
|
storage.k8s.io/v1beta1 \
|
2017-05-16 20:46:57 -04:00
|
|
|
storage.k8s.io/v1 \
|
2017-11-21 01:51:43 -05:00
|
|
|
storage.k8s.io/v1alpha1 \
|
2023-10-09 14:21:51 -04:00
|
|
|
flowcontrol.apiserver.k8s.io/v1 \
|
2025-10-29 15:34:32 -04:00
|
|
|
storagemigration.k8s.io/v1beta1 \
|
2020-11-04 03:33:14 -05:00
|
|
|
flowcontrol.apiserver.k8s.io/v1beta1 \
|
2021-08-16 16:57:07 -04:00
|
|
|
flowcontrol.apiserver.k8s.io/v1beta2 \
|
2022-09-07 18:38:24 -04:00
|
|
|
flowcontrol.apiserver.k8s.io/v1beta3 \
|
2020-07-21 13:46:21 -04:00
|
|
|
internal.apiserver.k8s.io/v1alpha1 \
|
2016-09-21 10:44:40 -04:00
|
|
|
}"
|
|
|
|
|
|
|
|
|
|
# not all group versions are exposed by the server. This list contains those
|
|
|
|
|
# which are not available so we don't generate clients or swagger for them
|
|
|
|
|
KUBE_NONSERVER_GROUP_VERSIONS="
|
2016-10-26 15:02:16 -04:00
|
|
|
abac.authorization.kubernetes.io/v0 \
|
|
|
|
|
abac.authorization.kubernetes.io/v1beta1 \
|
2022-08-23 15:51:51 -04:00
|
|
|
apidiscovery.k8s.io/v2beta1 \
|
2024-01-19 13:14:09 -05:00
|
|
|
apidiscovery.k8s.io/v2 \
|
2016-10-26 15:02:16 -04:00
|
|
|
componentconfig/v1alpha1 \
|
|
|
|
|
imagepolicy.k8s.io/v1alpha1\
|
2019-07-11 13:28:00 -04:00
|
|
|
admission.k8s.io/v1\
|
2017-11-19 16:41:20 -05:00
|
|
|
admission.k8s.io/v1beta1\
|
2016-09-21 10:44:40 -04:00
|
|
|
"
|
2019-06-23 20:44:39 -04:00
|
|
|
export KUBE_NONSERVER_GROUP_VERSIONS
|
2016-09-21 10:44:40 -04:00
|
|
|
|
2016-04-24 00:45:03 -04:00
|
|
|
# This emulates "readlink -f" which is not available on MacOS X.
|
|
|
|
|
# Test:
|
|
|
|
|
# T=/tmp/$$.$RANDOM
|
|
|
|
|
# mkdir $T
|
|
|
|
|
# touch $T/file
|
|
|
|
|
# mkdir $T/dir
|
|
|
|
|
# ln -s $T/file $T/linkfile
|
|
|
|
|
# ln -s $T/dir $T/linkdir
|
|
|
|
|
# function testone() {
|
|
|
|
|
# X=$(readlink -f $1 2>&1)
|
|
|
|
|
# Y=$(kube::readlinkdashf $1 2>&1)
|
|
|
|
|
# if [ "$X" != "$Y" ]; then
|
|
|
|
|
# echo readlinkdashf $1: expected "$X", got "$Y"
|
|
|
|
|
# fi
|
|
|
|
|
# }
|
|
|
|
|
# testone /
|
|
|
|
|
# testone /tmp
|
|
|
|
|
# testone $T
|
|
|
|
|
# testone $T/file
|
|
|
|
|
# testone $T/dir
|
|
|
|
|
# testone $T/linkfile
|
|
|
|
|
# testone $T/linkdir
|
|
|
|
|
# testone $T/nonexistant
|
|
|
|
|
# testone $T/linkdir/file
|
|
|
|
|
# testone $T/linkdir/dir
|
|
|
|
|
# testone $T/linkdir/linkfile
|
|
|
|
|
# testone $T/linkdir/linkdir
|
|
|
|
|
function kube::readlinkdashf {
|
|
|
|
|
# run in a subshell for simpler 'cd'
|
|
|
|
|
(
|
2019-01-21 17:11:58 -05:00
|
|
|
if [[ -d "${1}" ]]; then # This also catch symlinks to dirs.
|
|
|
|
|
cd "${1}"
|
2016-04-24 00:45:03 -04:00
|
|
|
pwd -P
|
|
|
|
|
else
|
2019-01-21 17:11:58 -05:00
|
|
|
cd "$(dirname "${1}")"
|
2016-04-24 00:45:03 -04:00
|
|
|
local f
|
2019-01-21 17:11:58 -05:00
|
|
|
f=$(basename "${1}")
|
|
|
|
|
if [[ -L "${f}" ]]; then
|
|
|
|
|
readlink "${f}"
|
2016-04-24 00:45:03 -04:00
|
|
|
else
|
|
|
|
|
echo "$(pwd -P)/${f}"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
)
|
2015-12-17 12:36:20 -05:00
|
|
|
}
|
|
|
|
|
|
2016-04-24 00:45:03 -04:00
|
|
|
# This emulates "realpath" which is not available on MacOS X
|
|
|
|
|
# Test:
|
|
|
|
|
# T=/tmp/$$.$RANDOM
|
|
|
|
|
# mkdir $T
|
|
|
|
|
# touch $T/file
|
|
|
|
|
# mkdir $T/dir
|
|
|
|
|
# ln -s $T/file $T/linkfile
|
|
|
|
|
# ln -s $T/dir $T/linkdir
|
|
|
|
|
# function testone() {
|
|
|
|
|
# X=$(realpath $1 2>&1)
|
|
|
|
|
# Y=$(kube::realpath $1 2>&1)
|
|
|
|
|
# if [ "$X" != "$Y" ]; then
|
|
|
|
|
# echo realpath $1: expected "$X", got "$Y"
|
|
|
|
|
# fi
|
|
|
|
|
# }
|
|
|
|
|
# testone /
|
|
|
|
|
# testone /tmp
|
|
|
|
|
# testone $T
|
|
|
|
|
# testone $T/file
|
|
|
|
|
# testone $T/dir
|
|
|
|
|
# testone $T/linkfile
|
|
|
|
|
# testone $T/linkdir
|
|
|
|
|
# testone $T/nonexistant
|
|
|
|
|
# testone $T/linkdir/file
|
|
|
|
|
# testone $T/linkdir/dir
|
|
|
|
|
# testone $T/linkdir/linkfile
|
|
|
|
|
# testone $T/linkdir/linkdir
|
|
|
|
|
kube::realpath() {
|
2019-01-21 17:11:58 -05:00
|
|
|
if [[ ! -e "${1}" ]]; then
|
|
|
|
|
echo "${1}: No such file or directory" >&2
|
2016-04-24 00:45:03 -04:00
|
|
|
return 1
|
|
|
|
|
fi
|
2019-01-21 17:11:58 -05:00
|
|
|
kube::readlinkdashf "${1}"
|
2016-04-24 00:45:03 -04:00
|
|
|
}
|
2023-01-23 09:12:41 -05:00
|
|
|
|
|
|
|
|
# Marker function to indicate init.sh has been fully sourced
|
|
|
|
|
kube::init::loaded() {
|
|
|
|
|
return 0
|
|
|
|
|
}
|