blob: e02efa13fcab92dc856d92f55249e1e2db6cce90 [file] [log] [blame]
#!/bin/bash
# Copyright (C) 2021 by Samsung Electronics Co., Ltd.
#
# 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
usage() {
echo "Usage:"
echo " ./enrich.sh IP [BLUEPRINT_PROCESSOR_PORT] [CBA_PATH] [DD_PATH]"
echo
echo "Parameters:"
echo "IP - ip of the k8s instance"
echo "BLUEPRINT_PROCESSOR_PORT (default 30499) - exposed cds-blueprints-processor-http service port"
echo "CBA_PATH (default ./oran-sim-cba) - path for folder with CBA"
echo "DD_PATH (default ./oran-sim-cba-data-dictionary) - path for folder with DD required to execute the enrichment"
echo
echo "Environment variables respected:"
echo "ENABLE_PUBLISHING - if set to 1, script will also try to upload CBA to CDS after successful enrichment."
echo " Use only if you're sure what you're doing"
echo "SKIP_BOOTSTRAP - if set to 1, script won't try to 'bootstrap' CDS for enrichment (operation needed just once per lifecycle of CDS instance)."
echo "SKIP_DD_UPLOAD - if set to 1, script won't try to upload DataDictionary files."
echo " This can be used to speed up a bit subsequent attempts to enrich when there were no changes to Data Dictionary files in the meantime."
exit 1
}
# Wrapper function log messages
log() {
echo -e "$L_GREEN$*$L_RESET" >&2
}
# Curl wrapper with improved error handling and embed generic flags
# Safe to use with -o and -f (muted)
cds_curl() {
local res code preserve_res
declare -a cmd=(curl -sS -H 'Authorization: Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==' -w "%{http_code}")
res=$(mktemp)
cmd+=(-o "${res}")
while test $# -gt 0; do
case "$1" in
-f|--fail)
shift
;;
-o)
preserve_res="$2"
shift 2
;;
--output)
preserve_res="${1##*=}"
shift
;;
*)
cmd+=("$1")
shift
;;
esac
done
log "Running: $L_BOLD'${cmd[*]}'"
if ! code="$("${cmd[@]}")"; then
log "Curl Failure: '$code'; body:"
cat "$res"
rm -f "$res"
return 1
fi
if ! [[ "${code}" =~ 20* ]]; then
log "Remote responded with code $code; body:"
cat "$res"
rm -f "$res"
return 1
fi
if test -n "${preserve_res:-}"; then
mv "$res" "$preserve_res"
else
cat "$res"
rm -f "$res"
fi
}
if test -t 1 && test -t 2; then
L_BOLD=$(tput bold)
L_GREEN=$(tput setaf 2)
L_RESET=$(tput sgr0)
else
L_BOLD=
L_GREEN=
L_RESET=
fi
IP=$1
if [ -z "${IP}" ]; then
usage
fi
set -euo pipefail
# SINCE FRANKFURT RELEASE THE BLUEPRINT_PROCESSOR POD SERVICE MUST BE EXPOSED
DEFAULT_PROCESSOR_PORT=30499
BLUEPRINT_PROCESSOR_PORT="${2:-$DEFAULT_PROCESSOR_PORT}"
BLUEPRINT_PROCESSOR_URI=http://${IP}:${BLUEPRINT_PROCESSOR_PORT}
URL_BOOTSTRAP=${BLUEPRINT_PROCESSOR_URI}/api/v1/blueprint-model/bootstrap
URL_ENRICH=${BLUEPRINT_PROCESSOR_URI}/api/v1/blueprint-model/enrich
URL_PUBLISH=${BLUEPRINT_PROCESSOR_URI}/api/v1/blueprint-model/publish
URL_DD=${BLUEPRINT_PROCESSOR_URI}/api/v1/dictionary
CBA_PATH="${3:-./oran-sim-cba}"
DD_PATH="${4:-./oran-sim-cba-data-dictionary}"
CBA_FILE=tmp/cba.zip
CBA_ENRICHED_FILE=tmp/cba_enriched.zip
CBA_ZIP=${CBA_PATH}/${CBA_FILE}
CBA_ZIP_ENRICHED=${CBA_PATH}/${CBA_ENRICHED_FILE}
if [ "${SKIP_BOOTSTRAP:-0}" == "1" ]; then
log "Skipping Bootstrap."
else
log "Bootstraping CDS..."
cds_curl -X POST "$URL_BOOTSTRAP" -H 'Content-Type: application/json' \
-d '{ "loadModelType": true, "loadResourceDictionary": true, "loadCBA": false }'
log "Success"
fi
log "\n"
if [ "${SKIP_DD_UPLOAD:-0}" == "1" ]; then
log "Skipping Data Dictionary upload."
else
for f in "$DD_PATH"/*.json; do
log "Pushing data dictionary '$f'"
cds_curl -X POST "$URL_DD" -H 'Content-Type: application/json' -d "@$f"
log
done
fi
log "\n"
[ ! -d "$(dirname "$CBA_ZIP")" ] && mkdir -p "$(dirname "$CBA_ZIP")"
[ -f "$CBA_ZIP" ] && rm "$CBA_ZIP"
[ -f "$CBA_ZIP_ENRICHED" ] && rm "$CBA_ZIP_ENRICHED"
pushd "$CBA_PATH" || exit
zip -uqr $CBA_FILE . --exclude=*.git*
popd || exit
log "Doing enrichment..."
file "$CBA_ZIP"
cds_curl -X POST "$URL_ENRICH" -H 'Content-Type: multipart/form-data' -F file=@"$CBA_ZIP" -o "$CBA_ZIP_ENRICHED"
file "$CBA_ZIP_ENRICHED"
log "Success"
log "\n"
if [ "${ENABLE_PUBLISHING:-0}" == "1" ]; then
log "Publishing..."
cds_curl -X POST "$URL_PUBLISH" -H 'Content-Type: multipart/form-data' -F file=@"$CBA_ZIP_ENRICHED"
log
log "Success"
else
log "Publishing skipped. Enable by calling script with environment variable ENABLE_PUBLISHING=1"
fi