84 lines
2.7 KiB
Bash
84 lines
2.7 KiB
Bash
#!/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
|