mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			232 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			232 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env 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
 | 
						|
 | 
						|
# Short-circuit if init.sh has already been sourced
 | 
						|
[[ $(type -t kube::init::loaded) == function ]] && return 0
 | 
						|
 | 
						|
# Unset CDPATH so that path interpolation can work correctly
 | 
						|
# https://github.com/kubernetes/kubernetes/issues/52255
 | 
						|
unset CDPATH
 | 
						|
 | 
						|
# FIXME(dims): Note that here we assume that if GOFLAGS are already set we
 | 
						|
# leave them as-is and not try to add providerless to it. So if you
 | 
						|
# really need to set your own GOFLAGS, ensure you add "providerless" explicitly
 | 
						|
if [[ "${KUBE_PROVIDERLESS:-"n"}" == "y" ]]; then
 | 
						|
  export GOFLAGS=${GOFLAGS:-"-tags=providerless"}
 | 
						|
fi
 | 
						|
 | 
						|
# The root of the build/dist directory
 | 
						|
KUBE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)"
 | 
						|
 | 
						|
# 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}"
 | 
						|
export KUBE_OUTPUT_BIN="${KUBE_OUTPUT}/bin"
 | 
						|
export THIS_PLATFORM_BIN="${KUBE_ROOT}/_output/bin"
 | 
						|
 | 
						|
# This controls rsync compression. Set to a value > 0 to enable rsync
 | 
						|
# compression for build container
 | 
						|
KUBE_RSYNC_COMPRESS="${KUBE_RSYNC_COMPRESS:-0}"
 | 
						|
 | 
						|
# Set no_proxy for localhost if behind a proxy, otherwise,
 | 
						|
# the connections to localhost in scripts will time out
 | 
						|
export no_proxy="127.0.0.1,localhost${no_proxy:+,${no_proxy}}"
 | 
						|
 | 
						|
source "${KUBE_ROOT}/hack/lib/util.sh"
 | 
						|
source "${KUBE_ROOT}/hack/lib/logging.sh"
 | 
						|
 | 
						|
kube::log::install_errexit
 | 
						|
kube::util::ensure-bash-version
 | 
						|
 | 
						|
source "${KUBE_ROOT}/hack/lib/version.sh"
 | 
						|
source "${KUBE_ROOT}/hack/lib/golang.sh"
 | 
						|
source "${KUBE_ROOT}/hack/lib/etcd.sh"
 | 
						|
 | 
						|
# 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 \
 | 
						|
admissionregistration.k8s.io/v1 \
 | 
						|
admissionregistration.k8s.io/v1alpha1 \
 | 
						|
admissionregistration.k8s.io/v1beta1 \
 | 
						|
admission.k8s.io/v1 \
 | 
						|
admission.k8s.io/v1beta1 \
 | 
						|
apps/v1 \
 | 
						|
apps/v1beta1 \
 | 
						|
apps/v1beta2 \
 | 
						|
authentication.k8s.io/v1 \
 | 
						|
authentication.k8s.io/v1alpha1 \
 | 
						|
authentication.k8s.io/v1beta1 \
 | 
						|
authorization.k8s.io/v1 \
 | 
						|
authorization.k8s.io/v1beta1 \
 | 
						|
autoscaling/v1 \
 | 
						|
autoscaling/v2 \
 | 
						|
autoscaling/v2beta1 \
 | 
						|
autoscaling/v2beta2 \
 | 
						|
batch/v1 \
 | 
						|
batch/v1beta1 \
 | 
						|
certificates.k8s.io/v1 \
 | 
						|
certificates.k8s.io/v1beta1 \
 | 
						|
certificates.k8s.io/v1alpha1 \
 | 
						|
coordination.k8s.io/v1beta1 \
 | 
						|
coordination.k8s.io/v1 \
 | 
						|
discovery.k8s.io/v1 \
 | 
						|
discovery.k8s.io/v1beta1 \
 | 
						|
resource.k8s.io/v1alpha2 \
 | 
						|
extensions/v1beta1 \
 | 
						|
events.k8s.io/v1 \
 | 
						|
events.k8s.io/v1beta1 \
 | 
						|
imagepolicy.k8s.io/v1alpha1 \
 | 
						|
networking.k8s.io/v1 \
 | 
						|
networking.k8s.io/v1alpha1 \
 | 
						|
networking.k8s.io/v1beta1 \
 | 
						|
node.k8s.io/v1 \
 | 
						|
node.k8s.io/v1alpha1 \
 | 
						|
node.k8s.io/v1beta1 \
 | 
						|
policy/v1 \
 | 
						|
policy/v1beta1 \
 | 
						|
rbac.authorization.k8s.io/v1 \
 | 
						|
rbac.authorization.k8s.io/v1beta1 \
 | 
						|
rbac.authorization.k8s.io/v1alpha1 \
 | 
						|
scheduling.k8s.io/v1alpha1 \
 | 
						|
scheduling.k8s.io/v1beta1 \
 | 
						|
scheduling.k8s.io/v1 \
 | 
						|
storage.k8s.io/v1beta1 \
 | 
						|
storage.k8s.io/v1 \
 | 
						|
storage.k8s.io/v1alpha1 \
 | 
						|
flowcontrol.apiserver.k8s.io/v1 \
 | 
						|
storagemigration.k8s.io/v1alpha1 \
 | 
						|
flowcontrol.apiserver.k8s.io/v1beta1 \
 | 
						|
flowcontrol.apiserver.k8s.io/v1beta2 \
 | 
						|
flowcontrol.apiserver.k8s.io/v1beta3 \
 | 
						|
internal.apiserver.k8s.io/v1alpha1 \
 | 
						|
}"
 | 
						|
 | 
						|
# 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="
 | 
						|
 abac.authorization.kubernetes.io/v0 \
 | 
						|
 abac.authorization.kubernetes.io/v1beta1 \
 | 
						|
 apidiscovery.k8s.io/v2beta1 \
 | 
						|
 apidiscovery.k8s.io/v2 \
 | 
						|
 componentconfig/v1alpha1 \
 | 
						|
 imagepolicy.k8s.io/v1alpha1\
 | 
						|
 admission.k8s.io/v1\
 | 
						|
 admission.k8s.io/v1beta1\
 | 
						|
"
 | 
						|
export KUBE_NONSERVER_GROUP_VERSIONS
 | 
						|
 | 
						|
# 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'
 | 
						|
  (
 | 
						|
    if [[ -d "${1}" ]]; then # This also catch symlinks to dirs.
 | 
						|
      cd "${1}"
 | 
						|
      pwd -P
 | 
						|
    else
 | 
						|
      cd "$(dirname "${1}")"
 | 
						|
      local f
 | 
						|
      f=$(basename "${1}")
 | 
						|
      if [[ -L "${f}" ]]; then
 | 
						|
        readlink "${f}"
 | 
						|
      else
 | 
						|
        echo "$(pwd -P)/${f}"
 | 
						|
      fi
 | 
						|
    fi
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
# 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() {
 | 
						|
  if [[ ! -e "${1}" ]]; then
 | 
						|
    echo "${1}: No such file or directory" >&2
 | 
						|
    return 1
 | 
						|
  fi
 | 
						|
  kube::readlinkdashf "${1}"
 | 
						|
}
 | 
						|
 | 
						|
# Marker function to indicate init.sh has been fully sourced
 | 
						|
kube::init::loaded() {
 | 
						|
  return 0
 | 
						|
}
 |