#!/usr/bin/env bash # User-data template. build_asterisk_userdata.py prepends the image and config payloads. set -euo pipefail : "${ASTERISK_IMAGE:?generated user-data must set an immutable Asterisk image digest}" : "${HTTP_CONF_B64:?missing http.conf payload}" : "${ARI_CONF_B64:?missing ari.conf payload}" : "${PJSIP_CONF_B64:?missing pjsip.conf payload}" : "${RTP_CONF_B64:?missing rtp.conf payload}" : "${EXTENSIONS_CONF_B64:?missing extensions.conf payload}" ASTERISK_CONFIG_DIR="/opt/agent-call/asterisk/generated" ASTERISK_CONFIG_GID="${ASTERISK_CONFIG_GID:-1000}" install -d -m 0750 "$ASTERISK_CONFIG_DIR" write_config() { local name="$1" payload="$2" path="$ASTERISK_CONFIG_DIR/$1" printf '%s' "$payload" | base64 --decode >"$path" chgrp "$ASTERISK_CONFIG_GID" "$path" chmod 0640 "$path" } write_config http.conf "$HTTP_CONF_B64" write_config ari.conf "$ARI_CONF_B64" write_config pjsip.conf "$PJSIP_CONF_B64" write_config rtp.conf "$RTP_CONF_B64" write_config extensions.conf "$EXTENSIONS_CONF_B64" if ! command -v docker >/dev/null 2>&1; then export DEBIAN_FRONTEND=noninteractive while fuser /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock >/dev/null 2>&1; do sleep 5 done until apt-get update; do sleep 10 done until apt-get install -y ca-certificates curl docker.io; do sleep 10 done fi systemctl daemon-reload systemctl enable --now docker until docker info >/dev/null 2>&1; do sleep 5 done until docker pull "$ASTERISK_IMAGE"; do sleep 15 done docker rm -f agent-call-asterisk >/dev/null 2>&1 || true docker volume create agent-call-recordings >/dev/null docker run -d \ --name agent-call-asterisk \ --network host \ --restart unless-stopped \ --stop-timeout 60 \ --log-opt max-size=10m \ --log-opt max-file=3 \ -v "$ASTERISK_CONFIG_DIR/http.conf:/etc/asterisk/http.conf:ro" \ -v "$ASTERISK_CONFIG_DIR/ari.conf:/etc/asterisk/ari.conf:ro" \ -v "$ASTERISK_CONFIG_DIR/pjsip.conf:/etc/asterisk/pjsip.conf:ro" \ -v "$ASTERISK_CONFIG_DIR/rtp.conf:/etc/asterisk/rtp.conf:ro" \ -v "$ASTERISK_CONFIG_DIR/extensions.conf:/etc/asterisk/extensions.conf:ro" \ -v agent-call-recordings:/var/spool/asterisk/recording \ "$ASTERISK_IMAGE" ready=0 for _ in $(seq 1 60); do if docker exec agent-call-asterisk asterisk -rx 'core show version' >/dev/null 2>&1; then ready=1 break fi sleep 2 done if [[ "$ready" != 1 ]]; then echo 'Asterisk did not become CLI-ready; inspect docker logs' >&2 exit 1 fi docker exec agent-call-asterisk asterisk -rx 'pjsip set logger on' docker exec agent-call-asterisk asterisk -rx 'pjsip show endpoint provider-primary' install -d -m 0750 /var/lib/agent-call date -u +%Y-%m-%dT%H:%M:%SZ >/var/lib/agent-call/bootstrap.done chmod 0600 /var/lib/agent-call/bootstrap.done