Merge "Update build-helm-charts.sh to include image versions"

This commit is contained in:
Zuul 2019-04-10 16:14:31 +00:00 committed by Gerrit Code Review
commit cbd3ce1647
1 changed files with 79 additions and 7 deletions

View File

@ -17,19 +17,29 @@ fi
SUPPORTED_OS_ARGS=('centos')
OS=centos
LABEL=""
declare -a IMAGE_FILES
function usage {
cat >&2 <<EOF
Usage:
$(basename $0) [ --os <os> ] [ --verbose ]
$(basename $0) [ --os <os> ] [-i, --image-file <image-file>] [--label <label>] [ --verbose ]
Options:
--os: Specify base OS (eg. centos)
--verbose: Verbose output
--help: Give this help list
--os: Specify base OS (eg. centos)
-i, --image-file: Specify the path to image file(s) or url(s). Multiple
files/urls can be specified with a comma-separated list,
or with multiple --image-file arguments.
Note: Files are in order of priority. Images may appear
in multiple files, the last image reference has higher
priority.
--label: Specify the label of the application tarball. The label
is used to construct the name of tarball.
--verbose: Verbose output
--help: Give this help list
EOF
}
OPTS=$(getopt -o h -l help,os:,verbose -- "$@")
OPTS=$(getopt -o h,i: -l help,os:,image-file:,label:,verbose -- "$@")
if [ $? -ne 0 ]; then
usage
exit 1
@ -48,6 +58,15 @@ while true; do
OS=$2
shift 2
;;
-i | --image-file)
# Read comma-separated values into array
IMAGE_FILES+=(${2//,/ })
shift 2
;;
--label)
LABEL=$2
shift 2
;;
--verbose)
VERBOSE=true
shift
@ -104,6 +123,51 @@ fi
mkdir -p ${BUILD_OUTPUT_PATH}
cd ${BUILD_OUTPUT_PATH}
IMAGE_FILE_PATH=${BUILD_OUTPUT_PATH}/image_file
if [ ${#IMAGE_FILES[@]} -ne 0 ]; then
mkdir ${IMAGE_FILE_PATH}
fi
# Read the image versions from the passed image
# files and build them into armada manifest
function build_image_versions_to_manifest {
local manifest_file=$1
for image_file in ${IMAGE_FILES[@]}; do
if [[ ${image_file} =~ ^https?://.*(.lst|.txt)$ ]]; then
wget --quiet --no-clobber ${image_file} \
--directory-prefix ${IMAGE_FILE_PATH}
if [ $? -ne 0 ]; then
echo "Failed to download image file from ${image_file}" >&2
exit 1
fi
elif [[ -f ${image_file} && ${image_file} =~ .lst|.txt ]]; then
cp ${image_file} ${IMAGE_FILE_PATH}
else
echo "Cannot recognize the provided image file:${image_file}" >&2
exit 1
fi
image_file=${IMAGE_FILE_PATH}/${image_file##*/}
for image_pattern in $(sed -e 's#/#\\/#g' ${image_file}); do
# Extract image name from the input image file and
image_name=$(echo ${image_pattern} | sed -n 's/.*\/\(.*\):.*$/\1/p')
# Replace the old image with the new image in manifest file
old_image_pattern="\([a-zA-Z0-9.]*\|[0-9.:]*\)\/.*${image_name}:.*"
sed -i "s/${old_image_pattern}/${image_pattern}/" ${manifest_file}
if [ $? -ne 0 ]; then
echo "Failed to update manifest file" >&2
exit 1
fi
done
done
}
# Extract the helm charts, order does not matter.
declare -a FAILED
RPMS_DIR=${MY_WORKSPACE}/std/rpmbuild/RPMS
@ -155,6 +219,7 @@ cp -R usr/lib/helm staging/charts
# Build tarballs for each armada yaml file
echo "Results:"
for manifest in usr/lib/armada/*.yaml; do
build_image_versions_to_manifest ${manifest}
cp ${manifest} staging/.
manifest_file=${manifest##*/}
manifest_name=${manifest_file%.yaml}
@ -162,14 +227,21 @@ for manifest in usr/lib/armada/*.yaml; do
cd staging
find . -type f ! -name '*.md5' -print0 | xargs -0 md5sum > checksum.md5
cd ..
tar ${TAR_FLAGS} "helm-charts-${manifest_name}.tgz" -C staging/ .
if [ -n "${LABEL}" ]; then
tarball_name="helm-charts-${manifest_name}-${LABEL}.tgz"
else
tarball_name="helm-charts-${manifest_name}.tgz"
fi
tar ${TAR_FLAGS} ${tarball_name} -C staging/ .
if [ $? -ne 0 ]; then
echo "Failed to create the tarball" >&2
exit 1
fi
rm staging/${manifest_file}
rm staging/checksum.md5
echo " ${BUILD_OUTPUT_PATH}/helm-charts-${manifest_name}.tgz"
echo " ${BUILD_OUTPUT_PATH}/${tarball_name}"
done
exit 0