clean / centralize

This commit is contained in:
marcus hinz
2026-06-20 12:15:26 +02:00
parent 0b159bcefc
commit 6b6f49e820
19 changed files with 1469 additions and 27 deletions
+5
View File
@@ -1,6 +1,11 @@
{
"autoMemoryDirectory": "~/claude-projects/wuerth-plato/memory",
"permissions": {
"allow": [
"Edit(~/projects/fahrzeugeinrichtung-plato-backend/**)",
"Edit(~/projects/fahrzeugeinrichtung-plato-gitops/**)",
"Edit(~/claude-projects/wuerth-plato/**)"
],
"additionalDirectories": [
"~/projects/fahrzeugeinrichtung-plato-backend",
"~/projects/fahrzeugeinrichtung-plato-gitops"
+38
View File
@@ -0,0 +1,38 @@
{
"permissions": {
"allow": [
"Bash(npx nx *)",
"Bash(lsof -ti:3000)",
"Bash(xargs -r kill)",
"Bash(tee /tmp/plato-be.log)",
"Bash(python3 -)",
"Bash(npx tsc *)",
"Skill(code-review)",
"Bash(podman:*)",
"Bash(oc get:*)",
"Bash(oc describe:*)",
"Bash(oc status:*)",
"Bash(oc logs:*)",
"Bash(oc top:*)",
"Bash(oc project:*)",
"Bash(oc projects:*)",
"Bash(oc whoami:*)",
"Bash(oc version:*)",
"Bash(oc api-resources:*)",
"Bash(oc explain:*)"
],
"ask": [
"Bash(podman system reset:*)",
"Bash(podman system prune:*)",
"Bash(podman volume rm:*)",
"Bash(podman volume prune:*)",
"Bash(podman machine rm:*)",
"Bash(podman machine reset:*)"
],
"deny": [
"Bash(oc adm:*)",
"Bash(oc delete project:*)",
"Bash(oc delete namespace:*)"
]
}
}
+7
View File
@@ -0,0 +1,7 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
1. Dieses Modul ist Teil eines MonoRepos, das verschiedene — überwiegend Development- — Projekte bündelt.
2. Die eigentlichen Source- oder Ressource-Repos sind in der `settings.json` hinterlegt.
3. SAP-Zugriff (Basic Auth, Endpoint, Env→Secret/Overlay-Mapping): siehe `memory/sap-config.md`.
@@ -0,0 +1,19 @@
---
name: feedback_ort_zuerst
description: "Bei \"wo mache ich X?\"-Fragen sofort die konkrete UI-Stelle nennen, nicht durch Menüs jagen"
metadata:
node_type: memory
type: feedback
originSessionId: 03691a44-b7eb-4d9d-9e7c-5d5aae84e110
---
Marcus fragt bei UI/Tooling oft konkret "WO geht das?". Dann will er **die eine konkrete Stelle**, nicht eine Schritt-für-Schritt-Tour durch das Tool oder Vorbedingungen vorweg.
**Why:** Lange Navigationsanleitungen ("erst Actions, dann Run, dann Banner...") bei einer simplen Ortsfrage haben ihn massiv genervt ("RED DEUTSCH", "durch das komplette GitHub gejagt"). Kostet Zeit und Nerven.
**How to apply:**
- Ortsfrage → direkt der Ziel-Ort + der Knopf, in einem Satz. Z. B. "PR → Files changed → Review changes → Approve".
- Relevante Einschränkung in einem Halbsatz dazu (z. B. "eigenen PR kann man nicht approven"), aber nicht als Vorrede davorstellen.
- Keine "erst dies, dann das"-Ketten, wenn eine Stelle reicht.
**Zweiter Fehler im selben Vorgang:** Ich behauptete früh "Review Required ist fürs Deployen ignorierbar". Falsch — der witglobal `deploy-branch`-Workflow prüft `reviewDecision` und bricht mit `REVIEW_REQUIRED` ab, solange der PR nicht approved ist. Lehre: bei Aussagen über fremde Workflows erst den reusable workflow lesen, nicht aus dem Muster raten. Siehe [[feedback_evidence_first]].
@@ -0,0 +1,35 @@
---
name: project_prod_ist_stand
description: Prod (ocp-01 / 1401-plato-production) — Secrets (inkl. SAP) erledigt+aktiviert; einziger Blocker noch das to_be_replaced Image-Tag
metadata:
node_type: memory
type: project
originSessionId: 03691a44-b7eb-4d9d-9e7c-5d5aae84e110
---
Stand 2026-06-19, verifiziert direkt am Prod-Cluster (`api.ocp-01.wgn.wuerth.com`, Projekt `1401-plato-production`).
**Stand 2026-06-19 abends: Prod ist LIVE und voll erreichbar** — backend `0.38.4` 1/1 Running auf ocp-01, alle 3 Secrets (customer/postgres/sap) gemountet, ghcr-Pull funktioniert. Öffentliche URL **https://plato.witglobal.net** (Test: https://plato-test.witglobal.net auf ocp-dev01), zusätzlich zur alten fahrzeugeinrichtung-Route. OIDC-Login funktioniert.
**Custom-Routes + OIDC:** Routes als `route-public.yaml` je Overlay im gitops-Repo (commit `11ba61c`), edge/Redirect, host `plato.witglobal.net` bzw. `plato-test.witglobal.net` → backend-service:3000. Redirect-URI baut die App aus `req.headers.host` + fixem Pfad `/oauth/callback` (oidc.controller.ts `computeRedirectUri`). Beim IdP (PingFederate, strict byte-match, kein Trailing-Slash) **pro client_id** registriert: `https://plato.witglobal.net/oauth/callback` an `KONZ-PlaTo-Customer-PROD`, `https://plato-test.witglobal.net/oauth/callback` an `KONZ-PlaTo-Customer-DEV`. Kein Post-Logout-Redirect nötig.
PR `development → main` gemergt — `main` spiegelt den Prod-Stand. Go-live abgeschlossen.
Reihenfolge der Blocker, die fielen: (1) Secrets gesealt+aktiviert; (2) Dockerfile-Build-Bruch `crm.sqlite` raus → Image 0.38.4; (3) PR-Review REVIEW_REQUIRED approved; (4) **Namespace-Quota voll** (totes Frontend-Orphan-Deployment fraß 1 CPU/4Gi) → Frontend-Deployment/Service/Route gelöscht (war alter Split-Ansatz, Backend serviert FE-Assets selbst) → `oc rollout restart` → Pod startet.
**Quota-Warnung für später:** `default-resource-quotas` = 3 CPU / 12Gi hart. backend(1)+postgres(1) = 2, lässt nur 1 Slot Surge. Sobald ein zweiter Workload dazukommt (oder Rolling Update mit maxSurge), reicht es nicht → Quota anheben (Plattform) oder maxSurge=0.
**Historischer Ausgangsbefund (vor heute):**
1. **Image-Tag nie ersetzt** (offen). backend-/frontend-Pods ziehen wörtlich `…/backend:to_be_replaced` → ImagePullBackOff (Deployment 198d, 0/1). Der `.deploy to production`-Workflow (PR `development→main`, Kommentar `.deploy to production`) ist **nie gelaufen**. Das ist der gewählte Weg A, um es zu lösen — bringt echten Tag + klärt zugleich den offenen ghcr-Pull-Recht-Punkt auf Prod.
2. **Secrets — ERLEDIGT.** Alle drei SealedSecrets gegen ocp-01 gesealt, Entsiegelung auf Prod verifiziert (Synced=True), in `production/kustomization.yaml` aktiviert + in `backend.yaml` per `envFrom` referenziert:
- `plato-customer-secrets`, `plato-postgres-secrets` (commit `1ba047e`)
- `plato-sap-secrets` (commit `4601ea7`): SAP MUSS auf Prod (zentral). Werte = dieselben wie dev; dev-Klartext vom dev-Cluster gelesen, gegen ocp-01 neu gesealt. `SAP_URL` = dev-Endpoint `odatang9.wgn.wuerth.com/...` (User-Ansage „dieselben Werte"). Sealing-Rezept: `kubeseal --fetch-cert` geht auf Prod per Default-Pfad; dev-Secret per `oc --context=<dev> get secret -o json` → jq auf prod-ns umschreiben → `kubeseal --cert`.
- Beide gitops-Commits noch nicht gepusht (ahead 2; Push macht Marcus). Inhaltliche Werte-Korrektheit (richtige Prod-Creds?) erst sichtbar, wenn Backend hochkommt.
**Sauber/fertig auf Prod:** Namespace-Label `argocd.argoproj.io/managed-by=issp-gitops-developers` gesetzt, ArgoCD-App existiert und syncht. Plattformseite steht.
**Noch offen / nicht testbar:** ghcr-Pull-Berechtigung auf Prod (Pull via `default-dockercfg`, kein explizites `imagePullSecrets`) — scheitert aktuell am nicht-existenten Tag, nicht erkennbar an Auth. Zeigt sich erst mit echtem Tag. Außerdem: SAP-Secret fehlt für Prod komplett (dev hat `plato-sap-secrets.sealed.yaml`, prod nicht; `production/backend.yaml` referenziert SAP auch nicht).
Deploy-Mechanik siehe PDF `ressources/GitHub CICD to OpenShift.pdf`: Image nur auf `development` gebaut + wiederverwendet, Prod via PR-Kommentar `.deploy to production`, Prod-ArgoCD vermutlich `autoSync: false` → manueller Sync. Dev-Cluster = ocp-dev01 läuft sauber (backend 0.38.1).