Files
tripleo-common/scripts/upload-artifacts
Damien Ciabrini b6a546df7f Fix upload-artifacts and its installation
Fix the content of DeployArtifactFILEs in the generated
environment file. The absolute path of the artifact is
now properly formatted, and the script correctly handles
multiple files passed in parameters.

Fix the installation of the script in setup.cfg.

Tested manually with multiple artifacts, and via
upload-puppet-modules (single artifact).

Change-Id: I946df38ada9b2197076963e6140653f85d7c2cbc
Closes-Bug: #1933336
(cherry picked from commit 7428219d9f)
2021-08-24 08:36:34 +00:00

135 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
#set -x
# Copyright 2015 Red Hat, Inc.
#
# 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.
#
# Script to upload files to a Artifact container for deployment via
# TripleO Heat Templates.
#
set -eu
set -o pipefail
SCRIPT_NAME=$(basename $0)
SCRIPT_HOME=$(cd $(dirname $0); pwd)
function show_options {
echo "Usage: $SCRIPT_NAME"
echo
echo "Options:"
echo " -h, --help -- print this help."
echo " -f <file> -- File(s) to upload."
echo " -c <container> -- Artifact container to use."
echo " Default: overcloud-artifacts"
echo " --environment <env> -- Generate this heat <env>"
echo " Default: $HOME/.tripleo/environments/deployment-artifacts.yaml"
echo " --seconds <seconds> -- Number of seconds for temp URLs."
echo " Default: 31536000 (one year)"
echo
echo "Upload a set of files to Artifact and generate a Heat environment"
echo "file containing the required DeployArtifactURLs parameter(s) "
echo "so that it is used with TripleO Heat Templates."
echo
exit $1
}
function check_file {
local FILE=$1
supported_files=(" RPM " "gzip compressed data")
array_length=${#supported_files[@]}
local test_type=`file $FILE`
local i=0
local matched=0
while [ $i -ne $array_length -a $matched -eq 0 ]; do
if [[ "$test_type" =~ ${supported_files[$i]} ]]; then
matched=1
fi
i=$((i+1))
done
if [ $matched -eq 0 ]; then
echo "Not a supported file type: $FILE"
exit 1
fi
}
TEMP=`getopt -o he:f:c:s: -l help,environment:,file:,container:,seconds: -n $SCRIPT_NAME -- "$@"`
if [ $? != 0 ]; then
echo "Terminating..." >&2
exit 1
fi
# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"
ENVIRONMENT_FILE="$HOME/.tripleo/environments/deployment-artifacts.yaml"
FILES=
CONTAINER_NAME=overcloud-artifacts
SECONDS=31536000
BINDPORT="${BINDPORT:-8080}"
BINDADDRESS=$(ip addr show dev br-ctlplane | awk -F'\\s|/' '/inet\s/ {print $6}' | head -n 1)
while true ; do
case "$1" in
-h|--help) show_options 0 >&2;;
-e|--environment) ENVIRONMENT_FILE=$2 ; shift 2;;
-f|--file) FILES+=" $2" ; shift 2;;
-c|--container) CONTAINER_NAME=$2 ; shift 2;;
-s|--seconds) SECONDS=$2 ; shift 2;;
--) shift ; break;;
*) echo "Error: unsupported option $1." ; exit 1;;
esac
done
if [ -z "${FILES:-}" ]; then
echo "Error: No files were specified."
exit 1
fi
if [ -z "${CONTAINER_NAME:-}" ]; then
echo "Error: No Artifact --container was specified."
exit 1
fi
# Create artifact archive
sudo mkdir -p "/var/lib/tripleo/artifacts/${CONTAINER_NAME}"
for FILE in ${FILES[@]}; do
check_file "$FILE"
sudo mv -v "$FILE" "/var/lib/tripleo/artifacts/${CONTAINER_NAME}/"
done
if [ -n "${ENVIRONMENT_FILE:-}" ]; then
echo "Creating heat environment file: ${ENVIRONMENT_FILE}"
mkdir -p $(dirname "${ENVIRONMENT_FILE}")
/bin/python3 <<EOC
import os
import yaml
key = 'DeployArtifactFILEs'
files = ($(printf "'%s'," ${FILES[@]}))
urls = [
"/var/lib/tripleo/artifacts/${CONTAINER_NAME}/{}".format(os.path.basename(i))
for i in files
]
content = {'parameter_defaults': {key: []}}
content['parameter_defaults'][key].extend(urls)
with open("${ENVIRONMENT_FILE}", 'w') as f:
yaml.dump(content, f, default_flow_style=False)
EOC
fi