Files
b2bcall/infrastructure/docker/asterisk-entrypoint.sh
B2BCall Bootstrap cf3fc4b3ef feat: add structured versioned dialplan and asterisk admin
- packages/database: DialplanEntry + DialplanVersion (schema/config
  gerado, nunca dialplan cru vindo do usuario)
- apps/api/src/dialplan: DialplanService gera extensions a partir de
  entradas estruturadas (campos com allowlist estrita de caracteres),
  escreve em arquivo compartilhado via volume Docker 'dialplan-generated'
  entre api e asterisk, recarrega via AMI ('dialplan reload') e valida
  checando 'dialplan show <contexto>' por marcadores de erro. Falha na
  validacao dispara rollback automatico para a versao anterior; rollback
  manual tambem disponivel para qualquer versao no historico
- infrastructure/asterisk: extensions.conf agora inclui o arquivo gerado
  pela aplicacao; entrypoint garante que ele existe (vazio) no primeiro
  boot antes da primeira publicacao
- apps/api/src/asterisk-admin: status (AMI + heartbeat), module show, e
  diagnostico com ALLOWLIST ESTRITA de comandos exatos (nunca shell
  arbitraria) — agente.md secao 22

Testado ponta a ponta contra o Asterisk real: dialplan publicado fica
ativo imediatamente sem restart (confirmado via 'dialplan show'),
comando de diagnostico fora da allowlist rejeitado com 400.
2026-08-27 13:14:50 -03:00

42 lines
1.5 KiB
Bash

#!/bin/bash
# Renderiza os templates de configuração (que contêm variáveis ${VAR}) usando
# as variáveis de ambiente do container, para nunca versionar segredos em
# texto puro nos arquivos .conf. /etc/asterisk já vem populado pelo `make
# samples` no build da imagem — aqui só sobrepomos/adicionamos os arquivos
# específicos do B2BCall (o restante dos samples permanece intacto).
set -euo pipefail
CONFIG_SRC=/etc/asterisk-templates
CONFIG_DST=/etc/asterisk
mkdir -p "$CONFIG_DST"
# odbc.ini é configuração do sistema (unixODBC), não do Asterisk.
if [ -e "$CONFIG_SRC/odbc.ini.tpl" ]; then
envsubst < "$CONFIG_SRC/odbc.ini.tpl" > /etc/odbc.ini
fi
for tpl in "$CONFIG_SRC"/*.conf.tpl; do
[ -e "$tpl" ] || continue
name="$(basename "$tpl" .tpl)"
envsubst < "$tpl" > "$CONFIG_DST/$name"
done
for f in "$CONFIG_SRC"/*.conf; do
[ -e "$f" ] || continue
name="$(basename "$f")"
cp "$f" "$CONFIG_DST/$name"
done
# extensions.conf inclui este arquivo (dialplan gerado pela aplicação) —
# precisa existir mesmo vazio no primeiro boot, antes de a API publicar
# a primeira versão (ver DialplanService).
mkdir -p /etc/asterisk-generated
if [ ! -e /etc/asterisk-generated/b2bcall-dialplan.conf ]; then
echo "; vazio até a primeira publicação em Telefonia -> Dialplan" > /etc/asterisk-generated/b2bcall-dialplan.conf
fi
chown -R asterisk:asterisk "$CONFIG_DST" /var/lib/asterisk /var/log/asterisk /var/spool/asterisk /var/run/asterisk /etc/asterisk-generated
exec "$@"