(multinode) Support external stage libraries
- In some cases, a user may want to provide their own stage library or replace one of these built-in stages. Allow external (to this framework) directories be specified as containing stage scripts. Change-Id: I468ea56a45e3c041e10040433e70eb9aa354ad9a
This commit is contained in:
parent
16b27b3d01
commit
00bbf600d4
|
@ -28,6 +28,13 @@ log_warn() {
|
||||||
echo -e "${d} ${*}" >> "${LOG_FILE}"
|
echo -e "${d} ${*}" >> "${LOG_FILE}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
d=$(date --utc)
|
||||||
|
echo -e "${C_MUTE}${d}${C_CLEAR} ${C_ERROR}ERROR${C_CLEAR} ${*}" 1>&2
|
||||||
|
echo -e "${d} ${*}" >> "${LOG_FILE}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
log_stage_diagnostic_header() {
|
log_stage_diagnostic_header() {
|
||||||
echo -e " ${C_ERROR}= Diagnostic Report =${C_CLEAR}"
|
echo -e " ${C_ERROR}= Diagnostic Report =${C_CLEAR}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,17 @@ source "${GATE_UTILS}"
|
||||||
|
|
||||||
sudo chmod -R 755 "${TEMP_DIR}"
|
sudo chmod -R 755 "${TEMP_DIR}"
|
||||||
|
|
||||||
STAGES_DIR=${WORKSPACE}/multi_nodes_gate/airship_gate/stages
|
STAGES_DIRS=()
|
||||||
|
|
||||||
|
while read -r libdir;do
|
||||||
|
if [[ -d "$libdir" && -r "$libdir" && -x "$libdir" ]]; then
|
||||||
|
STAGES_DIRS+=( "$libdir" )
|
||||||
|
else
|
||||||
|
log_warn "Could not find stage library $libdir, skipping..."
|
||||||
|
fi
|
||||||
|
done <<< "$(jq -c ".configuration.stage_libraries // [] | .[]" < "$GATE_MANIFEST")"
|
||||||
|
|
||||||
|
STAGES_DIRS+=( "${WORKSPACE}/multi_nodes_gate/airship_gate/stages" )
|
||||||
|
|
||||||
log_temp_dir
|
log_temp_dir
|
||||||
echo
|
echo
|
||||||
|
@ -50,8 +60,18 @@ jq -cr '.stages | .[]' "${GATE_MANIFEST}" > "${STAGES}"
|
||||||
exec 3< "$STAGES"
|
exec 3< "$STAGES"
|
||||||
while read -u 3 stage; do
|
while read -u 3 stage; do
|
||||||
NAME=$(echo "${stage}" | jq -r .name)
|
NAME=$(echo "${stage}" | jq -r .name)
|
||||||
STAGE_CMD=${STAGES_DIR}/$(echo "${stage}" | jq -r .script)
|
STAGE_SCRIPT="$(echo "${stage}" | jq -r .script)"
|
||||||
|
STAGE_CMD=""
|
||||||
|
for dir in "${STAGES_DIRS[@]}"; do
|
||||||
|
if [ -x "${dir}/${STAGE_SCRIPT}" ]; then
|
||||||
|
STAGE_CMD="${dir}/${STAGE_SCRIPT}"
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ -z "$STAGE_CMD" ]; then
|
||||||
|
log_error "$STAGE_SCRIPT not found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
log_stage_header "${NAME}"
|
log_stage_header "${NAME}"
|
||||||
if echo "${stage}" | jq -r '.arguments | @sh' | xargs "${STAGE_CMD}" ; then
|
if echo "${stage}" | jq -r '.arguments | @sh' | xargs "${STAGE_CMD}" ; then
|
||||||
log_stage_success
|
log_stage_success
|
||||||
|
|
Loading…
Reference in New Issue