Puppe Modul Guide Alexander Pacnik Karlsruhe, 23.08 · 9 Modul Prinzipien ‣ Ein Einstiegspunkt...

Post on 03-Nov-2019

3 views 0 download

transcript

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 alexander.pacnik@inovex.de

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.