149 lines
6.1 KiB
Markdown
149 lines
6.1 KiB
Markdown
## Enterprise Auto-Upgrade Playbook für SLES & RHEL
|
|
|
|
### Übersicht
|
|
Modulares, Enterprise-taugliches Ansible-Playbook für automatisierte Upgrades/Patching von SLES und RHEL. Enthält:
|
|
- Automatische OS-Erkennung und OS-spezifische Rollen (RHEL/SLES)
|
|
- Upgrade nach Hersteller-Best-Practices (dnf/yum, zypper)
|
|
- VMware-Snapshots für Backup/Rollback (vCenter API)
|
|
- SUSE Manager API: dynamische CLM-Zuweisung via `target_clm_version`
|
|
- Wartungsfenster-Handling, Preflight-Checks
|
|
- Smoke-Tests (HTTP/Port/DB, inkl. Oracle SID/Listener-Erkennung)
|
|
- Self-Healing (Service-Restarts, Cleanup, Netzwerk)
|
|
- Compliance-Checks (OpenSCAP, Lynis)
|
|
- Logging, Mail-Benachrichtigung (mailx), optional Slack
|
|
- CI/CD via Gitea + Woodpecker (OAuth), Collections-Lint + Dry-Run
|
|
|
|
### Verzeichnisstruktur (Auszug)
|
|
```
|
|
os-upgrade-automation/
|
|
├── ansible.cfg
|
|
├── docs/
|
|
│ ├── README.md
|
|
│ ├── CHANGELOG.md
|
|
│ └── Runbook_SelfService.md
|
|
├── playbook/
|
|
│ ├── group_vars/
|
|
│ │ ├── all.yml
|
|
│ │ └── vault.yml # Mit Ansible Vault verschlüsseln
|
|
│ ├── host_vars/
|
|
│ ├── playbook.yml
|
|
│ ├── requirements.yml
|
|
│ ├── servicenow_inventory.yml # Dynamic Inventory (ServiceNow)
|
|
│ └── roles/
|
|
│ ├── common/
|
|
│ ├── preflight_check/
|
|
│ ├── vmware_snapshot/
|
|
│ ├── suma_api_assign_clm/
|
|
│ ├── rhel_upgrade/
|
|
│ ├── sles_upgrade/
|
|
│ ├── post_upgrade/
|
|
│ ├── smoke_tests/
|
|
│ ├── self_healing/
|
|
│ └── compliance_check/
|
|
├── scripts/
|
|
│ ├── install_collections.sh
|
|
│ └── run_patch.sh
|
|
└── .woodpecker.yml
|
|
```
|
|
|
|
### Voraussetzungen
|
|
- Ansible (empfohlen ≥ 2.14)
|
|
- Collections: `community.vmware`, `servicenow.servicenow`, `community.general`
|
|
- vCenter-Zugriff (API), SUSE Manager API-Zugang
|
|
- Zielsysteme: SLES oder RHEL (ggf. via SUSE Manager, venv-salt-minion)
|
|
- Ansible Vault für Secrets (zwingend empfohlen) [[Speicherpräferenz]]
|
|
|
|
Installation Collections:
|
|
```
|
|
make deps
|
|
```
|
|
|
|
### Konfiguration
|
|
1) Secrets sicher ablegen (Vault)
|
|
- `playbook/group_vars/vault.yml` befüllen (ServiceNow, SUSE Manager, vCenter, SMTP, Slack, DB)
|
|
- Datei sofort verschlüsseln:
|
|
```
|
|
ansible-vault encrypt playbook/group_vars/vault.yml
|
|
```
|
|
|
|
2) Globale Variablen prüfen
|
|
- `playbook/group_vars/all.yml` enthält Standardwerte (u.a. Skip-Flags, Mail-Empfänger, Wartungsfenster, Log-Verzeichnis).
|
|
|
|
3) Dynamic Inventory (ServiceNow)
|
|
- `playbook/servicenow_inventory.yml` nutzt den ServiceNow-Inventory-Plugin.
|
|
- Erwartet in Vault: `servicenow_instance`, `servicenow_user`, `servicenow_pass`.
|
|
|
|
### Nutzung (lokal)
|
|
- Lint:
|
|
```
|
|
make lint
|
|
```
|
|
|
|
- Playbook ausführen (Beispiele):
|
|
```
|
|
# App-Gruppe patchen, Ziel-CLM setzen
|
|
make run APP=pdp-portal CLM=prod-2024-06 EXTRA="debug_mode=true"
|
|
|
|
# Direkter Aufruf
|
|
./scripts/run_patch.sh pdp-portal prod-2024-06 "skip_compliance=true skip_smoke_tests=false"
|
|
```
|
|
|
|
Wichtige Extra-Variablen / Skip-Flags:
|
|
- `target_clm_version` (z.B. `prod-2024-06`)
|
|
- `debug_mode=true|false`
|
|
- `skip_vmware_snapshot`, `skip_suma_api`, `skip_post_upgrade`
|
|
- `skip_smoke_tests`, `skip_self_healing`, `skip_compliance`
|
|
- `upgrade_security_only=true|false`
|
|
|
|
### Rollenüberblick
|
|
- `preflight_check`: Diskspace, Wartungsfenster, Erreichbarkeit, Channel-Sync, pyVmomi-Check
|
|
- `vmware_snapshot`: Snapshot anlegen, optional Revert, optional Cleanup
|
|
- `suma_api_assign_clm`: System dynamisch CLM-Channel zuordnen
|
|
- `rhel_upgrade` / `sles_upgrade`: OS-spezifisches Upgrade, Kernel-Erkennung, Reboot-Flag
|
|
- `post_upgrade`: Reboot (optional), Health-Check kritischer Dienste
|
|
- `smoke_tests`: HTTP/Port/DB, Oracle (SIDs/Listener dynamisch erkannt)
|
|
- `self_healing`: Dienst-Restarts, Disk-Cleanup, Netzwerk-Remediation
|
|
- `compliance_check`: OpenSCAP, Lynis, Reporting & Mail
|
|
- `common`: Logging, mailx-Konfiguration, Admin-Mail inkl. Log-Anhänge, Slack (optional)
|
|
|
|
### VMware Snapshot & Rollback
|
|
- Vor dem Upgrade wird ein Snapshot mit Zeitstempel erstellt.
|
|
- Bei Fehlern kann automatisch ein Rollback getriggert werden (`rollback: true`).
|
|
- Optionales automatisches Löschen alter Snapshots nach erfolgreichem Lauf (`snapshot_cleanup`).
|
|
|
|
### Logging & Benachrichtigung
|
|
- Logs in `log_dir` (Standard: `/var/log/auto-upgrade`).
|
|
- Admin-Mail an `linux_admins_mail` mit Log-Summary + Anhängen.
|
|
- Failsafe-Mail an App- und Host-Kontakte bei Fehler.
|
|
- Optional Slack-Benachrichtigung (wenn `slack_enabled` und `slack_token`).
|
|
|
|
### CI/CD (Gitea + Woodpecker)
|
|
1) Repo in Woodpecker aktivieren
|
|
- In `https://ci.pp1l.de` auf “Repos” → “Sync” → `os-upgrade-automation` (oder `PurePowerPh1l/os-upgrade-automation`) “Enable”.
|
|
|
|
2) Secrets in Woodpecker setzen
|
|
- Mindestens `ANSIBLE_VAULT_PASSWORD` (für CI-Läufe ohne Interaktion).
|
|
- Optional: `SERVICENOW_*`, `SUMA_*`, `VCENTER_*`, `SLACK_TOKEN`, SMTP-Variablen, DB-Testdaten.
|
|
|
|
3) Pipelines
|
|
- `.woodpecker.yml` enthält: `lint`, `dryrun`, manuell `run_preflight`, `run_patch`.
|
|
- Hinweis: Interaktive Prompts (`--ask-vault-pass`) funktionieren in CI nicht. Nutze stattdessen eine Secret-basierte Lösung (z.B. Secret als Datei schreiben und `--vault-password-file` verwenden). Passe die Pipeline bei Bedarf an.
|
|
|
|
4) OAuth/Troubleshooting
|
|
- “Unregistered Redirect URI”: Stelle sicher, dass die Gitea-OAuth-App `https://ci.pp1l.de/authorize` als Redirect-URI nutzt.
|
|
- “PKCE is required for public clients”: Gitea-OAuth-App als Confidential Client anlegen.
|
|
- “registration_closed”: In Woodpecker `WOODPECKER_OPEN=false`, erlaubte Nutzer via `WOODPECKER_ADMIN=<user1,user2>` whitelisten.
|
|
|
|
### Sicherheit
|
|
- Keine Secrets im Klartext: Alles in `playbook/group_vars/vault.yml` ablegen und per Vault verschlüsseln [[Speicherpräferenz]].
|
|
- Zugriffsdaten in CI ausschließlich als Secrets verwalten.
|
|
|
|
### Nützliche Links
|
|
- Gitea: `https://git.pp1l.de`
|
|
- Woodpecker CI: `https://ci.pp1l.de`
|
|
- Ansible VMware Snapshot Modul: `https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_guest_snapshot_module.html`
|
|
- SUSE Manager: `https://documentation.suse.com/suma/`
|
|
|
|
—
|
|
Fragen oder Wünsche? Gerne melden.
|