Добавить 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