puppe modul guide alexander pacnik karlsruhe, 23.08 · 9 modul prinzipien ‣ ein einstiegspunkt...
TRANSCRIPT
![Page 1: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/1.jpg)
Puppet
Modul Guide
Alexander Pacnik Karlsruhe, 23.08.2013
![Page 2: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/2.jpg)
2
Environment Struktur ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulestruktur
Daten & Code
Test & Dokumentation
![Page 3: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/3.jpg)
3
Prinzipien
‣ Nach Möglichkeit ein Puppet Master pro Umgebung
‣ Vorteile: Isolation und einfacherer Update Pfade für Puppet
‣ Für produktive Umgebung mindestens zwei Puppet Master (Redundanz)
‣ Code in einem VCS ablegen
Environment Struktur ... allgemeines zu Umgebungen.
![Page 4: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/4.jpg)
4
Repository Struktur ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulestruktur
Daten & Code
Test & Dokumentation
![Page 5: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/5.jpg)
5
Prinzipien ‣ Die Struktur so minimal wie möglich halten
‣ Trennung basierend auf Berechtigungen
‣ Trennung basierend auf Modul Hierarchien
Beispiel
Repository Struktur ... ein kurzer Überblick über einen möglichen Aufbau.
![Page 6: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/6.jpg)
6
Möglichkeiten wie Klassen Nodes zugewiesen werden könne ‣ direkt: node über Node Definition oder ENC
‣ Jeder neue Node wird anhand von seinem Namen identifiziert
‣ indirekt: über default {} Node und Rolle
‣ Jeder Node wird anhand einer Facter Variable (Rolle) identifiziert
Repository Struktur ... Node Definitions
![Page 7: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/7.jpg)
7
Modulprinzipien ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulestruktur
Daten & Code
Test & Dokumentation
![Page 8: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/8.jpg)
8
Das Baukasten Prinzip
‣ modules(-ext) – die Bauklötzchen
‣ Unabhängig, atomar und austauschbar
‣ module-customer
‣ Nicht wiederverwendbare kundenspezifische Module und Templates
‣ services – funktionsfähigen Einheiten
‣ Besteht aus verschiedenen Modulen, möglichst nicht aus Ressourcen
‣ roles
‣ Besteht aus services und modules, die auf einen Nodes angewendet werden
Modulprinzipien ... Module nach dem Baukasten-Prinzip zusammensetzen.
![Page 9: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/9.jpg)
9
Modul Prinzipien
‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist
‣ Default Werte für Parameter verwenden
‣ Konsistentes Design über alle Module gewährleisten
‣ Parametrisierte Klassen verwenden (die Implementierung verstecken)
‣ Parametrisierte Klassen zusammen mit ENC oder Hiera verwenden (Data Binding)
‣ Chaining für Abhängigkeiten zwischen Klassen statt Ressourcen verwenden
Modul Verhalten ‣ Das Modul Design muss vollständig über die init.pp ersichtlich sein
‣ enthält alle Parameter und ihre Default Werte
‣ Überblick über die Modulstruktur durch Klassen (falls Klassen vorhanden)
‣ enthält Relations und Notifications die im Modul zwischen Klassen existieren
Modulprinzipien ... was gibt es beim Erstellen von Modulen zu beachten.
![Page 10: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/10.jpg)
10
Module Style
‣ Falls es keinen sinnvollen Grund für Abweichung gibt, dem Style Guide verwenden
‣ http://docs.puppetlabs.com/guides/style_guide.html
‣ Puppet Lint verwenden um den Style Guide durchzusetzen
‣ http://puppet-lint.com/checks
‣ Modul sollte normalerweise nicht bei jedem „Run“ etwas verändern (vgl. exec)
Modulprinzipien ... Module nach dem Baukasten-Prinzip zusammensetzen.
![Page 11: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/11.jpg)
11
Modulstruktur ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulestruktur
Daten & Code
Test & Dokumentation
![Page 12: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/12.jpg)
12
Verzeichnisstruktur eines Moduls erstellen
Modulstruktur ... erstellen from scratch.
![Page 13: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/13.jpg)
13
Verzeichnisstruktur Tayloring
‣ Alle optionalen Verzeichnis löschen, falls sie nicht benötigt werden
Modulstruktur ... an die eigenen Bedürfnisse anpassen
![Page 14: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/14.jpg)
14
Möglichkeiten
‣ Facts (um Ausdrücke basierend auf Daten auf dem Agent zu schreiben)
‣ Functions (Erweiterung des Parsers, wird auf dem Master ausgeführt)
‣ Type (Modell eines Resource Types)
‣ Provider (OS spezifische Implementierung eines Types)
Modulstruktur ... was machen wenn die mitgelieferte Funktionalität nicht ausreicht.
![Page 15: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/15.jpg)
15
Möglichkeiten
‣ Möglichst keine Abhängigkeiten zwischen Modulen (atomar halten)
‣ Mit Metaparametern innerhalb von Modulen arbeiten
‣ Mit Chaining zwischen Klassen und in Modulen arbeiten
‣ Details finden sich in meinem Linux Tag Vortrag aus dem Jahr 2013
Tipp ‣ Immer versuchen logische Baumstrukturen aufzubauen
Modulstruktur ... wie mit Abhängigkeiten umgehen.
![Page 16: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/16.jpg)
16
Antipattern
‣ Dynamic Scoping (grep deprecated /path/to/your/syslog and fix it!)
‣ Ein Puppet Master (schwieriger Upgrade Pfad)
Modulstruktur ... Was man besser nicht machen sollte.
![Page 17: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/17.jpg)
17
Daten und Code ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulestruktur
Daten & Code
Test & Dokumentation
![Page 18: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/18.jpg)
18
Aspekte
‣ Möglichst keine Logik in Templates, besser in den Manifesten
‣ Daten in Hiera auslagern, nach Möglichkeit params.pp nicht mehr verwenden
‣ Hiera Struktur so flach und einfach wie möglich halten, ein Beispiel:
‣ Eine einfache Hiera – Verzeichnisstruktur
Daten und Code ... trennen damit der Code übersichtlich bleibt.
![Page 19: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/19.jpg)
19
Hiera Lookup
‣ Explizit mit hiera(), hiera_hash(), hiera_array(), hiera_include
‣ Default Werte mit hiera(‘key‘, ‘default value‘)
Hiera Lookup
‣ Automatisch über parametrisierte Klassen
‣ Bevorzugte Variante, da direkt aus der ersten Zeile ersichtlich ist welche Parameter benötigt werden.
Daten und Code ... Möglichkeiten Daten aus Hiera auszulesen.
![Page 20: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/20.jpg)
https://github.com/kwilczynski/puppet-functions/blob/master/lib/puppet/parser/functions/dump.rb 20
Debugging Ausgaben ‣ Ausgabe auf dem Master: notice ('text')
‣ Ausgabe auf dem Agent: notify {'text': }
Data Dumper
‣ Inhalt von Variablen anzeigen
‣ Funktion dump() nach lib/puppet/parser/functions/dump.rb kopieren
‣ Beispiel Manifest:
‣ Beispiel Ausgabe:
Daten und Code ... Hiera Debugging – wenn es mal nicht funktioniert.
![Page 21: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/21.jpg)
21
Ziel ‣ Benutzer je nach Gruppenzugehörigkeit auf bestimmten Nodes ausrollen
Daten und Code ... Hiera am Beispiel einer einfachen Benutzerverwaltung
![Page 22: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/22.jpg)
22
Benutzer anlegen ‣ Über eine define werden die Benutzer auf den Systemen angelegt
Daten und Code ... die Möglichkeiten von Hiera am Beispiel einer Benutzerverwaltung.
![Page 23: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/23.jpg)
https://github.com/kwilczynski/puppet-functions/blob/master/lib/puppet/parser/functions/dump.rb 23
Liste der verfügbaren Benutzer erstellen und ausrollen (accounts.pp) 1. Alle Benutzer aus den YAML-Dateien auslesen
2. Inhalt des Hashes ausgeben (Debugging)
3. Die Funktion create_resources erstellt für jeden Benutzer im Hash einen Eintrag im Katalog als virtuelle Ressource und setzt den Default-Wert für managehome
4. Über realize() oder den gezeigten „Spaceship Operator“ können dann alle oder bestimmte Benutzer aus dieser Liste tatsächlich auf den Systemen angelegt werden
Daten und Code ... die Möglichkeiten von Hiera am Beispiel einer Benutzerverwaltung.
![Page 24: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/24.jpg)
24
Benutzer auslesen - Hiera Konfiguration ‣ alle Benutzer zentral in Hiera ablegen
Benutzer auslesen - Hiera Benutzer ‣ pro Gruppe eine zentrale Yaml-Datei (operations.yaml)
Daten und Code ... die Möglichkeiten von Hiera am Beispiel einer Benutzerverwaltung.
![Page 25: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/25.jpg)
25
‣ Hiera Konfiguration (hiera.yaml)
Daten und Code ... die Möglichkeiten von Hiera am Beispiel einer Benutzerverwaltung.
![Page 26: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/26.jpg)
26
Test und Dokumentation ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulstruktur
Daten & Code
Test & Dokumentation
![Page 27: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/27.jpg)
27
Modul Tests
‣ Bereits lokal während der Entwicklung testen
‣ Voraussetzung: gem install hiera puppet deep_merge
‣ Usage: $ ./check.sh [puppet apply options e.g. --debug]
‣ Verstöße durch Pre-Commit-Hooks verhindern
‣ Test-Driven Development lässt sich mit rspec umsetzen
‣ Ein Beispiel ist unter module-template/test enthalten
Tests ... wie man Puppet testen kann.
![Page 28: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/28.jpg)
28
Lokale Tests ... eine Beispielausgabe.
![Page 29: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/29.jpg)
29
Hilfe
‣ puppet doc – Dokumentation der eigenen Module als html Dateien generieren
‣ Ein Beispiel finden sich unter html/rdoc.sh
Dokumentation ... erstellen.
![Page 30: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/30.jpg)
30
Vielen Dank für Ihre Aufmerksamkeit
Kontakt Alexander Pacnik Systems Engineering Project Management inovex GmbH Office Karlsruhe Zur Gießerei 16 76227 Karlsruhe +49 (0)173 3181 040 [email protected]
![Page 31: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/31.jpg)
31
Anmerkungen Bei dieses Foliensatzes handelt es sich um eine Übersicht. In den Quellcodes zu diesen Folien finden sich neben ausführlichen Beispielen und Dokumentation auch die weiterführenden Links zu weiter führenden Dokumentation.
Anforderungen ‣ Puppet >= 3.2
‣ Hiera >= 1.2
Quellen ... wo Sie in Ruhe nach lesen können J
![Page 32: Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt pro Modul der über test/init.pp ersichtlich ist ‣ Default Werte für Parameter](https://reader030.vdokument.com/reader030/viewer/2022040716/5e203843be611a101c39aaa6/html5/thumbnails/32.jpg)
32
Syntax und Language Dokumentation
‣ puppet describe <resource type>
‣ Beispiel: puppet describe file
‣ Puppet Referenz
‣ http://docs.puppetlabs.com/puppet/3/reference/
‣ Neu in Puppet 3
‣ http://docs.puppetlabs.com/puppet/3/reference/whats_new.html
‣ Wichtige Dokumentation
‣ http://docs.puppetlabs.com/references/latest/metaparameter.html
‣ http://docs.puppetlabs.com/references/latest/type.html
‣ http://docs.puppetlabs.com/guides/style_guide.html
‣ http://docs.puppetlabs.com/references/latest/function.html
Dokumentation ... wo man nachschlagen kann.