# DNS Viewer V1 — Execução e versionamento **Responsável:** Cursor Agent · **Aprovado por:** Roger **Data:** 2026-06-25 **Spec:** [dns-viewer.md](../dns-viewer.md) · Rollback: [DNS-VIEWER-ROLLBACK.md](./DNS-VIEWER-ROLLBACK.md) --- ## Escopo desta execução | Fase | Incluída agora | Entregável | |------|----------------|------------| | V0 | ✅ baseline | `cloudflare_dns.py` + modal Desk (já existe) | | V1 | 📋 próximo deploy | API `GET /api/v1/dns/viewer/{domain}` | | V1b | 📋 | `dns-viewer.js` + migrar modal Desk | | V2–V4 | ⏳ futuro | OpenPanel, Console, Wizard | --- ## Checklist pré-deploy (obrigatório) ```bash # CT130 — tag git (usar SSHPASS se preflight/rollback a partir do Spec Hub) cd /opt/ligbox-spec-hub/repos/ligbox-ops-platform git tag -a dns-viewer-pre-v1-$(date +%Y%m%d) -m "Antes DNS Viewer V1" # VM122 — backup (CT130: export SSHPASS=805353) export SSHPASS='805353' # opcional — só se SSH key falhar bash specs/037-dns-multi-cloudflare-orchestration/deploy/scripts/preflight-dns-viewer.sh \ --host root@10.10.10.122 ``` --- ## Ficheiros versionados (monorepo) | Ficheiro | Fase | Notas | |----------|------|-------| | `projects/ops-desk/api/app/cloudflare_dns.py` | V0 | Não remover — provider CF | | `projects/ops-desk/api/app/dns_viewer.py` | V1 | **Novo** orquestrador | | `projects/ops-desk/api/app/openpanel_dns.py` | V2 | Novo — opcional | | `projects/ops-desk/api/app/main.py` | V1 | Rota viewer + flag | | `projects/ops-desk/api/app/permissions.py` | V1 | `can_read_dns_viewer` | | `projects/ops-desk/frontend/assets/dns-viewer.js` | V1b | **Novo** componente | | `projects/ops-desk/frontend/assets/app.js` | V1b | Integrar viewer | | `projects/ops-desk/frontend/index.html` | V1b | Cache bust `?v=` | | `projects/wizard/backend/app/services/dns_viewer.py` | V4 | Wizard variant | --- ## Deploy VM122 (após implementação V1/V1b) ```bash # CT130 ou laptop com rsync REPO=/opt/ligbox-spec-hub/repos/ligbox-ops-platform rsync -av --delete \ "$REPO/projects/ops-desk/api/app/" \ root@10.10.10.122:/opt/ligbox-ops-platform/api/app/ rsync -av \ "$REPO/projects/ops-desk/frontend/assets/" \ root@10.10.10.122:/opt/ligbox-ops-platform/frontend/assets/ ssh root@10.10.10.122 'cd /opt/ligbox-ops-platform && \ grep -q DNS_VIEWER_ENABLED .env || echo DNS_VIEWER_ENABLED=1 >> .env && \ docker compose -f docker-compose.mvp.yml build api frontend && \ docker compose -f docker-compose.mvp.yml up -d api frontend' ``` --- ## Validação pós-deploy ```bash bash specs/037-dns-multi-cloudflare-orchestration/deploy/scripts/verify-dns-viewer.sh \ --host 10.10.10.122 # Manual UI # Desk → Overview → tenant VM112 → domínio → secção DNS unificada # Browser devtools: zero SyntaxError em app.js / dns-viewer.js ``` --- ## Rollback Ver **[DNS-VIEWER-ROLLBACK.md](./DNS-VIEWER-ROLLBACK.md)** — ordem recomendada: 1. `DNS_VIEWER_ENABLED=0` (30 segundos) 2. Rollback frontend se UI partida 3. Rollback API se 500 4. `git revert` CT130 se necessário --- ## Registo de versões (preencher após cada deploy) | Data | Tag git | VM122 backup dir | Commit | Notas | |------|---------|------------------|--------|-------| | 2026-06-25 | `dns-viewer-pre-v1-20260625` | `.backups/dns-viewer-20260625-161839` | `7e4920a` | Pré-deploy | | 2026-06-25 | — | tag Docker `post-dns-viewer-v1-20260625` | _(working tree)_ | **V1+V1b deploy OK** · verify PASSED | --- ## Pendente V2+ - OpenPanel BIND provider - Console `console.ligbox.com.br/admin/dominio` - Wizard `GET /api/onboarding/dns/viewer/{domain}` - Formalizar `dns.viewer.read` em Spec 027