#!/usr/bin/env bash set -Eeuo pipefail # Package the Kafka middleware image, upload it to Tencent COS, and print # commands for loading it on the target server. # # Required when COSCLI is not preconfigured: # COS_SECRET_ID, COS_SECRET_KEY, COS_REGION, COS_BUCKET # # Optional: # KAFKA_IMAGE=bitnami/kafka:3.7.0 # DEPLOY_ENV=emp-test # DIST_DIR=deploy/isolated/dist # COS_PREFIX=deploy/emp-test/middleware/kafka # COS_SIGN_EXPIRE=604800 # COS_CONFIG_PATH=/path/to/.cos.yaml # COSCLI_BIN=coscli # SKIP_PULL=1 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIST_DIR="${DIST_DIR:-$SCRIPT_DIR/dist}" KAFKA_IMAGE="${KAFKA_IMAGE:-bitnami/kafka:3.7.0}" DEPLOY_ENV="${DEPLOY_ENV:-emp-test}" COSCLI_BIN="${COSCLI_BIN:-coscli}" COS_SIGN_EXPIRE="${COS_SIGN_EXPIRE:-604800}" TARGET_BASE_DIR="${TARGET_BASE_DIR:-/home/admin-x99/emp}" RUN_ID="$(date '+%Y%m%d%H%M%S')" SAFE_IMAGE_NAME="$(echo "$KAFKA_IMAGE" | tr '/:' '--')" PACKAGE_NAME="${PACKAGE_NAME:-${DEPLOY_ENV}-${SAFE_IMAGE_NAME}-${RUN_ID}}" PACKAGE_DIR="$DIST_DIR/$PACKAGE_NAME" PACKAGE_ARCHIVE="$DIST_DIR/${PACKAGE_NAME}.tar.gz" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" } die() { echo "ERROR: $*" >&2 exit 1 } need_cmd() { command -v "$1" >/dev/null 2>&1 || die "Missing command: $1" } calc_sha256() { local file="$1" if command -v sha256sum >/dev/null 2>&1; then sha256sum "$file" | awk '{print $1}' elif command -v shasum >/dev/null 2>&1; then shasum -a 256 "$file" | awk '{print $1}' else echo "" fi } build_coscli_opts() { COSCLI_OPTS=() if [[ -n "${COS_CONFIG_PATH:-}" ]]; then COSCLI_OPTS+=("-c" "$COS_CONFIG_PATH") return fi [[ -n "${COS_SECRET_ID:-}" ]] || die "Missing COS_SECRET_ID or COS_CONFIG_PATH" [[ -n "${COS_SECRET_KEY:-}" ]] || die "Missing COS_SECRET_KEY or COS_CONFIG_PATH" [[ -n "${COS_REGION:-}" ]] || die "Missing COS_REGION" COSCLI_OPTS+=( "--init-skip=true" "-i" "$COS_SECRET_ID" "-k" "$COS_SECRET_KEY" "-e" "cos.$COS_REGION.myqcloud.com" ) if [[ -n "${COS_TOKEN:-}" ]]; then COSCLI_OPTS+=("--token" "$COS_TOKEN") fi } write_load_script() { cat > "$PACKAGE_DIR/load-kafka-image.sh" <