32
Puppet Modul Guide Alexander Pacnik Karlsruhe, 23.08.2013

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

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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://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

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

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://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

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

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

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

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

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

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

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

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

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.