42 lines
1.0 KiB
Bash
Executable File
42 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
# ------------------------------------------------------------
|
|
# Ansible Rocky production patching wrapper
|
|
# Intended to be run by systemd service/timer
|
|
# ------------------------------------------------------------
|
|
|
|
ANSIBLE_PROJECT="/opt/ansible"
|
|
VENV_PATH="${ANSIBLE_PROJECT}/.venv"
|
|
|
|
PLAYBOOK="${ANSIBLE_PROJECT}/playbooks/update-rocky-prod.yml"
|
|
LOCK_FILE="/tmp/update-rocky-prod.lock"
|
|
|
|
ANSIBLE_PLAYBOOK="${VENV_PATH}/bin/ansible-playbook"
|
|
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
|
|
}
|
|
|
|
fail() {
|
|
log "ERROR: $*"
|
|
exit 1
|
|
}
|
|
|
|
log "Starting Rocky production patching"
|
|
|
|
[[ -d "$VENV_PATH" ]] || fail "Python virtual environment not found: $VENV_PATH"
|
|
[[ -x "$ANSIBLE_PLAYBOOK" ]] || fail "ansible-playbook not found or not executable: $ANSIBLE_PLAYBOOK"
|
|
[[ -f "$PLAYBOOK" ]] || fail "Playbook not found: $PLAYBOOK"
|
|
|
|
(
|
|
flock -n 200 || fail "Another patching run is already active"
|
|
|
|
cd "$ANSIBLE_PROJECT"
|
|
|
|
"$ANSIBLE_PLAYBOOK" \
|
|
"$PLAYBOOK"
|
|
|
|
) 200>"$LOCK_FILE"
|
|
|
|
log "Finished Rocky production patching" |