Salt Formulas: Configuration as Code (Artikel 170)
Modularisierung der Automatisierung mit Salt Formulas. Erfahren Sie, wie Sie komplexe Stacks wie SAP oder High Availability mittels fertiger Formeln standardisiert bereitstellen.
# Salt Formulas Masterclass: Professionelle Baukästen für die IT
TL;DR / Management Summary Wer komplexe Dienste wie einen PostgreSQL-Cluster oder ein SAP HANA-System manuell mit Salt-States schreibt, verschwendet Zeit. Salt Formulas sind wiederverwendbare, vorkonfigurierte State-Sammlungen (vergleichbar mit Ansible Roles). Sie folgen einem strikten Schema, sind hochgradig anpassbar via Pillar-Daten und werden von SUSE für viele Enterprise-Anwendungen offiziell bereitgestellt und gewartet.
# 1. Einführung & Architektur
Warum Formulas statt einfacher States?
Formulas trennen die Logik (Was wird getan?) von den Daten (Wie heißt der Host?). Sie nutzen intensiv Jinja2-Templates und das map.jinja Pattern, um zwischen verschiedenen OS-Versionen zu unterscheiden.
# Die Formula-Struktur (Mermaid)
graph TD
A[Salt Master] --> B[Formula: nginx]
B --> C[metadata.yml: Info]
B --> D[map.jinja: Variables]
B --> E[init.sls: Logic]
F[User Pillar Data] --> D
D --> E
E -->|Applied to| G[Minion: Web Server]
# 2. SUSE Formulas nutzen
Zertifizierte Qualität.
SUSE liefert für den SUSE Manager und SLES viele Formulas fertig mit.
# Installation
# Beispiel: Formula für PostgreSQL
sudo zypper install salt-formulas-postgresql
Die Dateien landen unter /usr/share/salt-formulas/states/. Sie müssen sie in Ihren File-Server-Pfad (/srv/salt/) verlinken oder dort inkludieren.
# 3. Die Macht von map.jinja
Einen Standard für alle Distros.
Ein Senior Admin schreibt Formulas so, dass sie auf SLES 12, SLES 15 und openSUSE laufen.
# Beispiel: map.jinja
{% set apache = salt['grains.filter_by']({
'Suse': {
'package': 'apache2',
'service': 'apache2',
'config': '/etc/apache2/httpd.conf',
},
'RedHat': {
'package': 'httpd',
'service': 'httpd',
'config': '/etc/httpd/conf/httpd.conf',
},
}, merge=salt['pillar.get']('apache:lookup')) %}
# 4. Day-2 Operations: Customizing via Pillar
Anpassen ohne Code-Änderung.
Sie ändern niemals die Formula-Dateien selbst. Sie steuern das Verhalten ausschließlich über Pillar-Daten.
# Beispiel: Pillar für eine MariaDB Formula
# /srv/pillar/db.sls
mariadb:
root_password: "supersecret"
databases:
- myapp_db
users:
- name: appuser
password: "userpass"
# 5. Troubleshooting & “War Stories”
Wenn die Formel nicht aufgeht.
# Story 1: “Der Namespace-Crash”
Symptom: Ein Admin hat zwei verschiedene Formulas für mysql installiert (eine von SUSE, eine von GitHub). Salt wirft Fehler beim Laden der States.
Ursache: Identische Namen in der top.sls. Salt weiß nicht, welche mysql.sls es laden soll.
Lösung: Nutzen Sie Verzeichnisse als Namespaces (z.B. mysql-suse und mysql-community) oder nutzen Sie die SUSE-Manager-GUI, die diese Konflikte visualisiert.
# Story 2: “Das veraltete Metadata-File”
Symptom: In der SUSE Manager GUI wird eine neu installierte Formula nicht angezeigt oder wirft Validierungsfehler.
Ursache: Das metadata.yml File der Formula ist ungültig oder passt nicht zum erwarteten Schema der GUI.
Lösung: Prüfen Sie das File mit einem YAML-Linter. Achten Sie besonders auf die Einrückungen bei den form Definitionen.
# 6. Fazit & Empfehlung
- Zuerst suchen: Bevor Sie einen Dienst automatisieren, prüfen Sie auf GitHub (SaltStack-Formulas), ob es bereits eine gepflegte Formula gibt.
- Wartbarkeit: Formulas sind die einzige Methode, um Automatisierungs-Code über Jahre hinweg im Team wartbar zu halten.
- Wahl: Nutzen Sie SUSE-eigene Formulas für Core-Dienste (HA, SAP, Storage), um Support zu erhalten.
# Anhang: Cheatsheet
| Aufgabe | Pfad / Befehl |
|---|---|
| Standard Pfad | /usr/share/salt-formulas/ |
| Formula Test | salt 'node' state.show_sls <formula> |
| Pillar Daten prüfen | salt 'node' pillar.items |
| Metadata Schema | metadata.yml |
| Variablen-Logik | map.jinja |
| DNF Paket (RHEL) | salt-formula-<name> |
| Zypper Paket (SUSE) | salt-formulas-<name> |