SlideShare une entreprise Scribd logo
1  sur  48
Télécharger pour lire hors ligne
Linux Tag 2013 - Puppet
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
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
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?
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?
Umgebungen
6
Reihenfolgen und Abhängigkeiten
... Abhängigkeiten modellieren
Abhängig-
keiten
Trennung
von Daten
und Code
Modul
Best
Practices
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
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
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
10
Anwendung auf dem Node
‣  puppet agent --environment <name>
‣  puppet agent --environment <name> --noop
Dynamic Environments
... Weiterentwicklung mit temporären Umgebungen
11
Anwendung zentral über Puppet
Dynamic Environments
... Weiterentwicklung mit temporären Umgebungen
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
Umgebungen
13
Reihenfolgen und Abhängigkeiten
... Abhängigkeiten modellieren
Abhängig-
keiten
Trennung
von Daten
und Code
Modul
Best
Practices
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
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
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
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
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
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
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
21
Extlookup
‣  Hierarchischer Lookup einer Variable im datadir basierend auf Fact und Key
Extlookup – Beispiel
Trennung von Daten und Code
... mittels extlookup
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
23
Hiera
‣  Hierarchischer Lookup einer Variable im datadir ähnlich wie extlookup
Hiera – Konfiguration
Trennung von Daten und Code
... mittels Hiera
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
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
26
Hiera und Node Definitions
‣  Liste von Klassen aus Hiera abfragen und anwenden
Trennung von Daten und Code
... mittels Hiera
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
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
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
Umgebungen
30
Reihenfolgen und Abhängigkeiten
... Abhängigkeiten modellieren
Abhängig-
keiten
Trennung
von Daten
und Code
Modul
Best
Practices
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
32
Reihenfolgen und Abhängigkeiten
1.  Metaparameter
2.  Chaining
3.  Die „require“ Funktion
4.  Run Stages
Reihenfolgen und Abhängigkeiten
... die Möglichkeiten
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
34
Metaparameter – Beispiel
Reihenfolgen und Abhängigkeiten
... die Verwendung von Metaparametern
35
Metaparameter – Vor- und Nachteile
Pro: funktionieren mit jedem Ressourcen Typ
Con: wird schnell unübersichtlich
Reihenfolgen und Abhängigkeiten
... die Verwendung von Metaparametern
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
37
Chaining – Anwendungsfälle
‣  Ressourcen Deklarationen
‣  Puppet Code Blöcke
Reihenfolgen und Abhängigkeiten
... Chaining
38
Chaining – Anwendungsfälle
‣  Ressourcen Referenzen
‣  Referenz auf eine existierende Puppet Ressource (Typ und Titel)
Reihenfolgen und Abhängigkeiten
... Chaining
39
Resource Collectors
‣  Ressourcen gruppieren anhand bestimmter Attribute
‣  Syntax: <| [Ausdruck] |>
‣  Suchausdrücke mit „!=“, „==“, „and“ und „or“
Exkurs
... Resource Collectors
40
Chaining – 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 allem im Zusammenspiel mit virtuellen Ressourcen
‣  Con: Gefahr von Dependency Cycles insbesondere mit virtuellen Ressourcen
puppet agent --configprint graphdir
Reihenfolgen und Abhängigkeiten
... Chaining
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
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
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
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
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
alexander.pacnik@inovex.de
Anhang
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

Contenu connexe

Similaire à Puppet - Umgebungen, Daten & Code, Abhängigkeiten

Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestalten
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestaltenMarkus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestalten
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestaltenInformatik Aktuell
 
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAFH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAMarcus Riemer
 
Lösungsorientierte Fehlerbehandlung
Lösungsorientierte FehlerbehandlungLösungsorientierte Fehlerbehandlung
Lösungsorientierte Fehlerbehandlungroskakori
 
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeasSystem-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeasSpeedPartner GmbH
 
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Stephan Hochdörfer
 
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...André Krämer
 
PostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePeter Eisentraut
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring PatternsHendrik Lösch
 
Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Hendrik Lösch
 
OSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
OSMC 2012 | Performance graphing mit inGraph by Eric LippmannOSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
OSMC 2012 | Performance graphing mit inGraph by Eric LippmannNETWAYS
 
Legacy Code refaktorisieren
Legacy Code refaktorisierenLegacy Code refaktorisieren
Legacy Code refaktorisierenHendrik Lösch
 
Schweine latein-vortrag
Schweine latein-vortragSchweine latein-vortrag
Schweine latein-vortragRamon Wartala
 
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)nwilbert
 
Dokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDBDokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDBMario Müller
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastrukturinovex GmbH
 
Einführung Datenanalyse mit Pandas [data2day]
Einführung Datenanalyse mit Pandas [data2day]Einführung Datenanalyse mit Pandas [data2day]
Einführung Datenanalyse mit Pandas [data2day]Alexander Hendorf
 
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeasSystem-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeasSpeedPartner GmbH
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
Die Macht der Zahlen
Die Macht der ZahlenDie Macht der Zahlen
Die Macht der ZahlenGerrit Beine
 

Similaire à Puppet - Umgebungen, Daten & Code, Abhängigkeiten (20)

Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestalten
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestaltenMarkus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestalten
Markus Winand – IT-Tage 2015 – Den Suchraum des Optimizers gestalten
 
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAFH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
 
Lösungsorientierte Fehlerbehandlung
Lösungsorientierte FehlerbehandlungLösungsorientierte Fehlerbehandlung
Lösungsorientierte Fehlerbehandlung
 
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeasSystem-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
 
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
 
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
 
PostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie Datenbankalternative
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring Patterns
 
Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018
 
OSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
OSMC 2012 | Performance graphing mit inGraph by Eric LippmannOSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
OSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
 
Legacy Code refaktorisieren
Legacy Code refaktorisierenLegacy Code refaktorisieren
Legacy Code refaktorisieren
 
Schweine latein-vortrag
Schweine latein-vortragSchweine latein-vortrag
Schweine latein-vortrag
 
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
Python in Computational Neuroscience & Modular toolkit for Data Processing (MDP)
 
Drupal und twig
Drupal und twigDrupal und twig
Drupal und twig
 
Dokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDBDokumentenorientiere Datenbanken am Beispiel CouchDB
Dokumentenorientiere Datenbanken am Beispiel CouchDB
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastruktur
 
Einführung Datenanalyse mit Pandas [data2day]
Einführung Datenanalyse mit Pandas [data2day]Einführung Datenanalyse mit Pandas [data2day]
Einführung Datenanalyse mit Pandas [data2day]
 
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeasSystem-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
System-Management-Trio: Zentrale Verwaltung mit facter, puppet und augeas
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Die Macht der Zahlen
Die Macht der ZahlenDie Macht der Zahlen
Die Macht der Zahlen
 

Plus de inovex GmbH

lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegeninovex GmbH
 
Are you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIAre you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIinovex GmbH
 
Why natural language is next step in the AI evolution
Why natural language is next step in the AI evolutionWhy natural language is next step in the AI evolution
Why natural language is next step in the AI evolutioninovex GmbH
 
Network Policies
Network PoliciesNetwork Policies
Network Policiesinovex GmbH
 
Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learninginovex GmbH
 
Jenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen UmgebungenJenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen Umgebungeninovex GmbH
 
AI auf Edge-Geraeten
AI auf Edge-GeraetenAI auf Edge-Geraeten
AI auf Edge-Geraeteninovex GmbH
 
Prometheus on Kubernetes
Prometheus on KubernetesPrometheus on Kubernetes
Prometheus on Kubernetesinovex GmbH
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systemsinovex GmbH
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreiheninovex GmbH
 
Talk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale AssistentenTalk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale Assistenteninovex GmbH
 
Künstlich intelligent?
Künstlich intelligent?Künstlich intelligent?
Künstlich intelligent?inovex GmbH
 
Das Android Open Source Project
Das Android Open Source ProjectDas Android Open Source Project
Das Android Open Source Projectinovex GmbH
 
Machine Learning Interpretability
Machine Learning InterpretabilityMachine Learning Interpretability
Machine Learning Interpretabilityinovex GmbH
 
Performance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use casePerformance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use caseinovex GmbH
 
People & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessPeople & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessinovex GmbH
 
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with PulumiInfrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with Pulumiinovex GmbH
 

Plus de inovex GmbH (20)

lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
 
Are you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIAre you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AI
 
Why natural language is next step in the AI evolution
Why natural language is next step in the AI evolutionWhy natural language is next step in the AI evolution
Why natural language is next step in the AI evolution
 
WWDC 2019 Recap
WWDC 2019 RecapWWDC 2019 Recap
WWDC 2019 Recap
 
Network Policies
Network PoliciesNetwork Policies
Network Policies
 
Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learning
 
Jenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen UmgebungenJenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen Umgebungen
 
AI auf Edge-Geraeten
AI auf Edge-GeraetenAI auf Edge-Geraeten
AI auf Edge-Geraeten
 
Prometheus on Kubernetes
Prometheus on KubernetesPrometheus on Kubernetes
Prometheus on Kubernetes
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systems
 
Azure IoT Edge
Azure IoT EdgeAzure IoT Edge
Azure IoT Edge
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreihen
 
Talk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale AssistentenTalk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale Assistenten
 
Künstlich intelligent?
Künstlich intelligent?Künstlich intelligent?
Künstlich intelligent?
 
Dev + Ops = Go
Dev + Ops = GoDev + Ops = Go
Dev + Ops = Go
 
Das Android Open Source Project
Das Android Open Source ProjectDas Android Open Source Project
Das Android Open Source Project
 
Machine Learning Interpretability
Machine Learning InterpretabilityMachine Learning Interpretability
Machine Learning Interpretability
 
Performance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use casePerformance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use case
 
People & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessPeople & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madness
 
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with PulumiInfrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
 

Puppet - Umgebungen, Daten & Code, Abhängigkeiten

  • 1. Linux Tag 2013 - Puppet Umgebungen, Daten & Code, Abhängigkeiten Alexander Pacnik Karlsruhe, 23.05.2013
  • 2. Umgebungen 2 Die Agenda ... worum es in diesem Vortrag geht Abhängig- keiten Trennung von Daten und Code Modul Best Practices
  • 3. 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
  • 4. 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?
  • 5. 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?
  • 6. Umgebungen 6 Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren Abhängig- keiten Trennung von Daten und Code Modul Best Practices
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 10 Anwendung auf dem Node ‣  puppet agent --environment <name> ‣  puppet agent --environment <name> --noop Dynamic Environments ... Weiterentwicklung mit temporären Umgebungen
  • 11. 11 Anwendung zentral über Puppet Dynamic Environments ... Weiterentwicklung mit temporären Umgebungen
  • 12. 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
  • 13. Umgebungen 13 Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren Abhängig- keiten Trennung von Daten und Code Modul Best Practices
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 21 Extlookup ‣  Hierarchischer Lookup einer Variable im datadir basierend auf Fact und Key Extlookup – Beispiel Trennung von Daten und Code ... mittels extlookup
  • 22. 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
  • 23. 23 Hiera ‣  Hierarchischer Lookup einer Variable im datadir ähnlich wie extlookup Hiera – Konfiguration Trennung von Daten und Code ... mittels Hiera
  • 24. 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
  • 25. 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
  • 26. 26 Hiera und Node Definitions ‣  Liste von Klassen aus Hiera abfragen und anwenden Trennung von Daten und Code ... mittels Hiera
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. Umgebungen 30 Reihenfolgen und Abhängigkeiten ... Abhängigkeiten modellieren Abhängig- keiten Trennung von Daten und Code Modul Best Practices
  • 31. 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
  • 32. 32 Reihenfolgen und Abhängigkeiten 1.  Metaparameter 2.  Chaining 3.  Die „require“ Funktion 4.  Run Stages Reihenfolgen und Abhängigkeiten ... die Möglichkeiten
  • 33. 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
  • 34. 34 Metaparameter – Beispiel Reihenfolgen und Abhängigkeiten ... die Verwendung von Metaparametern
  • 35. 35 Metaparameter – Vor- und Nachteile Pro: funktionieren mit jedem Ressourcen Typ Con: wird schnell unübersichtlich Reihenfolgen und Abhängigkeiten ... die Verwendung von Metaparametern
  • 36. 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
  • 37. 37 Chaining – Anwendungsfälle ‣  Ressourcen Deklarationen ‣  Puppet Code Blöcke Reihenfolgen und Abhängigkeiten ... Chaining
  • 38. 38 Chaining – Anwendungsfälle ‣  Ressourcen Referenzen ‣  Referenz auf eine existierende Puppet Ressource (Typ und Titel) Reihenfolgen und Abhängigkeiten ... Chaining
  • 39. 39 Resource Collectors ‣  Ressourcen gruppieren anhand bestimmter Attribute ‣  Syntax: <| [Ausdruck] |> ‣  Suchausdrücke mit „!=“, „==“, „and“ und „or“ Exkurs ... Resource Collectors
  • 40. 40 Chaining – Anwendungsfälle ‣  Ressourcen Collectoren (auch virtuelle Ressourcen) Reihenfolgen und Abhängigkeiten ... Chaining
  • 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 Ressourcen puppet agent --configprint graphdir Reihenfolgen und Abhängigkeiten ... Chaining
  • 42. 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
  • 43. 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
  • 44. 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
  • 45. 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
  • 46. 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 alexander.pacnik@inovex.de
  • 48. 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