49
IT Engineering – Puppet Entwicklungsworkflow und Basismodule Alexander Pacnik Karlsruhe, 21.05.2014

Puppet - Entwicklungsworkflow und Basismodule

Embed Size (px)

Citation preview

Page 1: Puppet - Entwicklungsworkflow und Basismodule

IT Engineering – Puppet

Entwicklungsworkflow und Basismodule

Alexander Pacnik Karlsruhe, 21.05.2014

Page 2: Puppet - Entwicklungsworkflow und Basismodule

2

Ziel ‣  Lokale Entwicklungsumgebung für Puppet

‣  Einen möglichen Workflow zeigen

Problemstellung ‣  Wie kann ein Entwicklungsworkflow aussehen?

‣  Wie sieht sieht eine Vorlagen für Module (Skeleton) aus?

‣  Was bedeutet Puppet Containment?

‣  Einfache Benutzerverwaltung für kleine Umgebungen.

Einleitung ... worum es in diesem Vortrag geht

Page 3: Puppet - Entwicklungsworkflow und Basismodule

Workflow

3

Workflow ... ein lokaler Puppet Entwicklungs-Workflow

Containment Skeleton Modul

Benutzer- verwaltung

Page 4: Puppet - Entwicklungsworkflow und Basismodule

4

Der Workflow im Überblick ‣  Tasks die Ant zur Verfügung stellt

Workflow ... Überblick

Page 5: Puppet - Entwicklungsworkflow und Basismodule

5

Der Verzeichnisstruktur im Überblick ‣  Enthält allen Code für eine Umgebung und wird über librarian / Git aufgebaut

Workflow ... Überblick

Page 6: Puppet - Entwicklungsworkflow und Basismodule

6

Ein Git Repository pro Modul ‣  Nachteil: viele Module

‣  Vorteile:

‣  Entwicklung findet nur auf Modulebene statt

‣  Verschiedene Modulversionen in unterschiedlichen Umgebungen möglich

Workflow ... Puppet Modul Code in einzelne Repositories

Page 7: Puppet - Entwicklungsworkflow und Basismodule

7

1. Module definieren (librarian-puppet) ‣  Tool um Module die in einzelnen Git Repositories liegen herunter zu laden

‣  Unter configuration/modules liegen keine Puppet Module

‣  In configuration/Puppetfile liegen die Metainformationen

Workflow ... Benötigte Module definieren

Page 8: Puppet - Entwicklungsworkflow und Basismodule

8

2. Module installieren ‣  Benötigte Module in configuration/Puppetfile definieren

Workflow ... Puppet Module installieren

Page 9: Puppet - Entwicklungsworkflow und Basismodule

9

Weitere Nützliche Tasks ‣  gcheck - git: check git repositories (run before lup)

‣  lreset - librarian: rm caches and modules and rebuild structure

‣  ll - librarian: show all modules, versions and dependencies

‣  llo - librarian: show all outdated modules

‣  list - list available puppet modules

Workflow ... nützliche Tasks für Zwischendurch J

Page 10: Puppet - Entwicklungsworkflow und Basismodule

10

Module in Vagrant testen oder anwenden ‣  pkn = puppet apply –noop

‣  pk = puppet apply

‣  Optional: Environment oder einen Node (SSH Konfiguration) angeben

‣  Erläuterung: startet wenn nötig die Vagrant Box, synct den Puppet Code, führt puppet apply aus und generiert die Performance-Auswertung sowie die Puppet Graphen und zeigt diese an.

Workflow ... Puppet Code in Vagrant testen

Page 11: Puppet - Entwicklungsworkflow und Basismodule

11

Module via SSH testen oder anwenden ‣  Da die Logik nicht im Vagrantfile steckt, kann der Befehl für beliebige Hosts via

SSH verwenden werden

‣  „node“ entspricht einer SSH Konfigurationsdatei unter .ssh/node.properties

Workflow ... Puppet Code remote testen

Page 12: Puppet - Entwicklungsworkflow und Basismodule

12

Module Ausgabe auswerten ‣  Auf der Konsole sieht man die detaillierte Puppet Apply Ausgabe und

‣  Die Performance Ausgabe des letzten Puppet Runs

‣  Bei erfolgreicher Ausführung werden noch die Puppet Graphen angezeigt

Workflow ... Puppet Ausgabe auswerten

Page 13: Puppet - Entwicklungsworkflow und Basismodule

13

Übersicht über den Workflow

Workflow ... Übersicht

Page 14: Puppet - Entwicklungsworkflow und Basismodule

14

Empfehlung ‣  Als Basis eine produktionsnahe VM verwenden (vgl. Packer / Vagrant Slides)

‣  Puppet Code sollte mit „puppet apply“ testbar sein

‣  Puppet Code sollte auch ohne ENC testbar sein

‣  Hiera verwenden

‣  ENC nur als Classifier

‣  Puppet Code und Daten in Hiera sind versionierbar, die Daten in der ENC nicht

Workflow ... Empfehlung

Page 15: Puppet - Entwicklungsworkflow und Basismodule

15

Fazit ‣  Wer die Empfehlungen umsetzt, kann Änderungen am Puppet Code in wenigen

Sekunden lokal testen (in der Regel < 30s). Selbst nach einem „vagrant destroy“ und einer vollständigen Provisionierung laufen die Tests meist in 1-2 Minuten durch.

‣  Geschwindigkeit und Konventionen sind für eine schnelle Entwicklung entscheidend, welche am einfachsten lokal umzusetzen ist.

Workflow ... Empfehlung

Page 16: Puppet - Entwicklungsworkflow und Basismodule

Workflow

16

Skeleton ... eine Vorlage für alle Module

Containment Skeleton Modul

Benutzer- verwaltung

Page 17: Puppet - Entwicklungsworkflow und Basismodule

17

Problem 1 ‣  Wie beginne ich mit einem neuen Modul?

‣  Wie muss ein Modul aussehen?

Skeleton ... eine Vorlage für alle Module

Page 18: Puppet - Entwicklungsworkflow und Basismodule

http://www.devco.net/archives/2012/12/13/simple-puppet-module-structure-redux.php 18

Beispiel: Verzeichnisstruktur ‣  Typischer Dreiklang: install, config und service

‣  In der init.pp muss die gesamte Funktionsweise des Moduls ersichtlich sein

‣  Vorteil: man findet sich schnell in allen Modulen zu recht

‣  Struktur minimal halten und bei komplizierteren Modulen bei Bedarf erweitern

Skeleton ... Überblick

Page 19: Puppet - Entwicklungsworkflow und Basismodule

19

Fail fast Prinzip ‣  Beispiel:

Skeleton ... abbrechen wenn die Plattform nicht getestet wurde

Page 20: Puppet - Entwicklungsworkflow und Basismodule

20

Validierung ‣  Alle Parameter der Klasse sollten validiert werden

‣  Beispiel:

Error: No valid sting(optional default value) for string1 defined. at /srv/repositories/puppet/modules/skeleton/manifests/init.pp:26 on node

Skeleton ... Parameter auf Korrektheit prüfen

Page 21: Puppet - Entwicklungsworkflow und Basismodule

21

Reihenfolge der Klassen festlegen ‣  Eine Möglichkeit (vgl. Containment Kapitel)

Skeleton ... Abhängigkeiten zwischen Klassen festlegen

Page 22: Puppet - Entwicklungsworkflow und Basismodule

22

Beispiel: Modulefile ‣  Enthält die Metadaten eines Moduls

Skeleton ... Metadaten festlegen

Page 23: Puppet - Entwicklungsworkflow und Basismodule

23

Modul Syntax prüfen - pcheck ‣  Bash Funktion, um den Modul-Syntax zwischen durch zu testen, falls im Modul

unter tests/ ein check Skript liegt

‣  Vorteil: schnell und zeigt Syntaxfehler

‣  Aber: Vagrant & SSD sind so schnell, das ich es fast nicht mehr verwende

Einleitung ... worum es in diesem Vortrag geht

Page 24: Puppet - Entwicklungsworkflow und Basismodule

Workflow

24

Containment ... Abhängigkeiten zwischen Klassen modellieren

Containment Skeleton Modul

Benutzer- verwaltung

Page 25: Puppet - Entwicklungsworkflow und Basismodule

25

Problem 4 ‣  Ach wie schön, ein Dependency Cylce J

‣  Was bedeutet Containment?

Containment ... Abhängigkeiten zwischen Klassen modellieren

Page 26: Puppet - Entwicklungsworkflow und Basismodule

http://docs.puppetlabs.com/puppet/latest/reference/lang_containment.html 26

Zitat ‣  However, unlike resources, Puppet does not automatically contain classes when

they are declared inside another class. This is because classes may be declared in several places via include and similar functions. Most of these places shouldn’t contain the class, and trying to contain it everywhere would cause huge problems.

‣  Instead, you must manually contain any classes that need to be contained.

Containment ... Abhängigkeiten zwischen Klassen modellieren

Page 27: Puppet - Entwicklungsworkflow und Basismodule

27

Beispiel 1 – include

Containment ... include

Page 28: Puppet - Entwicklungsworkflow und Basismodule

28

Beispiel 1 – include

Containment ... include

Page 29: Puppet - Entwicklungsworkflow und Basismodule

29

Beispiel 2 – require

Containment ... require

Page 30: Puppet - Entwicklungsworkflow und Basismodule

30

Beispiel 2 – require

Containment ... require

Page 31: Puppet - Entwicklungsworkflow und Basismodule

31

Beispiel 3 – Chaining

Containment ... chaining

Page 32: Puppet - Entwicklungsworkflow und Basismodule

32

Beispiel 3 – Chaining

Containment ... chaining

Page 33: Puppet - Entwicklungsworkflow und Basismodule

33

Beispiel 4 – Chaining zweiter Versuch

Containment ... chaining .. chaining

Page 34: Puppet - Entwicklungsworkflow und Basismodule

34

Beispiel 4 – Chaining zweiter Versuch

Containment ... chaining

Page 35: Puppet - Entwicklungsworkflow und Basismodule

35

Beispiel 5 – Anchor Pattern (Puppet < 3.4)

Containment ... anchor

Page 36: Puppet - Entwicklungsworkflow und Basismodule

36

Beispiel 5 – Anchor Pattern (Puppet < 3.4)

Containment ... anchor

Page 37: Puppet - Entwicklungsworkflow und Basismodule

37

Beispiel 6 – contain, Verwendung wie include (Puppet >= 3.4)

Containment ... contain

Page 38: Puppet - Entwicklungsworkflow und Basismodule

38

Beispiel 6 – contain, Verwendung wie include (Puppet >= 3.4)

Containment ... contain

Page 39: Puppet - Entwicklungsworkflow und Basismodule

Workflow

39

Entscheidungen im Vorfeld ... Papier und Stift bitte

Containment Skeleton Modul

Benutzer- verwaltung

Page 40: Puppet - Entwicklungsworkflow und Basismodule

40

Möglichkeiten 1.  Zentrale Benutzerverwaltung über ein Tool (beispielsweise LDAP)

2.  Datei basierte Benutzerverwaltung mit Puppet und Hiera

Aufgaben ‣  Benutzer verwalten

‣  SSH Keys verwalten

‣  Sudo Regeln verwalten

Hands-on ... um die Übersicht zu behalten

Page 41: Puppet - Entwicklungsworkflow und Basismodule

41

Eine Define für die Verwaltung der Ressourcen

Hands-on ... um die Übersicht zu behalten

Page 42: Puppet - Entwicklungsworkflow und Basismodule

42

Benutzer in Hiera definieren ‣  Struktur

‣  YAML

Hands-on ... um die Übersicht zu behalten

Page 43: Puppet - Entwicklungsworkflow und Basismodule

43

Eine Liste aller verfügbaren Benutzer aufbauen (virtual)

Hands-on ... um die Übersicht zu behalten

Page 44: Puppet - Entwicklungsworkflow und Basismodule

44

Benutzer anhand von Kriterien ausrollen wo sie benötigt werden

Hands-on ... um die Übersicht zu behalten

Page 45: Puppet - Entwicklungsworkflow und Basismodule

45

Next Steps 1.  Tools installieren

2.  Beispiel aus unserem Git Server clonen

3.  Skripte ausprobieren, Beteiligung an der Weiterentwicklung erwünscht! J

4.  Dokumentation der Tools vollständig lesen!

http://docs.puppetlabs.com/puppet/latest/reference/lang_containment.html

Hands-on ... um die Übersicht zu behalten

Page 46: Puppet - Entwicklungsworkflow und Basismodule

46

Fazit ‣  Verzeichnisstruktur nach Aufgaben und Umgebungen sortieren

‣  Die lokale Testumgebung ist der erste Umgebung die funktionieren muss!

Fazit ... um die Übersicht zu behalten

Page 47: Puppet - Entwicklungsworkflow und Basismodule

47

Vielen Dank für Ihre Aufmerksamkeit

Kontakt Alexander Pacnik IT Engineering & Operations Project Management inovex GmbH Ludwig-Erhard-Allee 6 76133 Karlsruhe Mobil: +49 (0)173 3181 040 Mail: [email protected]

Page 48: Puppet - Entwicklungsworkflow und Basismodule

Anhang

Page 49: Puppet - Entwicklungsworkflow und Basismodule

49

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