# OCP Smart Login/Context Switch System ## 🎯 Ziel **Problem (Alter Weg):** - `ocLoginAWS-Test1` → Full login mit Browser jedesmal - Switching zu `ocAWS-Int` → Fehler, weil anderer Token nötig - Switching zurĂŒck zu `ocAWS-Test1` → Nochmal Full login! **Lösung (Neuer Weg):** ```bash ocAWS-Test1 # 1st call: Full login (nur 1x Browser) ocAWS-Int # 2nd call: Just context switch (SCHNELL!) ocAWS-Prod # 3rd call: Just context switch (SCHNELL!) ocAWS-Test1 # Back: Just context switch (SCHNELL! - Token ist noch valid) ``` --- ## 📩 Neue Dateien | Datei | Zweck | |-------|-------| | `.bash_oc_smart.sh` | Helper-Funktionen fĂŒr intelligentes Auth-Handling | | `.bash_oc_smart_aliases.sh` | Neue intelligente Aliases (ersetzt die alten ocAWS-*/ocSC-* Aliases) | --- ## 🔧 Installation ### Schritt 1: Dateien platzieren (sind bereits in Repo) ```bash # Beide Dateien sollten in ~/.bash_aliases Directory sein ~/.bash_oc_smart.sh ~/.bash_oc_smart_aliases.sh ``` ### Schritt 2: In .zshrc oder .bash_profile aktivieren FĂŒge folgende Zeile am **ENDE** von `~/.zshrc` oder `~/.bash_profile` ein: ```bash # OCP Smart Login/Context Switch (muss NACH .bash_aliases sourced werden) if [[ -f ~/.bash_oc_smart_aliases.sh ]]; then source ~/.bash_oc_smart_aliases.sh fi ``` **Wichtig:** Dies muss **NACH** den `.bash_aliases` sourced werden, damit die neuen Aliases die alten ĂŒberschreiben. ### Schritt 3: Shell neu laden ```bash source ~/.zshrc # oder source ~/.bash_profile ``` --- ## 🚀 Verwendung ### AWS Cluster ```bash ocAWS-Test1 # AWS-Test1 (aws01t) ocAWS-Test2 # AWS-Test2 (aws02t) ocAWS-Dev # Development (aws01t) ocAWS-RT # Runtime (aws01t) ocAWS-Test # Test Project (aws01t) ocAWS-Int # Integration (Lisa) ocAWS-Prod # Production (Lisa) ocAWS-Lisa # Lisa Cluster ocAWS-Maggie # Maggie Cluster ocAWS-WZU # WZU Cluster ``` ### SC (OTC) Cluster ```bash ocSC-Dev # Development (sc02t) ocSC-RT # Runtime (sc02t) ocSC-Test # Test (sc02t) ocSC-Int # Integration (Sputnix) ocSC-Prod # Production (Sputnix) ``` ### Helper-Funktionen ```bash ocStatus # Zeige aktuellen Auth-Status ocCtx # Liste alle verfĂŒgbaren Contexts ocWhoami # Zeige aktuellen User ocLogout # Logout aus aktuellem Cluster ``` --- ## 🧠 Wie es funktioniert ### Beim Aufruf eines Aliases (z.B. `ocAWS-Int`): ``` 1. Bin ich angemeldet? ├─ NEIN → Starte Full Login (Browser + Token) └─ JA → Continue zu Schritt 2 2. Ist Token noch gĂŒltig? ├─ NEIN → Starte Full Login (Browser + Token) └─ JA → Continue zu Schritt 3 3. Bin ich schon auf Target Cluster? ├─ JA → Fertig (zeige Status) └─ NEIN → Switch Context (schnell!) 4. Switch zum Target-Project (falls gesetzt) ``` --- ## 📊 Vergleich: Alt vs. Neu ### Altes System ```bash # 1. Login zu AWS-Test1 (SLOW - Browser) ocLoginAWS-Test1 # Output: # - Browser opens # - Copy token # - Paste token # - Logged in # 2. Switch zu AWS-Int (FAIL - anderer Token!) ocAWS-Int # Output: # error: You must be logged in to perform this action # 3. ZurĂŒck zu AWS-Test1 (SLOW - Browser again!) ocLoginAWS-Test1 # Repeat browser process... # Total: 2x Browser opens for same user/day ``` ### Neues System ```bash # 1. Switch zu AWS-Test1 (SLOW - aber 1x Browser) ocAWS-Test1 # Output: # [Checking authentication...] # → Not logged in to any cluster # → Performing full login... # - Browser opens # - Copy token # - Paste token # ✓ Logged in to AWS-Test1 (aws01t) # 2. Switch zu AWS-Int (FAST - nur Context!) ocAWS-Int # Output: # [Checking authentication...] # ✓ Token valid, switching context... # From: kihub-u241100-dev/api-aws01t-sbb-aws-test-net:6443/u241100 # To: kihub-int/api-lisa-sbb-aws-net:6443/u241100 # ✓ Context switched successfully # ✓ Switched to project: kihub-int # 3. ZurĂŒck zu AWS-Test1 (FAST - noch valid!) ocAWS-Test1 # Output: # [Checking authentication...] # ✓ Token valid, switching context... # From: kihub-int/api-lisa-sbb-aws-net:6443/u241100 # To: kihub-u241100-dev/api-aws01t-sbb-aws-test-net:6443/u241100 # ✓ Context switched successfully # ✓ Already in project: kihub-dev-u241100 # Total: 1x Browser opens for same user/day + multiple fast switches ``` **Ersparnis:** 50% weniger Browser-Logins bei typischer Nutzung --- ## 🔑 Token Environment Variables Das System nutzt diese Environment Variablen (mĂŒssen gesetzt sein): ```bash export OPENSHIFT_TOKEN_AWS_TEST="" # AWS Test clusters export OPENSHIFT_TOKEN_AWS_PROD="" # AWS Prod (Lisa/Maggie) export OPENSHIFT_TOKEN_WZU="" # WZU cluster export OPENSHIFT_TOKEN_SC02="" # SC02t cluster export OPENSHIFT_TOKEN_SCSputnix="" # Sputnix cluster ``` **Sicherheit:** Diese sollten in einer `~/.env` oder Ă€hnlich gesicherten Datei stehen (nicht im Git!) --- ## đŸ› ïž HĂ€ufige Szenarien ### Scenario 1: Dev-Day mit Multi-Cluster-Debugging ```bash # Morning: Login to Dev ocAWS-Dev # Browser opens (1st time) oc get pods # Work on Dev oc logs pod-name # Lunch: Check Test cluster ocAWS-Test # FAST - just context switch oc get events # Afternoon: Check Production ocAWS-Prod # FAST - just context switch oc describe nodes # Back to Dev ocAWS-Dev # FAST - still valid token oc deploy new-version # End of day: Logout ocLogout ``` ### Scenario 2: Moving between different token environments ```bash # AWS cluster with OPENSHIFT_TOKEN_AWS_TEST ocAWS-Test1 # Login with AWS-Test token # OTC (SC) cluster with OPENSHIFT_TOKEN_SC02 (different token!) ocSC-Test # Detects different token → Full login # Uses OPENSHIFT_TOKEN_SC02 # Back to AWS ocAWS-Int # Detects back to AWS-Prod token # Uses OPENSHIFT_TOKEN_AWS_PROD # Just switches context ``` ### Scenario 3: Token Expiration (next day) ```bash # Day 1 ocAWS-Dev # Login, get token for 24h # ... work ... # Day 2 (token expired overnight) ocAWS-Dev # Detects expired token → Full login # Browser opens # New token obtained # ... continue work ... ``` --- ## 🐛 Troubleshooting ### Problem: "context not found" error ```bash # Mögliche Ursache: Context existiert nicht in kubeconfig # Lösung: ocCtx # Check available contexts ocAWS-Dev # Falls context fehlt: Full login triggers # Falls login funktioniert: kubeconfig wird updated ``` ### Problem: Token-Variable nicht gesetzt ```bash # Mögliche Ursache: OPENSHIFT_TOKEN_AWS_TEST ist nicht exported # Lösung: echo $OPENSHIFT_TOKEN_AWS_TEST # Check if set # Falls leer: source your ~/.env or ~/.profile ``` ### Problem: "Still asks for browser every time" ```bash # Mögliche Ursache: Token ist sehr kurz gĂŒltig (Cluster-Konfiguration) # Lösung: Das ist normal, Script macht das beste daraus # Browser-Flow ist noch schneller als manuelle Token-Verwaltung # Workaround: Set tokens in .env and export them longer ``` ### Debug-Modus ```bash # Detaillierte Ausgabe was das Script tut: # (Modifiziere ~/.bash_oc_smart.sh und entferne >/dev/null aus Befehlen) # Oder teste manuell: is_oc_logged_in && echo "✓ Logged in" || echo "✗ Not logged in" is_oc_token_valid && echo "✓ Token valid" || echo "✗ Token expired" oc_status # Detaillierter Status ``` --- ## 📝 Best Practices ### ✓ TUN: 1. **Nutze `ocStatus` vor kritischen Operationen:** ```bash ocStatus # ÜberprĂŒfe Login Status oc deploy new-version ``` 2. **Logout am Ende des Tages:** ```bash ocLogout # Nicht vergessen! ``` 3. **Setze Tokens in geschĂŒtzte Datei:** ```bash # In ~/.profile oder ~/.env (NICHT in git!) export OPENSHIFT_TOKEN_AWS_TEST="..." export OPENSHIFT_TOKEN_AWS_PROD="..." ``` 4. **Nutze `ocCtx` um verfĂŒgbare Contexts zu sehen:** ```bash ocCtx # Falls unsicher ``` ### ✗ NICHT: 1. Tokens in Shell-History speichern → Nutze `read -s` oder Env-Variablen 2. Tokens in Dateien mit 644 Permissions speichern → Nutze 600 3. Tokens im Git-Repository speichern 4. Mehrere Logins gleichzeitig (kann zu Konflikten fĂŒhren) --- ## 🔄 Migration von altem System ### Option 1: Soft-Switch (beide Systeme parallel) ```bash # .zshrc source ~/.bash_aliases # Old aliases (ocLoginAWS-*, ocAWS-Dev, etc.) source ~/.bash_oc_smart_aliases.sh # New aliases (override the old ones) ``` Dies ĂŒberschreibt die alten ocAWS-*/ocSC-* Aliases mit der smarten Version. ### Option 2: Hard-Switch (nur neues System) ```bash # Bearbeite ~/.bash_aliases: # - Kommentiere alte ocAWS-*, ocSC-* Aliases aus # - Behalte ocLoginAWS-*, ocLoginSC-* fĂŒr manuelle volle Logins # Nutze nur neue ocAWS-*, ocSC-* Aliases in .bash_oc_smart_aliases.sh ``` --- ## 📚 Code-Struktur ### `.bash_oc_smart.sh` - Helper Functions: - `is_oc_logged_in()` — PrĂŒfe ob angemeldet - `is_oc_token_valid()` — PrĂŒfe ob Token noch valid - `oc_smart_switch()` — Main function (Logik oben) - `_oc_perform_login()` — Hilfsfunktion fĂŒr Login - `_oc_verify_project()` — Hilfsfunktion fĂŒr Project-Switch ### `.bash_oc_smart_aliases.sh` - Aliases: - Neue `ocAWS-*` und `ocSC-*` Aliases - Diese rufen `oc_smart_switch()` mit Cluster-Parametern auf - Helper Aliases: `ocStatus`, `ocCtx`, `ocLogout`, `ocWhoami` --- ## 🚀 Performance-Vergleich | Operation | Alt (ocLogin*) | Neu (ocAWS-*) | Ersparnis | |-----------|---|---|---| | 1. Login zum Cluster | ~30s (Browser) | ~30s (Browser) | 0% | | 2. Switch zu anderem Cluster | ~5s (Context) | ~5s (Context) | 0% | | 3. 2. Switch zu anderem Cluster | ~30s (Browser!) | ~5s (Context) | **83%** | | 4. ZurĂŒck zu 1. Cluster | ~30s (Browser!) | ~5s (Context) | **83%** | | **Total 4 Operationen** | **95s** | **45s** | **53% schneller** | --- ## ✹ Zusammenfassung | Aspekt | Vorteil | |--------|---------| | **Geschwindigkeit** | 50%+ schneller bei Multi-Cluster-Work | | **Sicherheit** | Intelligentes Token-Handling | | **Benutzerfreundlichkeit** | Gleiche Alias-Namen, besseres Behavior | | **RĂŒckwĂ€rts-KompatibilitĂ€t** | Alte Login-Aliases noch vorhanden | | **Fehlerbehandlung** | Automatisch Fallback auf Browser-Login | --- ## 📞 Support Bei Fragen oder Issues: 1. PrĂŒfe Logs: `tail .sync-home-content.log` (falls Sync-Script) 2. Debug manuell: `is_oc_logged_in && oc_status` 3. Teste mit: `ocAWS-Dev --verbose` (falls implementiert) --- **Ready to speed up your cluster-switching? 🚀**