Добавить incus-sync.sh
This commit is contained in:
parent
de97b33530
commit
24c0cb7625
|
|
@ -0,0 +1,61 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
LOGFILE="/var/log/incus-sync.log"
|
||||||
|
NODES="node1 node2 node3"
|
||||||
|
|
||||||
|
echo "📡 [$0] Запуск службы Incus Sync..." >> "$LOGFILE"
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
echo "[$(date)] 🔄 Синхронизация запускается" >> "$LOGFILE"
|
||||||
|
|
||||||
|
for NODE in $NODES; do
|
||||||
|
echo "=== Обработка $NODE ===" >> "$LOGFILE"
|
||||||
|
|
||||||
|
if ! incus list ${NODE}: --format=json >/dev/null 2>&1; then
|
||||||
|
echo "$NODE недоступен, включаем контейнеры на storage1" >> "$LOGFILE"
|
||||||
|
|
||||||
|
for c in $(incus list --format=json | jq -r --arg NODE "$NODE" '.[] | select(.config["user.server"] == $NODE) | .name'); do
|
||||||
|
echo "Пробуем запустить $c на storage1" >> "$LOGFILE"
|
||||||
|
|
||||||
|
status=$(incus list "$c" --format=json | jq -r '.[0].status')
|
||||||
|
if [ "$status" = "Running" ]; then
|
||||||
|
echo "$c уже запущен — пропускаем" >> "$LOGFILE"
|
||||||
|
else
|
||||||
|
incus start "$c" >> "$LOGFILE" 2>&1 || echo "Не удалось запустить $c" >> "$LOGFILE"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
for c in $(incus list ${NODE}: --format=json | jq -r '.[] | select(.state.status == "Running") | .name'); do
|
||||||
|
echo "Копирую $c с $NODE" >> "$LOGFILE"
|
||||||
|
incus config set ${NODE}:$c user.server $NODE >> "$LOGFILE" 2>&1
|
||||||
|
|
||||||
|
if incus list --format=json | jq -r --arg c "$c" --arg NODE "$NODE" '.[] | select(.name == $c and .status == "Running" and .config["user.server"] == $NODE) | .name' | grep -q "$c"; then
|
||||||
|
echo "Контейнер $c работает на storage1 — переносим обратно на $NODE" >> "$LOGFILE"
|
||||||
|
|
||||||
|
echo "Останавливаем $c на storage1" >> "$LOGFILE"
|
||||||
|
incus stop $c >> "$LOGFILE" 2>&1 || true
|
||||||
|
|
||||||
|
if incus info ${NODE}:$c >/dev/null 2>&1; then
|
||||||
|
echo "Удаляем $c на $NODE" >> "$LOGFILE"
|
||||||
|
incus stop ${NODE}:$c --force >> "$LOGFILE" 2>&1 || true
|
||||||
|
incus delete ${NODE}:$c --force >> "$LOGFILE" 2>&1 || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Копируем $c -> $NODE" >> "$LOGFILE"
|
||||||
|
incus copy $c ${NODE}: >> "$LOGFILE" 2>&1 || echo "Ошибка при копировании $c обратно" >> "$LOGFILE"
|
||||||
|
|
||||||
|
echo "Запускаем $c на $NODE" >> "$LOGFILE"
|
||||||
|
incus start ${NODE}:$c >> "$LOGFILE" 2>&1 || echo "Не удалось запустить $c на $NODE" >> "$LOGFILE"
|
||||||
|
else
|
||||||
|
incus copy ${NODE}:$c local: --refresh >> "$LOGFILE" 2>&1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "[$(date)] ✅ Синхронизация завершена" >> "$LOGFILE"
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
|
||||||
Loading…
Reference in New Issue