OBJ-APPMANAGER-WETOPI3-001: app-manager en el cluster d¶
Objective ID: OBJ-APPMANAGER-WETOPI3-001 Status: active (fase DP — despliegue en d en curso) Drafted by: Lead (OWN) con el operador como Architect — Owned by: platform
Outcome (QUÉ éxito)¶
app-manager (rama wetopi3/app-manager-rke2) corre en el sandbox d desplegado
por Argo CD, ejecutando las 26 operaciones de wepod contra la API de
Kubernetes (sin Ansible), consumiendo eventos RabbitMQ y publicando
…manager.event.done/…manager.error con el contrato externo intacto. El
runtime de c (app-api + app-manager + broker en la red de c) queda sin
impacto — convivencia indefinida.
Context (POR QUÉ)¶
- app-manager 9.2.0 corre en Swarm
c: worker headless que consumeprod:c.manager.tasksy ejecuta playbooks Ansible por SSH contra hosts Swarm. Ancla productiva verificada:9.2.0@sha256:79c6291b…(commit 1caeb58). - El cluster
d(RKE2 v1.36.3) es la nueva plataforma: GitOps por Argo CD, secretos por Infisical, Cilium, registry sin desplegar (Zot PLANNED). - El operador fijó tres decisiones de estrategia (ver ADR-0021): d como sandbox de iteración, sin canary (revocado 2026-09-09), transición productiva de wepods c→d diferida a objetivo propio.
Decisions (resumen; el detalle vive en ADR-0021)¶
- D1: sandbox-first — todo tipo de pruebas directamente sobre d.
- D2: sin Ansible en d — adapter k8s nativo (StatefulSet/PVC/Secret vía API);
dominio (
get-playbook-config-command.js) intacto; contrato de eventos sin cambios. - D3: build = CI del repo (GitLab tags para c; GitHub Actions→GHCR para la línea k8s, base pública node:24.4-bookworm); despliegue = solo Git→Argo CD.
- D4: secretos por Infisical (trío v1beta1 Connection+Auth+StaticSecret), valores solo en el vault; cero secretos en Git.
- D5: consumirá
prod:d.manager.tasks(prefijo por DCWETOPI_MANAGER_DOMAIN=d) y publicará errores enprod:d.manager.error— pendiente ruta de red d↔broker.
Acceptance criteria (DONE)¶
- Pod app-manager Running/Healthy en d (Argo Synced), imagen digest-pinned GHCR.
- Las 30 operaciones/eventos con specs de caracterización (DP-05) y ejecución real vía adapter k8s (DP-06) — suite verde por evento.
- E2E en d: evento controlado → consumido → efecto en un wepod de prueba
(StatefulSet) →
done/errorcorrecto. csin impacto:prod:c.manager.*con sus 3 consumers vivos (verificado 2026-09-10), app-api intacto.- Sin Ansible/SSH en el runtime de d (limpieza post-DP-06).
- Documentation Impact Assessment cerrado: este OBJ + ADR-0021 + ficha SVC cuando el servicio sea operativo.
Verification contract¶
- AC1:
kubectl -n wetopi-prod get pods+ Argo app Synced/Healthy + digest de la imagen = digest del build (evidencia en la tarjeta DP-03). - AC2: salida real de la suite Jasmine por evento (tarjeta DP-05/DP-06).
- AC3: IDs de mensaje + estado del wepod de prueba (kubectl) + mensaje publicado.
- AC4: recuento de consumers en
prod:c.manager.tasks(=3, DP-00 probe). - AC5: grep Ansible en el Dockerfile/directorio server (cero referencias runtime).
- AC6: PRs merged en wetopi-knowledge (this repo).
Constraints¶
- Guardrails (8 puertas): toda opción que suba complejidad = DECISIÓN REQUERIDA.
- No tocar las queues de c salvo lectura pasiva de verificación.
- Merge de PRs: gate exclusivo del operador.
- Secretos: solo por referencia (paths del vault), jamás valores.
Boundaries / Out of scope¶
- Transición productiva de wepods c→d (objetivo propio futuro).
- Migración del broker RabbitMQ a d (objetivo futuro declarado; el broker de c es TEMPORAL).
- app-api permanece en c.
- Retirada del runtime de c.
Promotion matrix¶
- Al cierre (V-07): OBJ → completed; decisiones → ADR-0021 (accepted); ficha SVC-APP-MANAGER-D creada; REC final en records/; lecciones → skills.