-
Notifications
You must be signed in to change notification settings - Fork 26
/
generate-kas-fleetshard-olm-bundle.sh
executable file
·230 lines (209 loc) · 8.61 KB
/
generate-kas-fleetshard-olm-bundle.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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#!/usr/bin/env bash
#
# Generates OLM bundle using existing CRDs
#
set -euo pipefail
DIR_NAME="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
KI_CONFIG="${DIR_NAME}/../kas-installer.env"
source ${KI_CONFIG}
KAS_FLEETSHARD_GIT_URL=
KAS_FLEETSHARD_GIT_REF='main'
KAS_FLEETSHARD_IMAGE_REGISTRY="quay.io"
KAS_FLEETSHARD_IMAGE_ORG="${USER}"
KAS_FLEETSHARD_OLM_BUNDLE_REPO="kas-fleetshard-operator-index"
KAS_FLEETSHARD_OLM_BUNDLE_VERSION=
UPDATE_KAS_INSTALLER_ENV='false'
BUILD_ENGINE='docker'
function usage() {
echo "
Usage: generate-kas-fleetshard-olm-bundle.sh [<options>]
Options:
--git-url Required: URL or directory path to a kas-fleetshard source code repository. When not a directory
the repository will be cloned locally.
--git-ref git branch, tag, or commit. Used when '--git-url' is not a directory path.
Default: ${KAS_FLEETSHARD_GIT_REF}
--image-registry Image registry to push the generated kas-fleetshard images.
Default: ${KAS_FLEETSHARD_IMAGE_REGISTRY}
--image-group Image group/organization to push the generated kas-fleetshard images.
Default: ${KAS_FLEETSHARD_IMAGE_ORG}
--bundle-repo Image repository name for the for the generated OLM bundle index image
Default: ${KAS_FLEETSHARD_OLM_BUNDLE_REPO}
--bundle-version OLM bundle version
Default: kas-fleetshard POM version
--update-config When set, the kas-installer.env file will be updated to use the generated OLM bundle index image
Default: unset
--build-engine Tool for build container images. Examples: buildah, docker, podman.
Default: ${BUILD_ENGINE}
--patch-file JSON patch file to be applied to the kas-fleetshard operator's OLM ClusterServiceVersion after
all defaults have been generated.
Default: none
--help Display this help text
"
}
while [[ ${#} -gt 0 ]]; do
key="$1"
case $key in
"--git-url" )
KAS_FLEETSHARD_GIT_URL="${2}"
shift
shift
;;
"--git-ref" )
KAS_FLEETSHARD_GIT_REF="${2}"
shift
shift
;;
"--image-registry" )
KAS_FLEETSHARD_IMAGE_REGISTRY="${2}"
shift
shift
;;
"--image-group" )
KAS_FLEETSHARD_IMAGE_ORG="${2}"
shift
shift
;;
"--bundle-repo" )
KAS_FLEETSHARD_OLM_BUNDLE_REPO="${2}"
shift
shift
;;
"--bundle-version" )
KAS_FLEETSHARD_OLM_BUNDLE_VERSION="${2}"
shift
shift
;;
"--update-config" )
UPDATE_KAS_INSTALLER_ENV="true"
shift
;;
"--build-engine" )
BUILD_ENGINE="${2}"
shift
shift
;;
"--patch-file" )
KAS_FLEETSHARD_OLM_BUNDLE_PATCHES="${2}"
shift
shift
;;
"--help" )
usage
exit 0
;;
*)
echo "Unknown argument '${1}'";
usage
exit 1
;;
esac
done
GIT="$(which git)"
YQ=$(which yq)
main() {
initialize_inputs
generate_olm_bundle
}
initialize_inputs() {
if [ -d "${KAS_FLEETSHARD_GIT_URL}" ] ; then
KAS_FLEETSHARD_CODE_DIR=${KAS_FLEETSHARD_GIT_URL}
else
mkdir -p "${DIR_NAME}/tmp"
# Temporary directory for the tool binaries
TMPDIR=$(mktemp --directory --tmpdir=${DIR_NAME}/tmp fsobundle.XXX 2>/dev/null || mktemp -d -t 'fsobundle.XXX')
KAS_FLEETSHARD_CODE_DIR="${TMPDIR}/kas-fleetshard-source"
if [ -d "${KAS_FLEETSHARD_CODE_DIR}" ]; then
CONFIGURED_GIT="${KAS_FLEETSHARD_GIT_URL}:${KAS_FLEETSHARD_GIT_REF}"
CURRENT_GIT=$(cd "${KAS_FLEETSHARD_CODE_DIR}" && echo "$(${GIT} remote get-url origin):$(${GIT} rev-parse HEAD)")
if [ "${CURRENT_GIT}" != "${CONFIGURED_GIT}" ] ; then
echo "Refreshing KAS Fleetshard code directory (current ${CURRENT_GIT} != configured ${CONFIGURED_GIT})"
# Checkout the configured git ref and pull only if not in detached HEAD state (rc of symbolic-ref == 0)
(cd ${KAS_FLEETSHARD_CODE_DIR} && \
${GIT} remote set-url origin ${KAS_FLEETSHARD_GIT_URL}
${GIT} fetch origin && \
${GIT} checkout ${KAS_FLEETSHARD_GIT_REF} && \
${GIT} symbolic-ref -q HEAD && \
${GIT} pull --ff-only || echo "Skipping 'pull' for detached HEAD")
else
echo "KAS Fleetshard code directory is current, not refreshing"
fi
else
echo "KAS Fleetshard code directory does not exist. Cloning it..."
${GIT} clone "${KAS_FLEETSHARD_GIT_URL}" ${KAS_FLEETSHARD_CODE_DIR}
(cd ${KAS_FLEETSHARD_CODE_DIR} && ${GIT} checkout ${KAS_FLEETSHARD_GIT_REF})
fi
fi
}
generate_olm_bundle() {
BUILDDT="$(date -u +%Y.%-m%d.%-H%M)"
PROJECT_VERSION="$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout -f ${KAS_FLEETSHARD_CODE_DIR}/pom.xml | tr '[:upper:]' '[:lower:]')"
KAS_FLEETSHARD_OLM_BUNDLE_VERSION=${KAS_FLEETSHARD_OLM_BUNDLE_VERSION:-"${BUILDDT}-${PROJECT_VERSION}"}
PATCH_FILE=$(mktemp)
if [ -f "${KAS_FLEETSHARD_OLM_BUNDLE_PATCHES:-}" ] ; then
cp "${KAS_FLEETSHARD_OLM_BUNDLE_PATCHES}" "${PATCH_FILE}"
else
echo "[]" > "${PATCH_FILE}"
fi
(cd ${KAS_FLEETSHARD_CODE_DIR} && \
mvn clean package -Pquickly && \
mvn package \
-pl operator,sync,bundle \
-am \
-Pquickly,generate-bundle \
--no-transfer-progress \
-Dquarkus.container-image.build='true' \
-Dquarkus.container-image.push='true' \
-Dquarkus.container-image.registry=${KAS_FLEETSHARD_IMAGE_REGISTRY} \
-Dquarkus.container-image.group=${KAS_FLEETSHARD_IMAGE_ORG} \
-Dquarkus.container-image.tag="${PROJECT_VERSION}" \
-Dquarkus.container-image.insecure='true' \
-Dquarkus.container-image.username="${IMAGE_REPOSITORY_USERNAME}" \
-Dquarkus.container-image.password="${IMAGE_REPOSITORY_PASSWORD}" \
-Dquarkus.kubernetes.image-pull-policy='Always' \
-Dquarkus.profile='prod' \
-Dkas.bundle.version="${KAS_FLEETSHARD_OLM_BUNDLE_VERSION}" \
-Dkas.bundle.patch-file="${PATCH_FILE}" \
-Dkas.bundle.patch='[{
"op": "add",
"path": "/spec/install/spec/deployments/0/spec/template/spec/imagePullSecrets",
"value": [{ "name": "rhoas-image-pull-secret" }]
}, {
"op": "add",
"path": "/spec/install/spec/deployments/1/spec/template/spec/imagePullSecrets",
"value": [{ "name": "rhoas-image-pull-secret" }]
}]' \
-Dkas.bundle.image="${KAS_FLEETSHARD_IMAGE_REGISTRY}/${KAS_FLEETSHARD_IMAGE_ORG}/kas-fleetshard-operator-bundle:${KAS_FLEETSHARD_OLM_BUNDLE_VERSION}" \
-Dkas.index.image-registry="${KAS_FLEETSHARD_IMAGE_REGISTRY}" \
-Dkas.index.image-group="${KAS_FLEETSHARD_IMAGE_ORG}" \
-Dkas.index.image="${KAS_FLEETSHARD_OLM_BUNDLE_REPO}" \
-Dkas.index.build-engine="${BUILD_ENGINE}")
rm "${PATCH_FILE}"
validate_olm_bundle ${KAS_FLEETSHARD_CODE_DIR}/bundle/target/bundle
INDEX_IMAGE="${KAS_FLEETSHARD_IMAGE_REGISTRY}/${KAS_FLEETSHARD_IMAGE_ORG}/${KAS_FLEETSHARD_OLM_BUNDLE_REPO}:${KAS_FLEETSHARD_OLM_BUNDLE_VERSION}"
if [ "${UPDATE_KAS_INSTALLER_ENV}" = "true" ]; then
if grep '^KAS_FLEETSHARD_OLM_INDEX_IMAGE=' ${KI_CONFIG} > /dev/null ; then
echo "Updating kas-installer.env variable KAS_FLEETSHARD_OLM_INDEX_IMAGE to '${INDEX_IMAGE}'"
sed -i "s,^KAS_FLEETSHARD_OLM_INDEX_IMAGE=.*,KAS_FLEETSHARD_OLM_INDEX_IMAGE='${INDEX_IMAGE}',g" ${KI_CONFIG}
else
echo "Adding kas-installer.env variable KAS_FLEETSHARD_OLM_INDEX_IMAGE='${INDEX_IMAGE}'"
echo "KAS_FLEETSHARD_OLM_INDEX_IMAGE='${INDEX_IMAGE}'" >> ${KI_CONFIG}
fi
else
echo '*****'
echo
echo "Pushed kas-fleetshard-operator OLM bundle index image to ${INDEX_IMAGE}"
echo "Configuration value KAS_FLEETSHARD_OLM_INDEX_IMAGE not modified."
echo
echo '*****'
fi
}
validate_olm_bundle() {
local BUNDLE=${1}
OPERATOR_SDK=$(which operator-sdk || true)
if [ -n "${OPERATOR_SDK}" ] ; then
${OPERATOR_SDK} bundle validate "${BUNDLE}" --select-optional name=operatorhub
else
echo "operator-sdk not found, skipping bundle validation"
fi
}
main