Files
homelab/active/aws_route53/sync_unifi_records.sh
ducoterra f2015e2c71
All checks were successful
Podman DDNS Image / build-and-push-ddns (push) Successful in 1m3s
checkpoint commit
2026-05-05 06:26:40 -04:00

76 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# --- Configuration ---
PYTHON_SCRIPT="active/aws_route53/unifi_to_aws.py"
ZONE_ID_FILE="active/aws_route53/secrets/reeselink-zoneid"
RECORDS_FILE="active/aws_route53/secrets/unifi_reeselink_records.json"
# --- Colors for logging ---
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# --- Logging Function ---
log() {
echo -e "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}
error_exit() {
echo -e "[$(date +'%Y-%m-%d %H:%M:%S')] ${RED}ERROR: $1${NC}" >&2
exit 1
}
# --- 1. Pre-flight Checks ---
log "${YELLOW}Starting Route53 update process...${NC}"
if [[ ! -f "$PYTHON_SCRIPT" ]]; then
error_exit "Python script not found at $PYTHON_SCRIPT"
fi
if [[ ! -f "$ZONE_ID_FILE" ]]; then
error_exit "Zone ID file not found at $ZONE_ID_FILE"
fi
# --- 2. Run Python Script ---
log "Running $PYTHON_SCRIPT to generate JSON records..."
# Execute the python script
python "$PYTHON_SCRIPT"
# Check the exit code of the python script
if [[ $? -eq 0 ]]; then
log "${GREEN}Python script executed successfully.${NC}"
else
error_exit "Python script failed. Aborting AWS update to prevent corrupting DNS."
fi
# Verify the output file actually exists after the python run
if [[ ! -f "$RECORDS_FILE" ]]; then
error_exit "Python script reported success, but $RECORDS_FILE was not found."
fi
# --- 3. Update Route53 ---
# Read the Zone ID from the secret file
ZONE_ID=$(cat "$ZONE_ID_FILE" | tr -d '\n\r ')
if [[ -z "$ZONE_ID" ]]; then
error_exit "Zone ID file is empty or could not be read."
fi
log "Updating Route53 records for Zone ID: $ZONE_ID..."
# Run the AWS CLI command
# Using file:// prefix as required by AWS CLI for local files
aws route53 change-resource-record-sets \
--hosted-zone-id "$ZONE_ID" \
--change-batch "file://$RECORDS_FILE"
# Check the exit code of the AWS command
if [[ $? -eq 0 ]]; then
log "${GREEN}Route53 records updated successfully!${NC}"
else
error_exit "AWS CLI command failed. Check your AWS credentials and JSON formatting."
fi
log "${GREEN}Process complete.${NC}"