init
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
# loopctl — эксплуатация Loop: переезды баз и инстансов, прокси, DNS, проверки. Подробно: README.md
|
||||
set -euo pipefail
|
||||
D=$(cd "$(dirname "$(readlink -f "$0")")" && pwd)
|
||||
|
||||
usage() { cat <<'EOF'
|
||||
loopctl db move <куб> <id> <кластер БД> [--scale-0] перенос базы: dump -> verify -> cutover -> bind
|
||||
loopctl db migrate <куб> <id> <кластер БД> [--scale-0] только копия базы (инстанс работает на старой)
|
||||
loopctl db verify <куб> <id> [кластер БД] сверка количества строк
|
||||
loopctl db cutover <куб> <id> [кластер БД] переключить инстанс на новую базу
|
||||
loopctl db bind <куб> <id> прописать базу из CR в визор (провайдер + env)
|
||||
loopctl k8s move <id>... перенос инстанса на DST (по умолчанию loop-3)
|
||||
loopctl k8s rebind <id> только секреты + перепривязка в визоре
|
||||
loopctl proxy make <id> <исходный куб> манифест временного прокси -> DST
|
||||
loopctl proxy traffic <исходный куб> [секунд] запросы через прокси за интервал (0 = можно снимать)
|
||||
loopctl dns show|ttl|cname <поддомен> [значение] записи *.loop.ru в Selectel DNS
|
||||
loopctl check <id>... | --db <хост> | --all здоровье инстансов на DST
|
||||
Кластеры БД: lm, lp3, ff, wilix. Всё, что меняет состояние, спрашивает подтверждение (LOOPCTL_YES=1 — не спрашивать).
|
||||
EOF
|
||||
}
|
||||
|
||||
db_move() {
|
||||
local ctx=$1 id=$2 cl=$3 prev=$D/db/logs/$2.scale0-prev; shift 3
|
||||
rm -f "$prev"
|
||||
# --scale-0: инстанс остаётся 0 через verify до cutover, иначе посты за это время останутся в старой базе
|
||||
if ! MIGRATE_FORCE=1 MIGRATE_KEEP_SCALED=1 "$D/db/migrate-one.sh" "$ctx" "$id" "$cl" "$@" || ! "$D/db/verify-one.sh" "$ctx" "$id" "$cl"; then
|
||||
# копия или сверка не прошли: инстанс остаётся на старой базе, вернуть ему реплики после --scale-0
|
||||
[ -s "$prev" ] && [ "$(cat "$prev")" -ge 1 ] && kubectl --context "$ctx" -n loop patch mattermost "$id" --type merge -p "{\"spec\":{\"replicas\":$(cat "$prev")}}"
|
||||
echo "СТОП: $id остался на старой базе"; return 1
|
||||
fi
|
||||
[ -s "$prev" ] && [ "$(cat "$prev")" -ge 1 ] && export CUTOVER_REPLICAS=$(cat "$prev")
|
||||
"$D/db/cutover-one.sh" "$ctx" "$id" "$cl"
|
||||
"$D/db/bind.sh" "$ctx" "$id"
|
||||
}
|
||||
|
||||
[ $# -gt 0 ] && [ "$1" != -h ] && [ "$1" != help ] || { usage; exit 0; }
|
||||
. "$D/lib/common.sh" # KUBECONFIG и прочие настройки для всех подкоманд
|
||||
|
||||
case "${1:-}/${2:-}" in
|
||||
db/move) shift 2; confirm "Перенесу базу $2 на $3 (dump, verify, cutover, визор)." && LOOPCTL_YES=1 db_move "$@" ;;
|
||||
db/migrate) shift 2; confirm "Скопирую базу $2 на ${3:-?} (создам роль и базу, Job pg_dump|psql)." && exec "$D/db/migrate-one.sh" "$@" ;;
|
||||
db/verify) shift 2; exec "$D/db/verify-one.sh" "$@" ;;
|
||||
db/cutover) shift 2; confirm "Переключу $2 на новую базу (секрет, env CR, рестарт)." && exec "$D/db/cutover-one.sh" "$@" ;;
|
||||
db/bind) shift 2; exec "$D/db/bind.sh" "$@" ;;
|
||||
k8s/move) shift 2; exec "$D/k8s/move.sh" "$@" ;;
|
||||
k8s/rebind) shift 2; exec "$D/k8s/rebind.sh" "$@" ;;
|
||||
proxy/make) shift 2; exec "$D/k8s/proxy.sh" "$@" ;;
|
||||
proxy/traffic) shift 2; exec "$D/k8s/proxy-traffic.sh" "$@" ;;
|
||||
dns/*) shift 1; exec "$D/dns/dns.sh" "$@" ;;
|
||||
check/*) shift 1; exec "$D/check.sh" "$@" ;;
|
||||
*) usage; exit 1 ;;
|
||||
esac
|
||||
Reference in New Issue
Block a user