Puppet - Entwicklungsworkflow und Basismodule

486 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
486
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
4
Aktionen
Geteilt
0
Downloads
6
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Puppet - Entwicklungsworkflow und Basismodule

  1. 1. IT Engineering – Puppet Entwicklungsworkflow und Basismodule Alexander Pacnik Karlsruhe, 21.05.2014
  2. 2. 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
  3. 3. Workflow 3 Workflow ... ein lokaler Puppet Entwicklungs-Workflow Containment Skeleton Modul Benutzer- verwaltung
  4. 4. 4 Der Workflow im Überblick ‣  Tasks die Ant zur Verfügung stellt Workflow ... Überblick
  5. 5. 5 Der Verzeichnisstruktur im Überblick ‣  Enthält allen Code für eine Umgebung und wird über librarian / Git aufgebaut Workflow ... Überblick
  6. 6. 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
  7. 7. 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
  8. 8. 8 2. Module installieren ‣  Benötigte Module in configuration/Puppetfile definieren Workflow ... Puppet Module installieren
  9. 9. 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
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. 13 Übersicht über den Workflow Workflow ... Übersicht
  14. 14. 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
  15. 15. 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
  16. 16. Workflow 16 Skeleton ... eine Vorlage für alle Module Containment Skeleton Modul Benutzer- verwaltung
  17. 17. 17 Problem 1 ‣  Wie beginne ich mit einem neuen Modul? ‣  Wie muss ein Modul aussehen? Skeleton ... eine Vorlage für alle Module
  18. 18. 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
  19. 19. 19 Fail fast Prinzip ‣  Beispiel: Skeleton ... abbrechen wenn die Plattform nicht getestet wurde
  20. 20. 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
  21. 21. 21 Reihenfolge der Klassen festlegen ‣  Eine Möglichkeit (vgl. Containment Kapitel) Skeleton ... Abhängigkeiten zwischen Klassen festlegen
  22. 22. 22 Beispiel: Modulefile ‣  Enthält die Metadaten eines Moduls Skeleton ... Metadaten festlegen
  23. 23. 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
  24. 24. Workflow 24 Containment ... Abhängigkeiten zwischen Klassen modellieren Containment Skeleton Modul Benutzer- verwaltung
  25. 25. 25 Problem 4 ‣  Ach wie schön, ein Dependency Cylce J ‣  Was bedeutet Containment? Containment ... Abhängigkeiten zwischen Klassen modellieren
  26. 26. 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
  27. 27. 27 Beispiel 1 – include Containment ... include
  28. 28. 28 Beispiel 1 – include Containment ... include
  29. 29. 29 Beispiel 2 – require Containment ... require
  30. 30. 30 Beispiel 2 – require Containment ... require
  31. 31. 31 Beispiel 3 – Chaining Containment ... chaining
  32. 32. 32 Beispiel 3 – Chaining Containment ... chaining
  33. 33. 33 Beispiel 4 – Chaining zweiter Versuch Containment ... chaining .. chaining
  34. 34. 34 Beispiel 4 – Chaining zweiter Versuch Containment ... chaining
  35. 35. 35 Beispiel 5 – Anchor Pattern (Puppet < 3.4) Containment ... anchor
  36. 36. 36 Beispiel 5 – Anchor Pattern (Puppet < 3.4) Containment ... anchor
  37. 37. 37 Beispiel 6 – contain, Verwendung wie include (Puppet >= 3.4) Containment ... contain
  38. 38. 38 Beispiel 6 – contain, Verwendung wie include (Puppet >= 3.4) Containment ... contain
  39. 39. Workflow 39 Entscheidungen im Vorfeld ... Papier und Stift bitte Containment Skeleton Modul Benutzer- verwaltung
  40. 40. 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
  41. 41. 41 Eine Define für die Verwaltung der Ressourcen Hands-on ... um die Übersicht zu behalten
  42. 42. 42 Benutzer in Hiera definieren ‣  Struktur ‣  YAML Hands-on ... um die Übersicht zu behalten
  43. 43. 43 Eine Liste aller verfügbaren Benutzer aufbauen (virtual) Hands-on ... um die Übersicht zu behalten
  44. 44. 44 Benutzer anhand von Kriterien ausrollen wo sie benötigt werden Hands-on ... um die Übersicht zu behalten
  45. 45. 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
  46. 46. 46 Fazit ‣  Verzeichnisstruktur nach Aufgaben und Umgebungen sortieren ‣  Die lokale Testumgebung ist der erste Umgebung die funktionieren muss! Fazit ... um die Übersicht zu behalten
  47. 47. 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: alexander.pacnik@inovex.de
  48. 48. Anhang
  49. 49. 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

×