|
|
||
|---|---|---|
| .github | ||
| docs | ||
| playbook | ||
| scripts | ||
| .ansible-lint | ||
| .github-workflows-ci.yml | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .pre-commit-config.yaml | ||
| .woodpecker.yml | ||
| CONTRIBUTING.md | ||
| Makefile | ||
| ansible.cfg | ||
docs/README.md
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
- Secrets sicher ablegen (Vault)
playbook/group_vars/vault.ymlbefüllen (ServiceNow, SUSE Manager, vCenter, SMTP, Slack, DB)- Datei sofort verschlüsseln:
ansible-vault encrypt playbook/group_vars/vault.yml
- Globale Variablen prüfen
playbook/group_vars/all.ymlenthält Standardwerte (u.a. Skip-Flags, Mail-Empfänger, Wartungsfenster, Log-Verzeichnis).
- Dynamic Inventory (ServiceNow)
playbook/servicenow_inventory.ymlnutzt 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|falseskip_vmware_snapshot,skip_suma_api,skip_post_upgradeskip_smoke_tests,skip_self_healing,skip_complianceupgrade_security_only=true|false
Rollenüberblick
preflight_check: Diskspace, Wartungsfenster, Erreichbarkeit, Channel-Sync, pyVmomi-Checkvmware_snapshot: Snapshot anlegen, optional Revert, optional Cleanupsuma_api_assign_clm: System dynamisch CLM-Channel zuordnenrhel_upgrade/sles_upgrade: OS-spezifisches Upgrade, Kernel-Erkennung, Reboot-Flagpost_upgrade: Reboot (optional), Health-Check kritischer Dienstesmoke_tests: HTTP/Port/DB, Oracle (SIDs/Listener dynamisch erkannt)self_healing: Dienst-Restarts, Disk-Cleanup, Netzwerk-Remediationcompliance_check: OpenSCAP, Lynis, Reporting & Mailcommon: 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_mailmit Log-Summary + Anhängen. - Failsafe-Mail an App- und Host-Kontakte bei Fehler.
- Optional Slack-Benachrichtigung (wenn
slack_enabledundslack_token).
CI/CD (Gitea + Woodpecker)
- Repo in Woodpecker aktivieren
- In
https://ci.pp1l.deauf “Repos” → “Sync” →os-upgrade-automation(oderPurePowerPh1l/os-upgrade-automation) “Enable”.
- 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.
- Pipelines
.woodpecker.ymlenthält:lint,dryrun, manuellrun_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-fileverwenden). Passe die Pipeline bei Bedarf an.
- OAuth/Troubleshooting
- “Unregistered Redirect URI”: Stelle sicher, dass die Gitea-OAuth-App
https://ci.pp1l.de/authorizeals 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 viaWOODPECKER_ADMIN=<user1,user2>whitelisten.
Sicherheit
- Keine Secrets im Klartext: Alles in
playbook/group_vars/vault.ymlablegen 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.