forked from RimXu/mysql-operator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall_kustomize.sh
153 lines (123 loc) · 3.57 KB
/
install_kustomize.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/usr/bin/env bash
# Copyright 2022 The Kubernetes Authors.
# SPDX-License-Identifier: Apache-2.0
# If no argument is given -> Downloads the most recently released
# kustomize binary to your current working directory.
# (e.g. 'install_kustomize.sh')
#
# If one argument is given ->
# If that argument is in the format of #.#.#, downloads the specified
# version of the kustomize binary to your current working directory.
# If that argument is something else, downloads the most recently released
# kustomize binary to the specified directory.
# (e.g. 'install_kustomize.sh 3.8.2' or 'install_kustomize.sh $(go env GOPATH)/bin')
#
# If two arguments are given -> Downloads the specified version of the
# kustomize binary to the specified directory.
# (e.g. 'install_kustomize.sh 3.8.2 $(go env GOPATH)/bin')
#
# Fails if the file already exists.
set -e
# Unset CDPATH to restore default cd behavior. An exported CDPATH can
# cause cd to output the current directory to STDOUT.
unset CDPATH
where=$PWD
release_url=https://api.github.com/repos/kubernetes-sigs/kustomize/releases
if [ -n "$1" ]; then
if [[ "$1" =~ ^[0-9]+(\.[0-9]+){2}$ ]]; then
version=v$1
release_url=${release_url}/tags/kustomize%2F$version
elif [ -n "$2" ]; then
echo "The first argument should be the requested version."
exit 1
else
where="$1"
fi
fi
if [ -n "$2" ]; then
where="$2"
fi
if ! test -d "$where"; then
echo "$where does not exist. Create it first."
exit 1
fi
# Emulates `readlink -f` behavior, as this is not available by default on MacOS
# See: https://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac
function readlink_f {
TARGET_FILE=$1
cd "$(dirname "$TARGET_FILE")"
TARGET_FILE=$(basename "$TARGET_FILE")
# Iterate down a (possible) chain of symlinks
while [ -L "$TARGET_FILE" ]
do
TARGET_FILE=$(readlink "$TARGET_FILE")
cd "$(dirname "$TARGET_FILE")"
TARGET_FILE=$(readlink "$TARGET_FILE")
done
# Compute the canonicalized name by finding the physical path
# for the directory we're in and appending the target file.
PHYS_DIR=$(pwd -P)
RESULT=$PHYS_DIR/$TARGET_FILE
echo "$RESULT"
}
where="$(readlink_f $where)/"
if [ -f "${where}kustomize" ]; then
echo "${where}kustomize exists. Remove it first."
exit 1
elif [ -d "${where}kustomize" ]; then
echo "${where}kustomize exists and is a directory. Remove it first."
exit 1
fi
tmpDir=`mktemp -d`
if [[ ! "$tmpDir" || ! -d "$tmpDir" ]]; then
echo "Could not create temp dir."
exit 1
fi
function cleanup {
rm -rf "$tmpDir"
}
trap cleanup EXIT ERR
pushd "$tmpDir" >& /dev/null
opsys=windows
if [[ "$OSTYPE" == linux* ]]; then
opsys=linux
elif [[ "$OSTYPE" == darwin* ]]; then
opsys=darwin
fi
# Supported values of 'arch': amd64, arm64, ppc64le, s390x
case $(uname -m) in
x86_64)
arch=amd64
;;
arm64)
arch=arm64
;;
ppc64le)
arch=ppc64le
;;
s390x)
arch=s390x
;;
*)
arch=amd64
;;
esac
releases=$(curl -s $release_url)
if [[ $releases == *"API rate limit exceeded"* ]]; then
echo "Github rate-limiter failed the request. Either authenticate or wait a couple of minutes."
exit 1
fi
RELEASE_URL=$(echo "${releases}" |\
grep browser_download.*${opsys}_${arch} |\
cut -d '"' -f 4 |\
sort -V | tail -n 1)
if [ ! -n "$RELEASE_URL" ]; then
echo "Version $version does not exist or is not available for ${opsys}/${arch}."
exit 1
fi
curl -sLO $RELEASE_URL
tar xzf ./kustomize_v*_${opsys}_${arch}.tar.gz
cp ./kustomize "$where"
popd >& /dev/null
${where}kustomize version
echo "kustomize installed to ${where}kustomize"