Files

111 lines
3.0 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
set -euo pipefail
# TP-Link Omada Controller Setup Script
CONTROLLER="${OMADA_CONTROLLER:-}"
ADMIN_USER="${OMADA_ADMIN:-admin}"
ADMIN_PASSWORD="${OMADA_PASSWORD:-}"
SITE_NAME="${SITE_NAME:-}"
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*" >&2
}
error() {
log "ERROR: $*"
exit 1
}
check_prerequisites() {
if [ -z "${CONTROLLER}" ]; then
error "OMADA_CONTROLLER environment variable is required"
fi
if [ -z "${ADMIN_PASSWORD}" ]; then
error "OMADA_PASSWORD environment variable is required"
fi
if ! command -v curl &> /dev/null; then
error "curl is required but not installed"
fi
}
test_controller_connectivity() {
log "Testing connectivity to Omada Controller at ${CONTROLLER}..."
if curl -k -s --connect-timeout 5 "https://${CONTROLLER}:8043" > /dev/null; then
log "Controller is reachable"
return 0
else
error "Cannot reach controller at ${CONTROLLER}:8043"
fi
}
verify_authentication() {
log "Verifying authentication..."
RESPONSE=$(curl -k -s -X POST "https://${CONTROLLER}:8043/api/v2/login" \
-H "Content-Type: application/json" \
-d "{\"username\":\"${ADMIN_USER}\",\"password\":\"${ADMIN_PASSWORD}\"}")
if echo "${RESPONSE}" | grep -q "token"; then
log "Authentication successful"
return 0
else
error "Authentication failed. Please check credentials."
fi
}
create_site() {
if [ -z "${SITE_NAME}" ]; then
log "SITE_NAME not provided, skipping site creation"
return 0
fi
log "Creating site: ${SITE_NAME}..."
# Get authentication token
TOKEN_RESPONSE=$(curl -k -s -X POST "https://${CONTROLLER}:8043/api/v2/login" \
-H "Content-Type: application/json" \
-d "{\"username\":\"${ADMIN_USER}\",\"password\":\"${ADMIN_PASSWORD}\"}")
TOKEN=$(echo "${TOKEN_RESPONSE}" | grep -o '"token":"[^"]*' | cut -d'"' -f4)
if [ -z "${TOKEN}" ]; then
error "Failed to get authentication token"
fi
# Create site
SITE_RESPONSE=$(curl -k -s -X POST "https://${CONTROLLER}:8043/api/v2/sites" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d "{\"name\":\"${SITE_NAME}\",\"timezone\":\"UTC\"}")
if echo "${SITE_RESPONSE}" | grep -q "id"; then
SITE_ID=$(echo "${SITE_RESPONSE}" | grep -o '"id":"[^"]*' | cut -d'"' -f4)
log "Site created successfully with ID: ${SITE_ID}"
else
log "Warning: Site creation may have failed or site already exists"
fi
}
main() {
log "Starting Omada Controller setup..."
check_prerequisites
test_controller_connectivity
verify_authentication
create_site
log "Omada Controller setup completed!"
log ""
log "Next steps:"
log "1. Configure access points: ./provision-ap.sh"
log "2. Create SSIDs: ./create-ssid.sh"
log "3. Set up network policies: ./create-policy.sh"
}
main "$@"