diff --git a/isolated/package-kafka-cos.sh b/isolated/package-kafka-cos.sh new file mode 100644 index 0000000..d369e9d --- /dev/null +++ b/isolated/package-kafka-cos.sh @@ -0,0 +1,162 @@ +#!/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" <