# Hiera Konfiguration: Kurzbeschreibung Diese Datei erklärt die grundlegenden Einstellungen in der `hiera.yaml`, die für dieses Projekt konfiguriert wurde. ## Die Datei `hiera.yaml` ```yaml version: 5 defaults: datadir: data data_hash: yaml_data hierarchy: - name: "Per-Node-Konfiguration (pro Server)" path: "nodes/%{trusted.certname}.yaml" - name: "Allgemeine Konfiguration (für alle)" path: "common.yaml" ``` ### `version: 5` Dies ist die Standardversion für moderne Puppet-Installationen und muss an erster Stelle stehen. ### `defaults` Hier werden Standardwerte für die gesamte Hierarchie festgelegt. - `datadir: data`: Teilt Hiera mit, dass alle Datenpfade relativ zum Unterverzeichnis `data` sind. Das Haupt-Datenverzeichnis ist also `code/environments/production/data/`. - `data_hash: yaml_data`: Gibt an, dass die Datenquelle eine YAML-Datei ist. ### `hierarchy` Dies ist das Herzstück von Hiera. Es ist eine **geordnete Liste**, die definiert, in welcher Reihenfolge Puppet nach Daten sucht. Die Suche stoppt beim ersten gefundenen Wert, es sei denn, ein "merge behavior" (Zusammenführungsverhalten) ist definiert. 1. **`path: "nodes/%{trusted.certname}.yaml"`** - **Bedeutung:** Dies ist die **höchste** Priorität. Hiera sucht zuerst nach einer Datei im `data/nodes/`-Verzeichnis, deren Name dem Zertifikatsnamen des anfragenden Servers entspricht (z.B. `arch-2.lxd.yaml`). - **Zweck:** Hier werden Konfigurationen hinterlegt, die **nur für einen einzigen, spezifischen Server** gelten. - `%{trusted.certname}` ist eine Puppet-Variable, die den verifizierten Namen des Agenten enthält. 2. **`path: "common.yaml"`** - **Bedeutung:** Dies ist die **niedrigste** Priorität. Wenn in den spezifischeren Ebenen (wie der pro-Node-Datei) kein Wert gefunden wurde, sucht Hiera hier. - **Zweck:** Dies ist der Ort für die **Standardkonfiguration**, die für **alle Server** gelten soll. ## Die Datei `site.pp` Die `site.pp` wurde auf eine einzige Zeile reduziert: ```puppet lookup('classes', {merge => 'unique'}).include ``` - `lookup('classes', ...)`: Diese Funktion startet eine Suche in der Hiera-Hierarchie nach dem Schlüssel `classes`. - `{merge => 'unique'}`: Dies ist das "Zusammenführungsverhalten". Es weist Hiera an, nicht beim ersten Treffer aufzuhören, sondern **alle Ebenen** der Hierarchie zu durchsuchen und eine Liste aller gefundenen Werte für `classes` zu erstellen, wobei Duplikate entfernt werden. - `.include`: Diese Funktion nimmt die resultierende Liste von Klassennamen und deklariert sie, sodass Puppet sie anwendet. Für den Server `arch-2.lxd` findet Hiera also `test` in der Node-spezifischen Datei und `all_system` in der `common.yaml`-Datei, fügt beide zu einer Liste zusammen und wendet beide Klassen an.