Files
mac-home/OCP-SMART-LOGIN.md
T
2026-09-28 19:08:53 +02:00

402 lines
11 KiB
Markdown

# 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="<your-token>" # AWS Test clusters
export OPENSHIFT_TOKEN_AWS_PROD="<your-token>" # AWS Prod (Lisa/Maggie)
export OPENSHIFT_TOKEN_WZU="<your-token>" # WZU cluster
export OPENSHIFT_TOKEN_SC02="<your-token>" # SC02t cluster
export OPENSHIFT_TOKEN_SCSputnix="<your-token>" # 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? 🚀**