Linux Tag 2013 - PuppetUmgebungen, Daten & Code, AbhängigkeitenAlexander PacnikKarlsruhe, 23.05.2013
Umgebungen2Die Agenda... worum es in diesem Vortrag gehtAbhängig-keitenTrennungvon Datenund CodeModulBestPractices
3Aufgabe‣  Repositories und Module für heterogene Systemlandschaften verwaltenZiele‣  Wartbarkeit erhöhen‣  Transparenz sc...
4Konfigurationsverwaltung‣  So einfach und minimal wie möglich‣  Daten und Code trennen‣  Konfigurationen beim Anwenden te...
5Umgebungsverwaltung‣  Redundanzen vermeiden‣  Auseinanderlaufen verhindernKlärungen‣  Paketabhängigkeiten in Puppet oder ...
Umgebungen6Reihenfolgen und Abhängigkeiten... Abhängigkeiten modellierenAbhängig-keitenTrennungvon Datenund CodeModulBestP...
7Ziel‣  Umgebungen abbilden (Test, Abnahme, Produktion)‣  Nach Möglichkeit gleiche Codebasis‣  Versionsstände abbilden (Fe...
8Erklärung Environment‣  Environment Konfiguration (puppet.conf)‣  manifest ($manifestdir/site.pp)‣  modulepath ($confdir/...
9Konfiguration auf dem Master (puppet.conf)‣  Möglichkeit einfach neuen Code zu testen[master]environment = productionmani...
10Anwendung auf dem Node‣  puppet agent --environment <name>‣  puppet agent --environment <name> --noopDynamic Environment...
11Anwendung zentral über PuppetDynamic Environments... Weiterentwicklung mit temporären Umgebungen
12Environments & VCS Best Practices‣  Alles Versionieren‣  Style und Syntax Check mit Puppet Lint (pre-commit)‣  Monitorin...
Umgebungen13Reihenfolgen und Abhängigkeiten... Abhängigkeiten modellierenAbhängig-keitenTrennungvon Datenund CodeModulBest...
14Trennung von Daten und Code – Möglichkeiten1.  Top Scope Variable2.  Node Inheritance3.  Parametrisierte Klassen4.  Extl...
15Variable im Top Scope‣  Variable werden im zentralen Manifest definiert und in den Modulen verwendetVariable im Top Scop...
16Variable im Top Scope – Vor- und Nachteile‣  Pro: Sehr einfach‣  Pro: defacto Trennung von Code und Daten‣  Con: immer n...
17Node Inheritance‣  Variable werden in Nodes definiert und über Vererbung die Hierarchie abgebildetNode Inheritance – Bei...
18Node Inheritance – Vor- und Nachteile‣  Pro: Sehr einfach‣  Pro: defacto Trennung der Daten vom Code‣  Con: immer noch i...
19Parametrisierte Klassen‣  Variable werden in Nodes definiert und über Vererbung die Hierarchie abgebildetParametrisierte...
20Parametrisierte Klassen – Vor- und Nachteile‣  Pro: Daten nicht mehr im Modulcode und Defaultwerte möglich (Lesbarkeit)‣...
21Extlookup‣  Hierarchischer Lookup einer Variable im datadir basierend auf Fact und KeyExtlookup – BeispielTrennung von D...
22Extlookup – Vor- und Nachteile‣  Pro: dynamische und hierarchische Abbildung von Werten‣  Con: schlechte Wartbarkeit (CS...
23Hiera‣  Hierarchischer Lookup einer Variable im datadir ähnlich wie extlookupHiera – KonfigurationTrennung von Daten und...
24Hiera Beispiele‣  hiera – spezifischen Wert anhand des Schlüssels zurückliefern$local_var = hiera(my_name)‣  hiera_array...
25Hiera auf der Kommandozeile‣  Die YAML Datenbank abfragenhiera <key> [Optionen]‣  Wichtige Optionen‣  --yaml <file>‣  --...
26Hiera und Node Definitions‣  Liste von Klassen aus Hiera abfragen und anwendenTrennung von Daten und Code... mittels Hiera
27Hiera – Vor- und Nachteile‣  Pro: dynamische und hierarchische Abbildung von Werten‣  Pro: Default Werte möglich‣  Pro: ...
28Hiera Best Practices‣  Hiera nicht in Templates sondern nur im Manifest verwenden (Lesbarkeit)‣  Hierarchien minimal hal...
29Empfehlung‣  So nah wie möglich am Code (Lesbarkeit)‣  Seit weit entfernt wie nötig (Abstrahierbarkeit)‣  Im Zweifel Hie...
Umgebungen30Reihenfolgen und Abhängigkeiten... Abhängigkeiten modellierenAbhängig-keitenTrennungvon Datenund CodeModulBest...
31Grund‣  Reihenfolge im Manifest wird nicht beachtet (deklarativ)‣  Abhängigkeiten zwischen Ressourcen müssen modelliert ...
32Reihenfolgen und Abhängigkeiten1.  Metaparameter2.  Chaining3.  Die „require“ Funktion4.  Run StagesReihenfolgen und Abh...
33Metaparameter‣  Einsatzzweck: Abhängigkeiten zwischen Ressourcen‣  Before (Ressource vor einer anderen anwenden)‣  Requi...
34Metaparameter – BeispielReihenfolgen und Abhängigkeiten... die Verwendung von Metaparametern
35Metaparameter – Vor- und NachteilePro: funktionieren mit jedem Ressourcen TypCon: wird schnell unübersichtlichReihenfolg...
36Chaining‣  Einsatzzweck: Abhängigkeiten zwischen Ressourcen(-gruppen)‣  -> (ordering arrow)Die Ressource links des Pfeil...
37Chaining – Anwendungsfälle‣  Ressourcen Deklarationen‣  Puppet Code BlöckeReihenfolgen und Abhängigkeiten... Chaining
38Chaining – Anwendungsfälle‣  Ressourcen Referenzen‣  Referenz auf eine existierende Puppet Ressource (Typ und Titel)Reih...
39Resource Collectors‣  Ressourcen gruppieren anhand bestimmter Attribute‣  Syntax: <| [Ausdruck] |>‣  Suchausdrücke mit „...
40Chaining – Anwendungsfälle‣  Ressourcen Collectoren (auch virtuelle Ressourcen)Reihenfolgen und Abhängigkeiten... Chaining
41‣  Chaining – Vor und Nachteile‣  Pro: Funktioniert für Ressourcen und Gruppen von Ressourcen‣  Pro: sehr flexibel vor a...
42Funktion „require“‣  Einsatzzweck: Abhängigkeiten zwischen Klassen abbilden‣  require (Klassen vor einer Ressource anwen...
43Run Stages‣  Einsatzzweck: Gruppe von Klassen die vor oder nach allem anderen laufen soll‣  Definition über einen Ressou...
44Run Stages – Vor- und Nachteile‣  Pro: Massenabhängigkeiten abbildbar‣  Con: funktioniert nicht mit include, subscribe o...
45Zusammenfassung‣  Abhängigkeiten innerhalb von Klassen mit Metaparametern und Chaining‣  Abhängigkeiten zwischen Klassen...
46Vielen Dank für Ihre AufmerksamkeitKontaktAlexander PacnikSystems Engineeringinovex GmbHOffice KarlsruheZur Gießerei 167...
Anhang
48Quellen‣  Puppet Style Guidehttp://docs.puppetlabs.com/guides/style_guide.html‣  Puppet Language Guidehttp://docs.puppet...
Nächste SlideShare
Wird geladen in …5
×

Puppet - Umgebungen, Daten & Code, Abhängigkeiten

580 Aufrufe

Veröffentlicht am

Der Vortrag beschreibt Möglichkeiten zur sinnvollen Trennung von Daten und Module mit Puppet 3. Insbesondere in heterogenen Systemlandschaften und über Umgebungsgrenzen hinweg gilt es, die Freiheiten, die Puppet zur Verfügung stellt, richtig einzusetzen.
Es wird die Verwendung von Variablen im Top Scope, parametrisierten Klassen und Hiera beschrieben, mit Hilfe derer dies erreicht werden kann. Der Umgang mit Default-Werten bzw. Parametern wird anhand der params.pp oder Hashes in Templates beschrieben und an Code-Beispielen verdeutlich. Im letzten Schritt wird auf notwendige Tests und den Umgang mit Modulabhängigkeiten eingegangen, die durch diese Aufteilung notwendig werden und zur Wartbarkeit des Codes beitragen.

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

Keine Downloads
Aufrufe
Aufrufe insgesamt
580
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
7
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Puppet - Umgebungen, Daten & Code, Abhängigkeiten

  1. 1. Linux Tag 2013 - PuppetUmgebungen, Daten & Code, AbhängigkeitenAlexander PacnikKarlsruhe, 23.05.2013
  2. 2. Umgebungen2Die Agenda... worum es in diesem Vortrag gehtAbhängig-keitenTrennungvon Datenund CodeModulBestPractices
  3. 3. 3Aufgabe‣  Repositories und Module für heterogene Systemlandschaften verwaltenZiele‣  Wartbarkeit erhöhen‣  Transparenz schaffen‣  Prozess erzwingenWeg‣  Umgebungen, Modellierung von Daten und AbhängigkeitenEinleitung... worum es in diesem Vortrag geht
  4. 4. 4Konfigurationsverwaltung‣  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 überwachenEinleitung... worum geht es bei der Konfigurationsverwaltung?
  5. 5. 5Umgebungsverwaltung‣  Redundanzen vermeiden‣  Auseinanderlaufen verhindernKlärungen‣  Paketabhängigkeiten in Puppet oder Paketmanagement‣  Baremetal, Betriebsystem, Dienste, ApplikationenEinleitung... worum geht es bei der Umgebungsverwaltung?
  6. 6. Umgebungen6Reihenfolgen und Abhängigkeiten... Abhängigkeiten modellierenAbhängig-keitenTrennungvon Datenund CodeModulBestPractices
  7. 7. 7Ziel‣  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
  8. 8. 8Erklärung Environment‣  Environment Konfiguration (puppet.conf)‣  manifest ($manifestdir/site.pp)‣  modulepath ($confdir/modules)‣  manifestdir ($confdir/manifests)‣  templatedir ($vardir/templates)‣  Zugriff in Modulen über $environmentEnvironments... die Verwaltung von Umgebungen mit Puppet
  9. 9. 9Konfiguration auf dem Master (puppet.conf)‣  Möglichkeit einfach neuen Code zu testen[master]environment = productionmanifest = $confdir/environments/$environment/manifests/site.ppmodulepath = $confdir/environments/$environment/modules[agent]environment = productionDynamic Environments... Weiterentwicklung mit temporären Umgebungen
  10. 10. 10Anwendung auf dem Node‣  puppet agent --environment <name>‣  puppet agent --environment <name> --noopDynamic Environments... Weiterentwicklung mit temporären Umgebungen
  11. 11. 11Anwendung zentral über PuppetDynamic Environments... Weiterentwicklung mit temporären Umgebungen
  12. 12. 12Environments & VCS Best Practices‣  Alles Versionieren‣  Style und Syntax Check mit Puppet Lint (pre-commit)‣  Monitoring für alles was im Puppet verwaltet wirdEnvironments... die Verwaltung von Umgebungen mit Puppet
  13. 13. Umgebungen13Reihenfolgen und Abhängigkeiten... Abhängigkeiten modellierenAbhängig-keitenTrennungvon Datenund CodeModulBestPractices
  14. 14. 14Trennung von Daten und Code – Möglichkeiten1.  Top Scope Variable2.  Node Inheritance3.  Parametrisierte Klassen4.  Extlookup5.  HieraTrennung von Daten und Code... die Möglichkeiten
  15. 15. 15Variable im Top Scope‣  Variable werden im zentralen Manifest definiert und in den Modulen verwendetVariable im Top Scope – BeispielTrennung von Daten und Code... mittels Variablen
  16. 16. 16Variable 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 istTrennung von Daten und Code... mittels Variablen
  17. 17. 17Node Inheritance‣  Variable werden in Nodes definiert und über Vererbung die Hierarchie abgebildetNode Inheritance – BeispielTrennung von Daten und Code... mittels Node Inheritance
  18. 18. 18Node 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 istTrennung von Daten und Code... mittels Node Inheritance
  19. 19. 19Parametrisierte Klassen‣  Variable werden in Nodes definiert und über Vererbung die Hierarchie abgebildetParametrisierte Klassen – BeispielTrennung von Daten und Code... mittels parametrisierte Klassen
  20. 20. 20Parametrisierte 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 ausgelagertTrennung von Daten und Code... mittels parametrisierte Klassen
  21. 21. 21Extlookup‣  Hierarchischer Lookup einer Variable im datadir basierend auf Fact und KeyExtlookup – BeispielTrennung von Daten und Code... mittels extlookup
  22. 22. 22Extlookup – Vor- und Nachteile‣  Pro: dynamische und hierarchische Abbildung von Werten‣  Con: schlechte Wartbarkeit (CSV)‣  Con: liefert nur den ersten Wert, keine zusammengesetzten WerteTrennung von Daten und Code... mittels extlookup
  23. 23. 23Hiera‣  Hierarchischer Lookup einer Variable im datadir ähnlich wie extlookupHiera – KonfigurationTrennung von Daten und Code... mittels Hiera
  24. 24. 24Hiera 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
  25. 25. 25Hiera auf der Kommandozeile‣  Die YAML Datenbank abfragenhiera <key> [Optionen]‣  Wichtige Optionen‣  --yaml <file>‣  --array‣  --hashTrennung von Daten und Code... mittels Hiera
  26. 26. 26Hiera und Node Definitions‣  Liste von Klassen aus Hiera abfragen und anwendenTrennung von Daten und Code... mittels Hiera
  27. 27. 27Hiera – Vor- und Nachteile‣  Pro: dynamische und hierarchische Abbildung von Werten‣  Pro: Default Werte möglich‣  Pro: Trennung von Code und Daten‣  Pro: zusammengesetzten WerteTrennung von Daten und Code... mittels Hiera
  28. 28. 28Hiera 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}/hieradataTrennung von Daten und Code... mittels Hiera
  29. 29. 29Empfehlung‣  So nah wie möglich am Code (Lesbarkeit)‣  Seit weit entfernt wie nötig (Abstrahierbarkeit)‣  Im Zweifel Hiera‣  Default-Werte verwendenTrennung von Daten und Code... die Zusammenfassung
  30. 30. Umgebungen30Reihenfolgen und Abhängigkeiten... Abhängigkeiten modellierenAbhängig-keitenTrennungvon Datenund CodeModulBestPractices
  31. 31. 31Grund‣  Reihenfolge im Manifest wird nicht beachtet (deklarativ)‣  Abhängigkeiten zwischen Ressourcen müssen modelliert werdenProblem‣  Reihenfolgen oft doch relevant‣  z.B. Dienst installieren, konfigurieren und startenReihenfolgen und Abhängigkeiten... die Problemstellung
  32. 32. 32Reihenfolgen und Abhängigkeiten1.  Metaparameter2.  Chaining3.  Die „require“ Funktion4.  Run StagesReihenfolgen und Abhängigkeiten... die Möglichkeiten
  33. 33. 33Metaparameter‣  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
  34. 34. 34Metaparameter – BeispielReihenfolgen und Abhängigkeiten... die Verwendung von Metaparametern
  35. 35. 35Metaparameter – Vor- und NachteilePro: funktionieren mit jedem Ressourcen TypCon: wird schnell unübersichtlichReihenfolgen und Abhängigkeiten... die Verwendung von Metaparametern
  36. 36. 36Chaining‣  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 wirddie Rechte benachrichtigt‣  Best Practice: Pfeile nur in eine Richtung (rechts) verwendenReihenfolgen und Abhängigkeiten... Chaining
  37. 37. 37Chaining – Anwendungsfälle‣  Ressourcen Deklarationen‣  Puppet Code BlöckeReihenfolgen und Abhängigkeiten... Chaining
  38. 38. 38Chaining – Anwendungsfälle‣  Ressourcen Referenzen‣  Referenz auf eine existierende Puppet Ressource (Typ und Titel)Reihenfolgen und Abhängigkeiten... Chaining
  39. 39. 39Resource Collectors‣  Ressourcen gruppieren anhand bestimmter Attribute‣  Syntax: <| [Ausdruck] |>‣  Suchausdrücke mit „!=“, „==“, „and“ und „or“Exkurs... Resource Collectors
  40. 40. 40Chaining – Anwendungsfälle‣  Ressourcen Collectoren (auch virtuelle Ressourcen)Reihenfolgen und Abhängigkeiten... Chaining
  41. 41. 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 Ressourcenpuppet agent --configprint graphdirReihenfolgen und Abhängigkeiten... Chaining
  42. 42. 42Funktion „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 includeFunktion „require“ – BeispielReihenfolgen und Abhängigkeiten... die „require“ Funktion
  43. 43. 43Run Stages‣  Einsatzzweck: Gruppe von Klassen die vor oder nach allem anderen laufen soll‣  Definition über einen Ressource Type, Verwendung durch Zuweisung einesMetaparameters in einer KlasseRun Stages – BeispielReihenfolgen und Abhängigkeiten... run stages für Massenabhängigkeiten
  44. 44. 44Run 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 PaketrepositoriesReihenfolgen und Abhängigkeiten... run stages für Massenabhängigkeiten
  45. 45. 45Zusammenfassung‣  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 vermeidenReihenfolgen und Abhängigkeiten... die Zusammenfassung
  46. 46. 46Vielen Dank für Ihre AufmerksamkeitKontaktAlexander PacnikSystems Engineeringinovex GmbHOffice KarlsruheZur Gießerei 1676227 Karlsruhe+49 (0)173 3181 040alexander.pacnik@inovex.de
  47. 47. Anhang
  48. 48. 48Quellen‣  Puppet Style Guidehttp://docs.puppetlabs.com/guides/style_guide.html‣  Puppet Language Guidehttp://docs.puppetlabs.com/guides/language_guide.html‣  Puppet Referenzenhttp://docs.puppetlabs.com/references/latest/‣  Puppet Guideshttp://docs.puppetlabs.com/guides/‣  Puppet Bloghttps://puppetlabs.com/blog/Lizenz des Vortrags‣  Creative Commons (by-nc-nd)Anhang... wo sie in Ruhe nachlesen können

×