Добавить deploy_haproxy.sh
This commit is contained in:
1 parent
76e0725b1d
commit
a6899fe71e
1 file changed
+92
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
# ================= КОНФИГУРАЦИЯ =================
|
||||
BASE_DIR="/var/lib/depfile"
|
||||
STATUS_DIR="${BASE_DIR}/status"
|
||||
CHANGE_FILE="${STATUS_DIR}/change.me"
|
||||
HASH_FILE="${STATUS_DIR}/sha256.hash"
|
||||
|
||||
DEPLOY_DIR="${BASE_DIR}/deployment"
|
||||
SUCCESS_FILE="${DEPLOY_DIR}/success.me"
|
||||
|
||||
BACKUP_CFG="/etc/haproxy/backup/haproxy.cfg"
|
||||
TARGET_CFG="/etc/haproxy/haproxy.cfg"
|
||||
# ===============================================
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
|
||||
}
|
||||
|
||||
err() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [ОШИБКА] $*" >&2
|
||||
}
|
||||
|
||||
# 1. Проверяем наличие триггер-файла change.me
|
||||
if [ ! -f "${CHANGE_FILE}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
log "Обнаружен файл ${CHANGE_FILE}. Запуск процедуры развертывания..."
|
||||
|
||||
# 2. Проверяем наличие файла контрольной суммы
|
||||
if [ ! -f "${HASH_FILE}" ]; then
|
||||
err "Файл хеша ${HASH_FILE} не найден. Отмена операции."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. Валидация целостности change.me по sha256.hash
|
||||
log "Проверка контрольной суммы SHA-256..."
|
||||
if ! (cd "${STATUS_DIR}" && sha256sum -c --status "sha256.hash"); then
|
||||
err "Несовпадение контрольной суммы файла ${CHANGE_FILE}!"
|
||||
exit 2
|
||||
fi
|
||||
log "Контрольная сумма подтверждена."
|
||||
|
||||
# 4. Проверяем наличие резервной конфигурации
|
||||
if [ ! -f "${BACKUP_CFG}" ]; then
|
||||
err "Резервная копия не найдена: ${BACKUP_CFG}"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# 5. Тестирование синтаксиса бэкапа перед применением
|
||||
log "Валидация синтаксиса конфигурации из бэкапа..."
|
||||
if ! haproxy -c -f "${BACKUP_CFG}" > /dev/null 2>&1; then
|
||||
err "Резервная конфигурация содержит ошибки синтаксиса. Отмена применения."
|
||||
haproxy -c -f "${BACKUP_CFG}" || true
|
||||
exit 4
|
||||
fi
|
||||
log "Синтаксис резервного конфига корректен."
|
||||
|
||||
# 6. Замена рабочей конфигурации
|
||||
log "Копирование конфигурации в ${TARGET_CFG}..."
|
||||
cp -f "${BACKUP_CFG}" "${TARGET_CFG}"
|
||||
|
||||
if ! haproxy -c -f "${TARGET_CFG}" > /dev/null 2>&1; then
|
||||
err "Критическая ошибка: боевой файл не прошел повторную валидацию!"
|
||||
exit 5
|
||||
fi
|
||||
|
||||
# 7. Перезапуск службы haproxy
|
||||
log "Перезапуск службы haproxy..."
|
||||
if ! systemctl restart haproxy; then
|
||||
err "Не удалось перезапустить сервис haproxy!"
|
||||
exit 6
|
||||
fi
|
||||
log "Сервис haproxy успешно перезапущен."
|
||||
|
||||
# 8. Очистка каталога status
|
||||
log "Удаление директории ${STATUS_DIR}..."
|
||||
rm -rf "${STATUS_DIR}"
|
||||
|
||||
# 9. Формирование отчета об успешном выполнении
|
||||
mkdir -p "${DEPLOY_DIR}"
|
||||
chown depfile:depfile "${DEPLOY_DIR}"
|
||||
CURRENT_DATETIME=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
echo "deploment success {${CURRENT_DATETIME}}" > "${SUCCESS_FILE}"
|
||||
chown depfile:depfile "${SUCCESS_FILE}"
|
||||
log "Зафиксирован статус в ${SUCCESS_FILE}."
|
||||
|
||||
log "Процесс успешно завершен."
|
||||
exit 0
|
||||
Reference in new issue
Block a user