#!/bin/bash
#
# Skrypt do synchronizacji konfiguracji Home Assistant: TEST → PROD
# Użycie: ./sync-test-to-prod.sh
#
set -e
TEST_IP="192.168.50.151"
PROD_IP="192.168.50.242"
HA_CONFIG="/root/config"
BACKUP_DIR="./backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
echo "======================================"
echo "🔄 Synchronizacja HA: TEST → PROD"
echo "======================================"
echo "Test: $TEST_IP"
echo "Prod: $PROD_IP"
echo "======================================"
echo ""
# Tworzenie katalogu na backupy
mkdir -p "$BACKUP_DIR"
# Funkcja do wykonywania poleceń SSH na HA
ha_cmd() {
local host=$1
shift
sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${host} "$@"
}
# Sprawdzenie dostępu do środowisk
echo "🔍 Sprawdzanie dostępu do środowisk..."
if ! ha_cmd $TEST_IP "test -d $HA_CONFIG"; then
echo "❌ Brak dostępu do TEST ($TEST_IP)"
echo " Upewnij się, że:"
echo " 1. VM jest uruchomione"
echo " 2. SSH jest włączony w HA"
echo " 3. Hasło root jest ustawione"
exit 1
fi
if ! ha_cmd $PROD_IP "test -d $HA_CONFIG"; then
echo "❌ Brak dostępu do PROD ($PROD_IP)"
exit 1
fi
echo "✅ Dostęp do obu środowisk OK"
echo ""
# Backup produkcji przed zmianami
echo "💾 Backup produkcji przed zmianami..."
PROD_BACKUP="$BACKUP_DIR/prod_backup_${TIMESTAMP}.tar.gz"
ha_cmd $PROD_IP "cd /root && tar czf - config/" > "$PROD_BACKUP"
echo "✅ Backup zapisany: $PROD_BACKUP"
echo ""
# Lista plików do synchronizacji
echo "📋 Pliki do synchronizacji:"
ha_cmd $TEST_IP "cd $HA_CONFIG && ls -lh *.yaml *.json 2>/dev/null | awk '{print \$9, \$5}'" || true
echo ""
# Potwierdzenie użytkownika
read -p "❓ Czy chcesz kontynuować synchronizację? (tak/nie): " confirm
if [ "$confirm" != "tak" ]; then
echo "❌ Anulowano"
exit 0
fi
# Synchronizacja konfiguracji
echo ""
echo "🔄 Synchronizacja plików konfiguracyjnych..."
# Pliki do synchronizacji (dodaj/usuń według potrzeb)
CONFIG_FILES=(
"configuration.yaml"
"automations.yaml"
"scripts.yaml"
"scenes.yaml"
"groups.yaml"
"customize.yaml"
"secrets.yaml"
)
TEMP_DIR=$(mktemp -d)
for file in "${CONFIG_FILES[@]}"; do
if ha_cmd $TEST_IP "test -f $HA_CONFIG/$file"; then
echo " 📄 $file"
ha_cmd $TEST_IP "cat $HA_CONFIG/$file" > "$TEMP_DIR/$file"
cat "$TEMP_DIR/$file" | ha_cmd $PROD_IP "cat > $HA_CONFIG/$file"
else
echo " ⚠️ $file - nie znaleziono w TEST"
fi
done
# Synchronizacja katalogów (opcjonalnie)
echo ""
echo "📁 Synchronizacja katalogów custom_components, themes, www..."
for dir in "custom_components" "themes" "www"; do
if ha_cmd $TEST_IP "test -d $HA_CONFIG/$dir"; then
echo " 📁 $dir/"
# Usunięcie starego katalogu na PROD
ha_cmd $PROD_IP "rm -rf $HA_CONFIG/$dir"
# Utworzenie archiwum na TEST
ha_cmd $TEST_IP "cd $HA_CONFIG && tar czf - $dir/" > "$TEMP_DIR/${dir}.tar.gz"
# Rozpakowanie na PROD
cat "$TEMP_DIR/${dir}.tar.gz" | ha_cmd $PROD_IP "cd $HA_CONFIG && tar xzf -"
fi
done
# Czyszczenie
rm -rf "$TEMP_DIR"
echo ""
echo "♻️ Restart Home Assistant na PROD..."
ha_cmd $PROD_IP "ha core restart" || ha_cmd $PROD_IP "systemctl restart home-assistant@homeassistant.service" || true
echo ""
echo "✅ Synchronizacja zakończona pomyślnie!"
echo ""
echo "======================================"
echo "📊 Podsumowanie"
echo "======================================"
echo "Backup PROD: $PROD_BACKUP"
echo "Data sync: $(date)"
echo ""
echo "🌐 Sprawdź produkcję:"
echo " http://${PROD_IP}:8123"
echo ""
echo "↩️ Aby przywrócić backup:"
echo " ./restore-backup.sh $PROD_BACKUP"
echo "======================================"