Es gibt viele Tools für das Konfigurations- und Automatisierungsmanagement, wie Ansible, Puppet, Salt und mehr. Unser Werkzeug der Wahl ist in den meisten Fällen Stalt. Salt ist Python-basiert mit einer Server/Minion-Struktur, und dies ist einer der Hauptgründe, warum wir Salt gerne verwenden. Dies erleichtert die Handhabung von Firewall-Regelsätzen und Sicherheitsberechtigungen auf den Servern. Darüber hinaus ist es in Python geschrieben, und da wir Python an vielen Stellen verwenden, passt es gut in unsere Welt und wir können es nach unseren Bedürfnissen erweitern.
Wir verwenden Salt in vielen Projekten, von kleinen Umgebungen, in denen wir es nur verwenden, um einige Benutzer auf den Servern zu verwalten, bis hin zu großen Infrastrukturen, in denen jede Konfiguration durch Salt verwaltet wird. Salt bietet hier viele nützliche Methoden zum Verwalten von Konfigurationen. Vom einfachen YAML-basierten Ansatz bis hin zu pyDSL mit vollständigem Python-Code.
Ein solches Konfigurationsbeispiel könnte das Management von NTP sein:
ntp: pkg.installed: [] service.running: - name: ntp - require: - pkg: ntp file.managed: - name: /etc/ntp.conf - user: root - group: root - mode: 644 - template: jinja - source: salt://ntp/ntp.conf - require: - pkg: ntp - watch_in: - service: ntpDas obige Beispiel ist eine Salt-State-Konfiguration mit YAML, um die NTP-Konfiguration eines Servers zu verwalten. Es definiert, dass das Paket ntp installiert werden muss und kümmert sich um die in /etc/ntp.conf gespeicherte Konfiguration basierend auf dem jinja2-Template. Wenn sich dabei die Konfiguration ändert, wird der NTP-Dienst neu gestartet.
Mit der pyDSL-Sprache kann man komplexere Themen abdecken. Diese bietet die Möglichkeit, Python-Code in Kombination mit Salt-Methoden zu schreiben.
#!pydsl services = [] for service in __salt__['pillar.get']('services', {}): if __salt__['pillar.get'](f'services:{service}:active', False) is True: services.append(f'services/{service}') include(*services)In diesem Beispiel verwenden wir Python-Code, um ein Dict von Diensten zu durchlaufen, die wir von Salt Pillar erhalten. Wenn der Dienst in Pillar aktiv ist, wird der Service inkludiert und verarbeitet. In diesem Beispiel werden DSL-Methoden wie include oder __salt__ verwendet, die uns einen schnellen Zugriff auf die Salt-Funktionalität ermöglichen. Wir verwenden auch Salt Pillar, eine sichere Möglichkeit, Werte für jeden Server zu speichern.