92 lines
2.7 KiB
Bash
92 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Пример настройки bucket notifications через mc (S3-compatible)
|
|
# Запускать НА УДАЛЁННОЙ машине.
|
|
#
|
|
# Пример:
|
|
# export S3CFG=/home/naeel/terra/terraform/secrets/.s3cfg_registry
|
|
# export BUCKET=buck
|
|
# export TARGET_ARN='arn:minio:sqs::primary:webhook'
|
|
# export EVENTS='put,delete'
|
|
# bash scripts/s3_notification_example.sh
|
|
#
|
|
# Где TARGET_ARN — уже существующий target в конфигурации S3/MinIO.
|
|
|
|
S3CFG="${S3CFG:-/home/naeel/terra/terraform/secrets/.s3cfg_registry}"
|
|
BUCKET="${BUCKET:-}"
|
|
TARGET_ARN="${TARGET_ARN:-}"
|
|
EVENTS="${EVENTS:-put}" # put | delete | get | put,delete
|
|
PREFIX="${PREFIX:-}" # опционально, напр. uploads/
|
|
SUFFIX="${SUFFIX:-}" # опционально, напр. .jpg
|
|
ALIAS_NAME="${ALIAS_NAME:-regnotif}"
|
|
|
|
if ! command -v mc >/dev/null 2>&1; then
|
|
echo "ERROR: mc не установлен"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f "$S3CFG" ]]; then
|
|
echo "ERROR: не найден S3CFG: $S3CFG"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$BUCKET" ]]; then
|
|
echo "ERROR: задайте BUCKET"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$TARGET_ARN" ]]; then
|
|
echo "ERROR: задайте TARGET_ARN (например arn:minio:sqs::primary:webhook)"
|
|
exit 1
|
|
fi
|
|
|
|
# Читаем access_key/secret_key/host_base из .s3cfg
|
|
# shellcheck disable=SC2016
|
|
readarray -t CFG_LINES < <(python3 - <<PY
|
|
import configparser
|
|
cfg = configparser.RawConfigParser()
|
|
cfg.read("$S3CFG")
|
|
sec = cfg["default"]
|
|
print(sec.get("access_key", ""))
|
|
print(sec.get("secret_key", ""))
|
|
print(sec.get("host_base", ""))
|
|
PY
|
|
)
|
|
ACCESS_KEY="${CFG_LINES[0]:-}"
|
|
SECRET_KEY="${CFG_LINES[1]:-}"
|
|
HOST_BASE="${CFG_LINES[2]:-}"
|
|
|
|
if [[ -z "$ACCESS_KEY" || -z "$SECRET_KEY" || -z "$HOST_BASE" ]]; then
|
|
echo "ERROR: в $S3CFG нет access_key/secret_key/host_base"
|
|
exit 1
|
|
fi
|
|
|
|
mc alias rm "$ALIAS_NAME" >/dev/null 2>&1 || true
|
|
mc alias set "$ALIAS_NAME" "https://$HOST_BASE" "$ACCESS_KEY" "$SECRET_KEY" >/dev/null
|
|
|
|
echo "[1/3] Текущие notification-правила в бакете $BUCKET:"
|
|
mc event ls "$ALIAS_NAME/$BUCKET" || true
|
|
|
|
echo "[2/3] Добавление правила: events=$EVENTS target=$TARGET_ARN"
|
|
EVENT_FLAGS=()
|
|
IFS=',' read -r -a EVENT_ARRAY <<< "$EVENTS"
|
|
for ev in "${EVENT_ARRAY[@]}"; do
|
|
EVENT_FLAGS+=("--event" "$ev")
|
|
done
|
|
|
|
FILTER_FLAGS=()
|
|
if [[ -n "$PREFIX" ]]; then
|
|
FILTER_FLAGS+=("--prefix" "$PREFIX")
|
|
fi
|
|
if [[ -n "$SUFFIX" ]]; then
|
|
FILTER_FLAGS+=("--suffix" "$SUFFIX")
|
|
fi
|
|
|
|
mc event add "$ALIAS_NAME/$BUCKET" "$TARGET_ARN" "${EVENT_FLAGS[@]}" "${FILTER_FLAGS[@]}"
|
|
|
|
echo "[3/3] Проверка после добавления:"
|
|
mc event ls "$ALIAS_NAME/$BUCKET"
|
|
|
|
echo "OK: правило уведомлений настроено"
|