48
Linux Tag 2013 - Puppet Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

Linux Tag 2013 - Puppet

Umgebungen, Daten & Code, Abhängigkeiten

Alexander Pacnik Karlsruhe, 23.05.2013

Page 2: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

Umgebungen

2

Die Agenda ... worum es in diesem Vortrag geht

Abhängig- keiten

Trennung von Daten und Code

Modul Best

Practices

Page 3: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

3

Aufgabe ‣  Repositories und Module für heterogene Systemlandschaften verwalten

Ziele

‣  Wartbarkeit erhöhen

‣  Transparenz schaffen

‣  Prozess erzwingen

Weg ‣  Umgebungen, Modellierung von Daten und Abhängigkeiten

Einleitung ... worum es in diesem Vortrag geht

Page 4: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

4

Konfigurationsverwaltung

‣  So einfach und minimal wie möglich

‣  Daten und Code trennen

‣  Konfigurationen beim Anwenden testen

‣  Konfigurationsverwaltung erzwingen

‣  Alles unter Versionskontrolle stellen

‣  Konfiguration in ein VCS

‣  Daten in ein Repository (Paketmanager oder Artefakt Repository)

‣  Versionierung überwachen

Einleitung ... worum geht es bei der Konfigurationsverwaltung?

Page 5: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

5

Umgebungsverwaltung

‣  Redundanzen vermeiden

‣  Auseinanderlaufen verhindern

Klärungen

‣  Paketabhängigkeiten in Puppet oder Paketmanagement

‣  Baremetal, Betriebsystem, Dienste, Applikationen

Einleitung ... worum geht es bei der Umgebungsverwaltung?

Page 6: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

Umgebungen

6

Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren

Abhängig- keiten

Trennung von Daten und Code

Modul Best

Practices

Page 7: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

7

Ziel

‣  Umgebungen abbilden (Test, Abnahme, Produktion)

‣  Nach Möglichkeit gleiche Codebasis

‣  Versionsstände abbilden (Feature, Release, Hotfix, Master)

‣  So wenig branchen wie möglich (Continous Integration)

‣  Workflow (Gleiche vs. getrennte Codebasis)

Environments ... die Verwaltung von Umgebungen mit Puppet

Page 8: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

8

Erklärung Environment

‣  Environment Konfiguration (puppet.conf)

‣  manifest ($manifestdir/site.pp)

‣  modulepath ($confdir/modules)

‣  manifestdir ($confdir/manifests)

‣  templatedir ($vardir/templates)

‣  Zugriff in Modulen über $environment

Environments ... die Verwaltung von Umgebungen mit Puppet

Page 9: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

9

Konfiguration auf dem Master (puppet.conf) ‣  Möglichkeit einfach neuen Code zu testen

[master]

environment = production

manifest = $confdir/environments/$environment/manifests/site.pp

modulepath = $confdir/environments/$environment/modules

[agent]

environment = production

Dynamic Environments ... Weiterentwicklung mit temporären Umgebungen

Page 10: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

10

Anwendung auf dem Node ‣  puppet agent --environment <name>

‣  puppet agent --environment <name> --noop

Dynamic Environments ... Weiterentwicklung mit temporären Umgebungen

Page 11: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

11

Anwendung zentral über Puppet

Dynamic Environments ... Weiterentwicklung mit temporären Umgebungen

Page 12: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

12

Environments & VCS Best Practices ‣  Alles Versionieren

‣  Style und Syntax Check mit Puppet Lint (pre-commit)

‣  Monitoring für alles was im Puppet verwaltet wird

Environments ... die Verwaltung von Umgebungen mit Puppet

Page 13: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

Umgebungen

13

Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren

Abhängig- keiten

Trennung von Daten und Code

Modul Best

Practices

Page 14: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

14

Trennung von Daten und Code – Möglichkeiten 1.  Top Scope Variable

2.  Node Inheritance

3.  Parametrisierte Klassen

4.  Extlookup

5.  Hiera

Trennung von Daten und Code ... die Möglichkeiten

Page 15: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

15

Variable im Top Scope ‣  Variable werden im zentralen Manifest definiert und in den Modulen verwendet

Variable im Top Scope – Beispiel

Trennung von Daten und Code ... mittels Variablen

Page 16: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

16

Variable im Top Scope – Vor- und Nachteile ‣  Pro: Sehr einfach

‣  Pro: defacto Trennung von Code und Daten

‣  Con: immer noch im gleichen Repository

‣  Con: unklar wo die Variablen verwendet werden und welcher Werte gesetzt ist

Trennung von Daten und Code ... mittels Variablen

Page 17: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

17

Node Inheritance ‣  Variable werden in Nodes definiert und über Vererbung die Hierarchie abgebildet

Node Inheritance – Beispiel

Trennung von Daten und Code ... mittels Node Inheritance

Page 18: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

18

Node Inheritance – Vor- und Nachteile ‣  Pro: Sehr einfach

‣  Pro: defacto Trennung der Daten vom Code

‣  Con: immer noch im gleichen Repository

‣  Con: unklar wo die Variablen verwendet werden und welcher Werte gesetzt ist

Trennung von Daten und Code ... mittels Node Inheritance

Page 19: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

19

Parametrisierte Klassen ‣  Variable werden in Nodes definiert und über Vererbung die Hierarchie abgebildet

Parametrisierte Klassen – Beispiel

Trennung von Daten und Code ... mittels parametrisierte Klassen

Page 20: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

20

Parametrisierte Klassen – Vor- und Nachteile ‣  Pro: Daten nicht mehr im Modulcode und Defaultwerte möglich (Lesbarkeit)

‣  Pro: klar wo die Variablen verwendet werden

‣  Con: Daten und Logik in params.pp ausgelagert

Trennung von Daten und Code ... mittels parametrisierte Klassen

Page 21: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

21

Extlookup ‣  Hierarchischer Lookup einer Variable im datadir basierend auf Fact und Key

Extlookup – Beispiel

Trennung von Daten und Code ... mittels extlookup

Page 22: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

22

Extlookup – Vor- und Nachteile ‣  Pro: dynamische und hierarchische Abbildung von Werten

‣  Con: schlechte Wartbarkeit (CSV)

‣  Con: liefert nur den ersten Wert, keine zusammengesetzten Werte

Trennung von Daten und Code ... mittels extlookup

Page 23: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

23

Hiera ‣  Hierarchischer Lookup einer Variable im datadir ähnlich wie extlookup

Hiera – Konfiguration

Trennung von Daten und Code ... mittels Hiera

Page 24: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

24

Hiera Beispiele ‣  hiera – spezifischen Wert anhand des Schlüssels zurückliefern

$local_var = hiera('my_name')

‣  hiera_array – alle Strings als Array zurückliefern

$local_array = hiera_array('my_array')

‣  hiera_hash – alle Werte zu einem Hash zusammenfassen und zurückliefern

$local_hash = hiera_hash('my_hash‘)

Trennung von Daten und Code ... mittels Hiera

Page 25: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

25

Hiera auf der Kommandozeile ‣  Die YAML Datenbank abfragen

hiera <key> [Optionen]

‣  Wichtige Optionen

‣  --yaml <file>

‣  --array

‣  --hash

Trennung von Daten und Code ... mittels Hiera

Page 26: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

26

Hiera und Node Definitions ‣  Liste von Klassen aus Hiera abfragen und anwenden

Trennung von Daten und Code ... mittels Hiera

Page 27: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

27

Hiera – Vor- und Nachteile ‣  Pro: dynamische und hierarchische Abbildung von Werten

‣  Pro: Default Werte möglich

‣  Pro: Trennung von Code und Daten

‣  Pro: zusammengesetzten Werte

Trennung von Daten und Code ... mittels Hiera

Page 28: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

28

Hiera Best Practices ‣  Hiera nicht in Templates sondern nur im Manifest verwenden (Lesbarkeit)

‣  Hierarchien minimal halten (Einfachheit)

‣  Hiera Daten pro Umgebung trennen

:datadir: '/etc/puppet/environments/%{environment}/hieradata'

Trennung von Daten und Code ... mittels Hiera

Page 29: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

29

Empfehlung ‣  So nah wie möglich am Code (Lesbarkeit)

‣  Seit weit entfernt wie nötig (Abstrahierbarkeit)

‣  Im Zweifel Hiera

‣  Default-Werte verwenden

Trennung von Daten und Code ... die Zusammenfassung

Page 30: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

Umgebungen

30

Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren

Abhängig- keiten

Trennung von Daten und Code

Modul Best

Practices

Page 31: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

31

Grund ‣  Reihenfolge im Manifest wird nicht beachtet (deklarativ)

‣  Abhängigkeiten zwischen Ressourcen müssen modelliert werden

Problem ‣  Reihenfolgen oft doch relevant

‣  z.B. Dienst installieren, konfigurieren und starten

Reihenfolgen und Abhängigkeiten ... die Problemstellung

Page 32: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

32

Reihenfolgen und Abhängigkeiten 1.  Metaparameter

2.  Chaining

3.  Die „require“ Funktion

4.  Run Stages

Reihenfolgen und Abhängigkeiten ... die Möglichkeiten

Page 33: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

33

Metaparameter ‣  Einsatzzweck: Abhängigkeiten zwischen Ressourcen

‣  Before (Ressource vor einer anderen anwenden)

‣  Require (Ressource nach einer anderen anwenden)

‣  Notify (Ressource vor einer anderen anwenden und Änderungen mitteilen)

‣  Subscribe (Ressource nach einer anderen anwenden und Änderungen mitteilen)

Reihenfolgen und Abhängigkeiten ... die Verwendung von Metaparametern

Page 34: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

34

Metaparameter – Beispiel

Reihenfolgen und Abhängigkeiten ... die Verwendung von Metaparametern

Page 35: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

35

Metaparameter – Vor- und Nachteile Pro: funktionieren mit jedem Ressourcen Typ

Con: wird schnell unübersichtlich

Reihenfolgen und Abhängigkeiten ... die Verwendung von Metaparametern

Page 36: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

36

Chaining ‣  Einsatzzweck: Abhängigkeiten zwischen Ressourcen(-gruppen)

‣  -> (ordering arrow)

Die Ressource links des Pfeils wird zuerst angewendet

‣  ~> (notification arrow)

Die Ressource links des Pfeils wird zuerst angewendet und bei Änderungen wird

die Rechte benachrichtigt

‣  Best Practice: Pfeile nur in eine Richtung (rechts) verwenden

Reihenfolgen und Abhängigkeiten ... Chaining

Page 37: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

37

Chaining – Anwendungsfälle ‣  Ressourcen Deklarationen

‣  Puppet Code Blöcke

Reihenfolgen und Abhängigkeiten ... Chaining

Page 38: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

38

Chaining – Anwendungsfälle ‣  Ressourcen Referenzen

‣  Referenz auf eine existierende Puppet Ressource (Typ und Titel)

Reihenfolgen und Abhängigkeiten ... Chaining

Page 39: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

39

Resource Collectors ‣  Ressourcen gruppieren anhand bestimmter Attribute

‣  Syntax: <| [Ausdruck] |>

‣  Suchausdrücke mit „!=“, „==“, „and“ und „or“

Exkurs ... Resource Collectors

Page 40: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

40

Chaining – Anwendungsfälle ‣  Ressourcen Collectoren (auch virtuelle Ressourcen)

Reihenfolgen und Abhängigkeiten ... Chaining

Page 41: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

41

‣  Chaining – Vor und Nachteile ‣  Pro: Funktioniert für Ressourcen und Gruppen von Ressourcen

‣  Pro: sehr flexibel vor allem im Zusammenspiel mit virtuellen Ressourcen

‣  Con: Gefahr von Dependency Cycles insbesondere mit virtuellen Ressourcen

puppet agent --configprint graphdir

Reihenfolgen und Abhängigkeiten ... Chaining

Page 42: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

42

Funktion „require“ ‣  Einsatzzweck: Abhängigkeiten zwischen Klassen abbilden

‣  require (Klassen vor einer Ressource anwenden)

‣  Wird auch bei mehrfachen Aufrufen nur einmal ausgeführt im Gegensatz zu include

Funktion „require“ – Beispiel

Reihenfolgen und Abhängigkeiten ... die „require“ Funktion

Page 43: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

43

Run Stages ‣  Einsatzzweck: Gruppe von Klassen die vor oder nach allem anderen laufen soll

‣  Definition über einen Ressource Type, Verwendung durch Zuweisung eines Metaparameters in einer Klasse

Run Stages – Beispiel

Reihenfolgen und Abhängigkeiten ... run stages für Massenabhängigkeiten

Page 44: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

44

Run Stages – Vor- und Nachteile ‣  Pro: Massenabhängigkeiten abbildbar

‣  Con: funktioniert nicht mit include, subscribe oder notify

‣  Con: Klassen die andere Klassen deklarieren verhalten sich im run stage anders

‣  Empfehlung: einzig valider Fall sind Abhängigkeiten mit Paketrepositories

Reihenfolgen und Abhängigkeiten ... run stages für Massenabhängigkeiten

Page 45: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

45

Zusammenfassung ‣  Abhängigkeiten innerhalb von Klassen mit Metaparametern und Chaining

‣  Abhängigkeiten zwischen Klassen mit der require Funktion

‣  Run Stages vermeiden

‣  So einfach wie möglich halten um Dependency Cycles zu vermeiden

Reihenfolgen und Abhängigkeiten ... die Zusammenfassung

Page 46: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

46

Vielen Dank für Ihre Aufmerksamkeit

Kontakt Alexander Pacnik Systems Engineering inovex GmbH Office Karlsruhe Zur Gießerei 16 76227 Karlsruhe +49 (0)173 3181 040 [email protected]

Page 47: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

Anhang

Page 48: Puppet - Umgebungen, Daten & Code, Abhängigkeiten · Linux Tag 2013 - Puppe Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013

48

Quellen ‣  Puppet Style Guide

http://docs.puppetlabs.com/guides/style_guide.html

‣  Puppet Language Guide

http://docs.puppetlabs.com/guides/language_guide.html

‣  Puppet Referenzen

http://docs.puppetlabs.com/references/latest/

‣  Puppet Guides

http://docs.puppetlabs.com/guides/

‣  Puppet Blog

https://puppetlabs.com/blog/

Lizenz des Vortrags ‣  Creative Commons (by-nc-nd)

Anhang ... wo sie in Ruhe nachlesen können