6 Commits

Author SHA1 Message Date
ilopez
632ad1d507 feat(gateway-api): ADR-060 Fase 1.1 — chart a HTTPRoute (Traefik + Gateway API)
All checks were successful
__APP_NAME__ — build & deploy / ¿Credenciales de build listas? (push) Successful in 1s
__APP_NAME__ — build & deploy / Calidad + build + push (push) Has been skipped
__APP_NAME__ — build & deploy / ¿Cluster del tenant listo? (push) Has been skipped
__APP_NAME__ — build & deploy / Helm upgrade --install (push) Has been skipped
Sincronizado desde repo IDP templates/ (CHART-SYNC-IDP-GITEA-DRIFT). Reemplaza el
Ingress (rke2-ingress-nginx, EOL marzo 2026) por HTTPRoute (Gateway API) adjunto al
Gateway tenant-gateway que crea stack-deployer (§3c). NetworkPolicy egress kube-system
-> traefik-system. FQDN DOT (ADR-082) preservado.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 21:58:56 -05:00
13b9fae61c chart 0.3.0: AddonClaim FUERA del chart Helm (ADR-066 del IDP)
Some checks failed
__APP_NAME__ — build & deploy / Calidad + build + push (push) Failing after 14s
__APP_NAME__ — build & deploy / Helm upgrade --install (push) Has been skipped
Bug en chart 0.2.x: AddonClaim era Helm hook pre-install,pre-upgrade
weight -10 SIN hook-delete-policy. El default Helm 3 es
before-hook-creation → borra el claim en cada upgrade → finalizer
cleanup-logical rotaba credenciales + atoraba release en pending-upgrade.

Cambios:
- helm/APP_NAME/templates/addonclaim.yaml eliminado.
- manifests/addonclaim.yaml creado con placeholders sed.
- scripts/pre-helm-detach.sh idempotente para migracion v1.0.0 → 1.1.0.
- .gitea/workflows/APP_NAME-build.yaml: 2 nuevos steps detach + apply
  AddonClaim entre kubeconfig y helm upgrade.
- Chart.yaml bump 0.2.0 → 0.3.0.
- README reescrito (3 pasos workflow + tabla hooks sin AddonClaim +
  seccion Por que FUERA del chart + opt-out actualizado).
- Comentarios stale del AddonClaim como hook -10 limpiados en
  networkpolicy.yaml, role-db-secret-reader.yaml, job-alembic-upgrade.yaml.

ADR-066 del IDP documenta la decision arquitectural completa.
2026-05-25 14:28:17 -05:00
ilopez
bba5720975 fix(chart): NetworkPolicy egress 0.0.0.0/0 :443+:6443 (RKE2/DO public IP DNAT)
Some checks failed
__APP_NAME__ — build & deploy / Calidad + build + push (push) Failing after 15s
__APP_NAME__ — build & deploy / Helm upgrade --install (push) Has been skipped
Validacion en cluster tenant DO destapo el issue: el Service `kubernetes` en
ns default tiene endpoint a la IP PUBLICA del Droplet:6443, no a una ClusterIP
intra-cluster. kube-proxy DNATea 10.43.0.1:443 -> public-ip:6443. Calico
aplica las NetworkPolicy egress rules contra la IP de DESTINO POST-DNAT, asi
que namespaceSelector "default" no matchea (no hay pod selector aplicable).

ipBlock 0.0.0.0/0 cubre ambos: apiserver public-ip:6443 + Harbor:443.

Trade-off de seguridad menor (egress permitido a IPs externas por 443/6443)
aceptable para Golden Path: las apps web necesitan llegar a apiserver y
posiblemente a HTTPS externos (APIs publicas). Endurecimiento P3 con
egress NetworkPolicy mas granular cuando haya use cases especificos.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 10:28:50 -05:00
ilopez
81b024edd6 fix(chart): NetworkPolicy como Helm hook weight -8 (no resource normal)
Some checks failed
__APP_NAME__ — build & deploy / Calidad + build + push (push) Failing after 14s
__APP_NAME__ — build & deploy / Helm upgrade --install (push) Has been skipped
Chicken-and-egg encontrado en smoke E2E DO (cluster 91c93c9c):
- ns 'apps' tiene default-deny NetworkPolicy entregada por stack-deployer.
- Job Alembic (pre-install hook) ejecuta InitContainer wait-for-secret que
  hace REST API call al kube-apiserver para chequear Secret.
- La NetworkPolicy del chart (que permite DNS + apiserver egress) estaba como
  RESOURCE NORMAL, asi que solo se aplicaba en la FASE PRINCIPAL del helm
  install, DESPUES de los hooks.
- Resultado: el InitContainer del hook quedaba bloqueado DNS por
  default-deny → curl timeout 240s → helm install fail → NetworkPolicy
  nunca se aplica.

Fix:
- Annotations 'helm.sh/hook: pre-install,pre-upgrade' + 'hook-weight: -8'
  + 'hook-delete-policy: before-hook-creation'.
- Weight ordering: -10 AddonClaim → -8 NetworkPolicy → -7 Role/RoleBinding
  → -5 SA → 0 Job Alembic.
- delete-policy: before-hook-creation (no hook-succeeded): el Deployment de
  la fase principal necesita la NP viva en runtime.
- Comentario en la regla egress :443 aclarando que cubre kube-apiserver
  (10.43.0.1) + Harbor (sin necesidad de regla adicional).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 10:13:03 -05:00
Coralware IDP CI
5d51971270 chore: migrar Ingress Traefik→NGINX + cascada wildcard cert (sync APERTURA COVE S3)
Some checks failed
__APP_NAME__ — build & deploy / build (push) Failing after 0s
__APP_NAME__ — build & deploy / helm-deploy (push) Has been skipped
2026-05-21 10:04:51 -05:00
fcec92ea1d feat: sincronizar scaffold completo del shape web-backend/python
Some checks failed
__APP_NAME__ — build & deploy / build (push) Failing after 0s
__APP_NAME__ — build & deploy / helm-deploy (push) Has been skipped
Sincroniza el scaffold canónico desde templates/web-backend-python/ del
repo IDP. Reemplaza el placeholder mínimo previo (.gitea/workflows/ci.yaml,
README.md, .gitignore, catalog-info.yaml) por el scaffold completo
documentado en ADR-053 §3:

- code/ — FastAPI app con /health (db check), /metrics, /demo estático,
  middleware correlation_id, settings Pydantic, db.py con SQLAlchemy
- code/alembic/ — migración inicial vacía + env.py usando MIGRATION_DATABASE_URL
- code/tests/ — pytest + httpx TestClient (test_health, test_demo)
- helm/APP_NAME/ — chart con Deployment, Service, IngressRoute Traefik,
  NetworkPolicy, ServiceMonitor, Job alembic-upgrade como hook
  pre-upgrade,pre-install (backoffLimit: 0)
- coralware-shape.yaml — manifiesto v1alpha1 del contrato del shape
- claim-mariadb.yaml — AddonClaim declarativo (uso futuro ADR-052)
- catalog-info.yaml — entidad Backstage actualizada
- .gitea/workflows/APP_NAME-build.yaml — invoca reusable workflow ADR-038
  + job helm-deploy con KUBECONFIG_TENANT_B64

Placeholders __APP_NAME__, __TIER__, __TENANT_ID__, __TENANT_ID_NODASHES__
serán sustituidos server-side por repo-provisioner cuando materialice el
template para un tenant (pendiente — ADR-053 §11.5).

El openspec/ del golden path NO se sincroniza al repo Gitea (gobernanza
interna de Coralware).

Refs: ADR-052, ADR-053, poc-nexobms.md (PoC NexoBMS Demetrio).
2026-05-06 17:48:13 -05:00