Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt...
Transcript of Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt...
Puppet
Modul Guide
Alexander Pacnik Karlsruhe, 23.08.2013
2
Environment Struktur ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulestruktur
Daten & Code
Test & Dokumentation
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.
4
Repository Struktur ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulestruktur
Daten & Code
Test & Dokumentation
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.
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
7
Modulprinzipien ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulestruktur
Daten & Code
Test & Dokumentation
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.
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.
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.
11
Modulstruktur ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulestruktur
Daten & Code
Test & Dokumentation
12
Verzeichnisstruktur eines Moduls erstellen
Modulstruktur ... erstellen from scratch.
13
Verzeichnisstruktur Tayloring
‣ Alle optionalen Verzeichnis löschen, falls sie nicht benötigt werden
Modulstruktur ... an die eigenen Bedürfnisse anpassen
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.
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.
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.
17
Daten und Code ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulestruktur
Daten & Code
Test & Dokumentation
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.
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.
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.
21
Ziel ‣ Benutzer je nach Gruppenzugehörigkeit auf bestimmten Nodes ausrollen
Daten und Code ... Hiera am Beispiel einer einfachen Benutzerverwaltung
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.
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.
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.
25
‣ Hiera Konfiguration (hiera.yaml)
Daten und Code ... die Möglichkeiten von Hiera am Beispiel einer Benutzerverwaltung.
26
Test und Dokumentation ... worum es in diesem Vortrag geht.
Environment-Struktur
Repository-Struktur
Modulprinzipien
Modulstruktur
Daten & Code
Test & Dokumentation
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.
28
Lokale Tests ... eine Beispielausgabe.
29
Hilfe
‣ puppet doc – Dokumentation der eigenen Module als html Dateien generieren
‣ Ein Beispiel finden sich unter html/rdoc.sh
Dokumentation ... erstellen.
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]
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
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.