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

Weitere ähnliche Inhalte

Ähnlich wie Puppet - Entwicklungsworkflow und Basismodule

Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastrukturinovex GmbH
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppetinovex GmbH
 
OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...
OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...
OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...
NETWAYS
 
Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014
Martin Alfke
 
Puppet - Umgebungen, Daten & Code, Abhängigkeiten
Puppet - Umgebungen, Daten & Code, AbhängigkeitenPuppet - Umgebungen, Daten & Code, Abhängigkeiten
Puppet - Umgebungen, Daten & Code, Abhängigkeiten
inovex GmbH
 
Web Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 BetaWeb Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 Beta
Hans-Joachim Piepereit
 
Icinga mit Puppet - Hamburg 2013
Icinga mit Puppet  - Hamburg 2013Icinga mit Puppet  - Hamburg 2013
Icinga mit Puppet - Hamburg 2013
NETWAYS
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
inovex GmbH
 
Nebenlaeufigkeit mit Koroutinen strukturieren
Nebenlaeufigkeit mit Koroutinen strukturierenNebenlaeufigkeit mit Koroutinen strukturieren
Nebenlaeufigkeit mit Koroutinen strukturieren
Jörn Dinkla
 
OSDC 2011 | Puppet from Scratch by Thomas Gelf
OSDC 2011 | Puppet from Scratch by Thomas GelfOSDC 2011 | Puppet from Scratch by Thomas Gelf
OSDC 2011 | Puppet from Scratch by Thomas Gelf
NETWAYS
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
OPITZ CONSULTING Deutschland
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...inovex GmbH
 
Docker Workbench
Docker WorkbenchDocker Workbench
Docker Workbench
Patrick Paechnatz
 
Nebenläufigkeit mit Kotlins Koroutinen
Nebenläufigkeit mit Kotlins KoroutinenNebenläufigkeit mit Kotlins Koroutinen
Nebenläufigkeit mit Kotlins Koroutinen
Jörn Dinkla
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedRené Winkelmeyer
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Gregor Biswanger
 
Powershell 3.0
Powershell 3.0Powershell 3.0
Powershell 3.0
Digicomp Academy AG
 
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
NETWAYS
 
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfOSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
NETWAYS
 
Azure Notebooks
Azure NotebooksAzure Notebooks
Azure Notebooks
TEitelberg
 

Ähnlich wie Puppet - Entwicklungsworkflow und Basismodule (20)

Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastruktur
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...
OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...
OSMC 2010 | Verwendung von Puppet in verteilten Monitoring Umgebungen by Birg...
 
Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014Upgrading Puppet CommitterConf Essen 2014
Upgrading Puppet CommitterConf Essen 2014
 
Puppet - Umgebungen, Daten & Code, Abhängigkeiten
Puppet - Umgebungen, Daten & Code, AbhängigkeitenPuppet - Umgebungen, Daten & Code, Abhängigkeiten
Puppet - Umgebungen, Daten & Code, Abhängigkeiten
 
Web Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 BetaWeb Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 Beta
 
Icinga mit Puppet - Hamburg 2013
Icinga mit Puppet  - Hamburg 2013Icinga mit Puppet  - Hamburg 2013
Icinga mit Puppet - Hamburg 2013
 
Entwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, PuppetEntwicklungsumgebungen - Packer, Vagrant, Puppet
Entwicklungsumgebungen - Packer, Vagrant, Puppet
 
Nebenlaeufigkeit mit Koroutinen strukturieren
Nebenlaeufigkeit mit Koroutinen strukturierenNebenlaeufigkeit mit Koroutinen strukturieren
Nebenlaeufigkeit mit Koroutinen strukturieren
 
OSDC 2011 | Puppet from Scratch by Thomas Gelf
OSDC 2011 | Puppet from Scratch by Thomas GelfOSDC 2011 | Puppet from Scratch by Thomas Gelf
OSDC 2011 | Puppet from Scratch by Thomas Gelf
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
 
Docker Workbench
Docker WorkbenchDocker Workbench
Docker Workbench
 
Nebenläufigkeit mit Kotlins Koroutinen
Nebenläufigkeit mit Kotlins KoroutinenNebenläufigkeit mit Kotlins Koroutinen
Nebenläufigkeit mit Kotlins Koroutinen
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
Powershell 3.0
Powershell 3.0Powershell 3.0
Powershell 3.0
 
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
 
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfOSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
 
Azure Notebooks
Azure NotebooksAzure Notebooks
Azure Notebooks
 

Mehr von inovex GmbH

lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
inovex 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 AI
inovex 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 evolution
inovex GmbH
 
WWDC 2019 Recap
WWDC 2019 RecapWWDC 2019 Recap
WWDC 2019 Recap
inovex GmbH
 
Network Policies
Network PoliciesNetwork Policies
Network Policies
inovex GmbH
 
Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learning
inovex 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 Umgebungen
inovex GmbH
 
AI auf Edge-Geraeten
AI auf Edge-GeraetenAI auf Edge-Geraeten
AI auf Edge-Geraeten
inovex GmbH
 
Prometheus on Kubernetes
Prometheus on KubernetesPrometheus on Kubernetes
Prometheus on Kubernetes
inovex GmbH
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systems
inovex GmbH
 
Azure IoT Edge
Azure IoT EdgeAzure IoT Edge
Azure IoT Edge
inovex GmbH
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreihen
inovex 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 Assistenten
inovex GmbH
 
Künstlich intelligent?
Künstlich intelligent?Künstlich intelligent?
Künstlich intelligent?
inovex GmbH
 
Dev + Ops = Go
Dev + Ops = GoDev + Ops = Go
Dev + Ops = Go
inovex GmbH
 
Das Android Open Source Project
Das Android Open Source ProjectDas Android Open Source Project
Das Android Open Source Project
inovex GmbH
 
Machine Learning Interpretability
Machine Learning InterpretabilityMachine Learning Interpretability
Machine Learning Interpretability
inovex 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 case
inovex 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 madness
inovex 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 Pulumi
inovex GmbH
 

Mehr von 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 - Entwicklungsworkflow und Basismodule

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