402 lines
11 KiB
Markdown
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? 🚀**
|
|
|