#!/usr/bin/env bash set -Eeuo pipefail MODE="--publish" if [ "${1:-}" = "--check" ]; then MODE="--check" shift fi MACHINE="${1:-}" shift || true DESCRIPTION="${*:-current managed source}" case "$MACHINE" in vm100|vm101|vm121) ;; *) echo \ 'Usage: router-machine-close [--check] {vm100|vm101|vm121} "description"' \ >&2 exit 2 ;; esac BASE="/opt/router-ops" BACKEND="$BASE/bin/router-${MACHINE}-git-source-publish" STATE_FILE="$BASE/state/current-${MACHINE}-git-source.env" TS="$(date -u +%Y%m%d-%H%M%S)" RUN_DIR="$BASE/state/machine-close-runs/${TS}_${MACHINE}" LOG="$RUN_DIR/backend.txt" DESCRIPTION_FILE="$RUN_DIR/description.txt" mkdir -p "$RUN_DIR" chmod 700 "$RUN_DIR" printf '%s\n' "$DESCRIPTION" > "$DESCRIPTION_FILE" chmod 600 "$DESCRIPTION_FILE" test -x "$BACKEND" if ! "$BACKEND" "$MODE" > "$LOG" 2>&1; then echo "STOP=ROUTER_MACHINE_CLOSE_BACKEND_FAILED" echo "MACHINE=$MACHINE" echo "MODE=$MODE" cat "$LOG" exit 1 fi if [ "$MODE" = "--check" ]; then RESULT="$( awk ' /^RESULT=PASS_/ { value=$0 } END { print value } ' "$LOG" )" test -n "$RESULT" echo "$RESULT" echo "MACHINE=$MACHINE" echo "MODE=--check" echo "DESCRIPTION=$DESCRIPTION" echo "BACKEND_LOG=$LOG" exit 0 fi test -f "$STATE_FILE" MACHINE_UPPER="$( printf '%s' "$MACHINE" | tr '[:lower:]' '[:upper:]' )" read_state() { local suffix="$1" local key="${MACHINE_UPPER}_GIT_SOURCE_${suffix}" awk -F= -v key="$key" ' $1 == key { print substr($0, index($0, "=") + 1) } ' "$STATE_FILE" | tail -n 1 } PUBLIC_URL="$(read_state URL)" COMMIT="$(read_state COMMIT)" TREE="$(read_state TREE)" FILE_COUNT="$(read_state FILE_COUNT)" PUBLIC_DIR="$(read_state PUBLIC_DIR)" test -n "$PUBLIC_URL" test -n "$COMMIT" test -n "$TREE" test -n "$FILE_COUNT" test -d "$PUBLIC_DIR" case "$PUBLIC_URL" in http://*|https://*) ;; *) echo "STOP=INVALID_MACHINE_PUBLIC_URL" exit 1 ;; esac printf '%s\n' "$DESCRIPTION" \ > "$PUBLIC_DIR/step-description.txt" chmod 644 "$PUBLIC_DIR/step-description.txt" CURRENT="$BASE/state/current-machine-close-${MACHINE}.env" CURRENT_TMP="${CURRENT}.tmp.$$" { echo "ROUTER_MACHINE_CLOSE_UPDATED_AT_UTC=$TS" echo "ROUTER_MACHINE_CLOSE_RESULT=PASS" echo "ROUTER_MACHINE_CLOSE_MACHINE=$MACHINE" echo "ROUTER_MACHINE_CLOSE_DESCRIPTION=$DESCRIPTION" echo "ROUTER_MACHINE_CLOSE_COMMIT=$COMMIT" echo "ROUTER_MACHINE_CLOSE_TREE=$TREE" echo "ROUTER_MACHINE_CLOSE_FILE_COUNT=$FILE_COUNT" echo "ROUTER_MACHINE_CLOSE_PUBLIC_URL=$PUBLIC_URL" echo "ROUTER_MACHINE_CLOSE_PUBLIC_DIR=$PUBLIC_DIR" echo "ROUTER_MACHINE_CLOSE_BACKEND_LOG=$LOG" } > "$CURRENT_TMP" chmod 600 "$CURRENT_TMP" mv "$CURRENT_TMP" "$CURRENT" echo "RESULT=PASS_ROUTER_MACHINE_CLOSE" echo "MACHINE=$MACHINE" echo "DESCRIPTION=$DESCRIPTION" echo "COMMIT=$COMMIT" echo "TREE=$TREE" echo "GIT_FILE_COUNT=$FILE_COUNT" echo "SOURCE_PUBLISH_BACKEND=$BACKEND" echo "BACKEND_LOG=$LOG" # Эту последнюю строку прикладываем к STEP. echo "${MACHINE_UPPER}_PUBLIC_URL=$PUBLIC_URL"