SlideShare uma empresa Scribd logo
1 de 55
Baixar para ler offline
Linux Tag 2014 - Puppet
Designing Moduls and Repositories
Alexander Pacnik
Karlsruhe, 08.05.2014
2
Der Schlüssel zum Erfolg ist die Kultur, nicht das Werkzeug
‣  Infrastructure as Code – der gleiche Code für alle Umgebungen (Transparenz)
‣  Continuous Delivery – Ergebnis und die Prozesse in den Mittelpunkt stellen
‣  Infrastructure Testing – die Basis jeglicher Automatisierung und Wartbarkeit
Einleitung
... worum es in diesem Vortrag geht
3
Problemstellung: Unterschiedliche Anforderungen
‣  Anforderungen Betrieb (beispielsweise verschiedene Umgebungen)
‣  Anforderungen Entwicklung (beispielsweise schnelles Deployment)
‣  Anforderungen QA (beispielsweise Testbarkeit)
‣  Ziel: Flexibilität
Einleitung
... worum es in diesem Vortrag geht
Designing
Puppet
4
Entscheidungen im Vorfeld
... Papier und Stift bitte
Designing
Repositories
and
Environments
Designing
Modules
Getting
started
5
Ziele
‣  Anforderungsanalyse
‣  Entscheidung explizit treffen, wie Puppet verwendet werden soll
Designing Puppet
... Papier und Stift bitte
6
Was (soll mit Puppet verwaltet werden)?
‣  Deploymentgrenzen anhand der Verantwortung definieren
‣  Betriebssystem
‣  Wie wird die Benutzerverwaltung umgesetzt
‣  Was wird über Pakete installiert und wie bzw. wo werden sie gebaut
(keine Binaries über Puppet verteilen!)
‣  Paketversionen über Puppet oder Paketrepository (empfohlen)
sicherstellen
‣  Deployment der Stacks (Packages, Configuration, Service)
‣  Deployment der Applikation (Binaries, Configuration, SQL)
‣  Beispiel:
‣  PaaS Ansatz: Cron Jobs, php.ini etc. nur initial mit Puppet verwaltet, dann
über das Applikations-Deployment
Designing Puppet
... Papier und Stift bitte
7
Wo (soll Puppet verwendet werden)?
‣  Umgebungen definieren
‣  Production, Stage, Test
‣  Vagrant, Docker
Designing Puppet
... Papier und Stift bitte
8
Wer (wird Puppet verwenden)?
‣  Alle Puppet Nutzer von Anfang an beteiligen
‣  System Engineers
‣  Entwickler
Designing Puppet
... Papier und Stift bitte
9
Wie (soll Puppet verwendet werden)?
‣  run mode festlegen (Ansatz wählen)
‣  Agent (State verwalten - empfohlen)
‣  Pro: Zustand eindeutig, Reports
‣  Contra: Infrastruktur notwendig
‣  Apply (Adhoc Verwaltung)
‣  Pro: einfach, über OS Pakete möglich
‣  Contra: keine Reports, nur einmalige Anwendung
‣  Pets (manuelle pflege) vs Cattle (Wegwerfware)
‣  Alle Workflows skizzieren, in denen Puppet vorkommt
‣  Puppet Entwicklung (Vagrant, Test, ...)
‣  Anwendungsentwicklung (Vagrant)
Designing Puppet
... Papier und Stift bitte
Designing
Puppet
10
Modulentwicklung
... Worauf es wirklich ankommt
Designing
Repositories
and
Environments
Designing
Modules
Getting
started
11
Problem 1
‣  Geringe Wiederverwendbarkeit von Puppet Code
‣  Hohe Komplexität des Puppet Codes
‣  häufige if-Statements
‣  Code Duplication
Strukturierung der Module
... das Baukastenprinzip und Spielregeln für mehr Übersicht
12
Component Module - Eigenschaften
‣  Unabhängig, atomar und kann jederzeit mit anderen geteilt werden
‣  Abhängigkeiten zu anderen Modulen um jeden Preis vermeiden
‣  Optionen werden über Parameter übergeben und alle Parameter werden validiert
‣  keine organisationsspezifischen oder umgebungsspezifischen Inhalte
‣  Namenskonvention: nach der Funktion die sie erfüllen
Strukturierung der Module
... atomare Module für mehr Wiederverwendbarkeit
13
Strukturierung der Module
... das Baukastenprinzip und Spielregeln für mehr Übersicht
14
Problem 2
‣  Ressourcen in mehreren Modulen definiert
‣  Häufige Dependency Cycles
Strukturierung der Module
... das Baukastenprinzip und Spielregeln für mehr Übersicht
15
Profile (früher Services)
‣  die Klammer auf technischer Ebene
‣  besteht aus Component Modulen (und optional Ressourcen)
‣  Ein ähnliches Profil ist ein neues Profil – keine generische Profile
‣  Namenskonvention: profile_<type>_<service>[_<specialisation>]
Strukturierung der Module
... die Abstraktion aus technischer Sicht
16
Strukturierung der Module
... die erste Abstraktionsebene
17
Problem 3
‣  Ein technisches „Profil“ wird auf mehreren Nodes benötigt
‣  Technische Profile passen nicht zu den Business Anforderungen
‣  Logik auf Node-Ebene
‣  Unübersichtlich bei vielen Nodes
‣  Problematisch, wenn man eine ENC verwenden will
Strukturierung der Module
... das Baukastenprinzip und Spielregeln für mehr Übersicht
18
Roles
‣  Abstraktionsebene aus Business-Sicht, also für was ein System steht
‣  es werden ausschließlich ein oder mehrere includes von Profilen verwendet
‣  Namenskonvention: role_<function>
Strukturierung der Module
... die Abstraktion aus Business Sicht
19
Strukturierung der Module
... die zweite Abstraktionsebene
20
Problem 4
‣  Wo definiere ich, was aus meinen Servern bzw. Nodes wird?
Strukturierung der Module
... das Baukastenprinzip und Spielregeln für mehr Übersicht
21
Möglichkeiten
‣  ENC - empfohlen (The Foreman)
‣  Vorteile: zentral verwaltet
‣  Nachteile: keine Versionierung
‣  site.pp – im Puppet Code
‣  Vorteile: Versionierung, kann auch ohne ENC verwendet werden
‣  Nachteile: kann bei vielen Nodes unübersichtlich werden
‣  facts.d (system_role) – auf dem System
‣  Vorteile: einfach, nur ein default node
‣  Nachteile: theoretisch kann jeder Node alle Rollen annehmen
Empfehlung
‣  Nur Classification wenn möglich (Node = Classifier only)
‣  Ein Node hat eine Rolle (wenn mehrere nötig sind, eine neue Rolle schaffen)
Strukturierung der Module
... das Baukastenprinzip und Spielregeln für mehr Übersicht
22
Strukturierung der Module
... die dritte Abstraktionsebene
23
Zusammenfassung
‣  Sind Profile und Rollen notwendig?
‣  Nein, aber man verliert die Möglichkeit der Abstraktion
‣  Können Profile und Rollen auch im ENC definiert werden?
‣  Ja, aber man verliert die Versionierbarkeit und die Verwendung ohne ENC -
beispielsweise mit Vagrant
Strukturierung der Module
... das Baukastenprinzip und Spielregeln für mehr Übersicht
24
Fazit
‣  Vorteile: Abstraktion und Entkopplung von Logik und Implementierung
‣  Nachteile:
‣  kann unübersichtlich werden, Disziplin
‣  kann kompliziert werden, wenn nicht ein Service = eine VM
(Konventionen notwendig)
Strukturierung der Module
... das Baukastenprinzip und Spielregeln für mehr Übersicht
25
Problem 5
‣  Viele if-Statements, um umgebungsspezifische Unterschiede abzufangen
‣  Unterschiedlicher Branch bzw. Klassen und Module für Umgebungen
Trennung von Daten und Code
... Daten Auslagern für mehr Übersicht
26
Möglichkeiten
‣  params.pp
‣  Vorteile: Logik genau in einer Klasse, einfach, versionierbar
‣  Nachteile: Business Logik im Modul, Daten noch im Modul
‣  Hiera Function
‣  Vorteile: Daten an einer Stelle, Default-Werte möglich
‣  Nachteile: auch die modulspezifischen Daten in Hiera
‣  Params.pp und Hiera Function
‣  Vorteile: Daten in Hiera, Default-Werte in params.pp
‣  Nachteile: Debugging schwieriger (woher kam der Wert?)
‣  Data Binding
‣  Vorteile: Parameter wird automatisch in Hiera nachgeschaut
‣  Nachteile: Lookup ist nicht explizit
Trennung von Daten und Code
... Vor- und Nachteile der verschiedenen Möglichkeiten
27
Empfehlung für die Verwendung mit Rollen
‣  Betriebssystemspezifische oder modulspezifische Daten in params.pp
(solange „Data in Modules“ noch nicht im Puppet Core)
‣  Alle umgebungsspezifischen Daten kommen aus Hiera
‣  Hiera Lookups sind explizit und werden validiert (stdlib)
‣  Hiera Lookups haben keine Default Werte („fail fast“ Prinzip)
Trennung von Daten und Code
... params.pp für Module, Hiera für Profile
28
Trennung von Daten und Code
... die vierte Abstraktionsebene
Vgl. Vortrag vom Linuxtag 2013 29
Empfehlung für den Speicherort von Daten
‣  So nah wie möglich am Code (Lesbarkeit)
‣  So weit entfernt wie nötig (Abstraktion)
Vorteile von Hiera
‣  Änderungen möglich, ohne den Puppet Code zu verändern
‣  Verschiedene Backends verfügbar
Trennung von Daten und Code
... Daten Auslagern für mehr Übersicht
https://github.com/TomPoulton/hiera-eyaml 30
Problem 6
‣  Wie mit sensitive Daten wie Passwörter umgehen?
‣  hieradata/ in ein eigenes Repository
‣  Strings in Hiera verschlüsseln (beispielsweise mit hiera-eyaml)
Trennung von Daten und Code
... Daten Auslagern für mehr Übersicht
31
Konfiguration
Trennung von Daten und Code
... Daten Auslagern für mehr Übersicht
32
Verzeichnisstruktur
Trennung von Daten und Code
... Daten Auslagern für mehr Übersicht
33
Problem 7
‣  Änderungen am Code sind zeitaufwändig
‣  Fehler werden erst in den Test-Umgebungen erkannt
‣  Code schwierig zu warten
Code testen
... testen für schnellere Entwicklung
34
Test und Debugging
‣  Testen
‣  Syntax Checks (puppet–lint)
‣  Smoke Tests (funktionalen Prüfung des Moduls, rspec / serverspec)
‣  Performance Tests
‣  Debugging
‣  Puppet Graph
Code testen
... testen für schnellere Entwicklung
35
Beispiel: Checks die lokal und auf dem Git bzw. CI System ausgeführt werden
Code testen
... testen für schnellere Entwicklung
36
Beispiel: Checks, die auf dem Testsystem ausgeführt werden
Code testen
... testen für schnellere Entwicklung
37
Beispiel: Graphen immer generieren
Code testen
... testen für schnellere Entwicklung
38
Empfohlenes Vorgehen für das Testen
1.  Lokal Syntax-Checks ausführen während der Entwicklung (Skript / $EDITOR)
2.  Code auf das Entwicklungssystem synchronisieren (beispielsweise Vagrant)
3.  tests/init.pp mit „puppet apply“ ausführen soweit möglich
(sinnvoll für Module, Rollen und Profile)
4.  Performance-Report automatisch generieren und prüfen
5.  Graphen automatisch generieren und prüfen
6.  Commit / CI Tests
Code testen
... testen für schnellere Entwicklung
Designing
Puppet
39
Repositories und Environments
... Abhängigkeiten modellieren
Designing
Repositories
and
Environments
Designing
Modules
Getting
started
40
Problem 8
‣  Ein Modul, das in vielen anderen Profilen oder Rollen verwendet wird, lässt sich
schwierig ändern
‣  Wie teste ich neue Modulversionen in verschiedenen Umgebungen?
Modulentwicklung entkoppeln
... Modularisierung und Versionierung zur Entkopplung
41
Lösungsansätze für Repository zu Environment Mapping
1.  Ein Repository pro Environment
‣  Vorteile: einfach
‣  Nachteile: Änderungen betreffen immer das ganze Repository
2.  Ein Branch pro Environment
‣  Vorteil: Unterschiede zwischen Umgebungen und Versionen möglich
‣  Nachteile: Mergen, Änderungen betreffen immer das ganze Repository
3.  Dynamic Environments und Feature-Branches
‣  Vorteile: man kann einzelne Änderungen auf einzelnen Hosts testen
‣  Nachteile: wie oben
4.  Module in eigenen Repositories
‣  Vorteile: Änderungen auf Module beschränkt, einfache Integration externer
Module
‣  Nachteile: Module müssen auf dem Master „zusammengesetzt“ werden
Modulentwicklung entkoppeln
... Modularisierung und Versionierung zur Entkopplung
42
Lösungsansätze für Repository zu Environment Mapping
1.  Ein Repository pro Environment
‣  Vorteile: einfach
‣  Nachteile: Änderungen betreffen immer das ganze Repository
2.  Ein Branch pro Environment
‣  Vorteil: Unterschiede zwischen Umgebungen Versionen möglich
‣  Nachteile: Mergen, Änderungen betreffen immer das ganze Repository
3.  Dynamic Environments und Feature-Branches
‣  Vorteile: man kann einzelne Änderungen auf einzelnen Hosts testen
‣  Nachteile: wie oben
4.  Module in eigenen Repositories
‣  Vorteile: Änderungen auf Module beschränkt, einfache Integration externer
Module
‣  Nachteile: Module müssen auf dem Master „zusammengesetzt“ werden
Modulentwicklung entkoppeln
... Modularisierung und Versionierung zur Entkopplung
43
Modulentwicklung von der Version im Environment entkoppeln
‣  Jedes Modul wird versioniert in einem eigenen Git Repository entwickelt
‣  Optional: Hieradata pro Umgebung in eigenem Git Repository
‣  Beispiel: Minimale Struktur eines Environments mit Puppetfile
Modulentwicklung entkoppeln
... die fünfte Abstraktionsebene
44
Abhängigkeiten und Versionen der Repositories werden im Puppetfile definiert
Empfehlung
‣  Nur Git verwenden (Historie) und Forge Module auf den eigenen Git Server
spiegeln
Modulentwicklung entkoppeln
... das Puppetfile
45
Environment nach dem „Aufbauen“ auf dem Puppet Master
Modulentwicklung entkoppeln
... die fünfte Abstraktionsebene
https://github.com/rodjek/librarian-puppet 46
Repositories mit librarian-puppet verwalten
‣  Syntax
Environments aufbauen
... Möglichkeit eins - librarian-puppet
https://github.com/adrienthebo/r10k 47
r10k
‣  Konfiguration
‣  r10k.yaml
Environments aufbauen
... Möglichkeit zwei – r10k
48
Empfehlung für den Aufbau von Git Repositories
‣  Kleinste sinnvolle Einheit wählen (Module, Environment, Hieradata)
‣  Vorteil: einfache Versionierung, mehrere Versionsstände möglich
‣  Nachteil: Übersichtlichkeit leidet
Empfehlung für den Aufbau von Puppet Environments
‣  Environment: produktzentrierten Ansatz bzw. Umgebungen anhand von
Deploymentgrenzen / Aufgaben wählen
‣  Vorteil: Änderungen haben kleinere Auswirkungen und sind einfacher
‣  Nachteil: Gefahr der Zersplitterung
Environments und Repositories
... die Empfehlung
Designing
Puppet
49
Dia Agenda
... worum es in diesem Vortrag geht
Designing
Repositories
and
Environments
Designing
Modules
Getting
started
50
Empfehlung für das Vorgehen
1.  Design bzw. Konventionen schriftlich festlegen
2.  Modul-Skeleton erstellen
3.  Entwicklungs- und Deployment-Workflow mit allen Beteiligten testen
4.  Module, Profile, Rollen und Umgebungen entwickeln
Parameter
... um die Übersicht zu behalten
51
Empfehlung für den Anfang
‣  im Zweifel mit dem einfachsten möglichen Weg beginnen
‣  iteratives Vorgehen: im zweiten Schritt versuchen zu abstrahieren / optimieren
‣  generisch vs. speziell, Skills und Zeit beachten
Parameter
... um die Übersicht zu behalten
52
Fazit
‣  Puppet-Entwicklung = Software-Entwicklung
‣  Eine DSL ist keine Programmiersprache
‣  Puppet ersetzt nicht die Build-Umgebung
‣  Puppet ersetzt keine adhoc Verwaltung, falls diese notwendig ist
‣  Es wird komplexer = die einfachste Lösung ist meistens falsch
‣  Abstraktion auf allen Ebenen hilft
‣  Engineering als Dienstleister für andere Abteilungen - kein Selbstzweck
Fazit
... takeaways
53
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
55
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

Mais conteúdo relacionado

Destaque

Puppet Roles & Profiles Using Trusted Facts.
Puppet Roles & Profiles Using Trusted Facts.Puppet Roles & Profiles Using Trusted Facts.
Puppet Roles & Profiles Using Trusted Facts.Stephen Wallace
 
Puppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwarePuppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwaresubtitle
 
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, PuppetPuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, PuppetPuppet
 
Puppet DSL gotchas, and understandiing Roles & Profiles pattern
Puppet DSL gotchas, and understandiing Roles & Profiles patternPuppet DSL gotchas, and understandiing Roles & Profiles pattern
Puppet DSL gotchas, and understandiing Roles & Profiles patternAlex Simenduev
 
PuppetConf 2016: Puppet as Security Tooling – Bill Weiss, Puppet
PuppetConf 2016: Puppet as Security Tooling – Bill Weiss, PuppetPuppetConf 2016: Puppet as Security Tooling – Bill Weiss, Puppet
PuppetConf 2016: Puppet as Security Tooling – Bill Weiss, PuppetPuppet
 
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...Puppet
 
Advice on how to get started — and ahead — in a career in DevOps
Advice on how to get started — and ahead — in a career in DevOpsAdvice on how to get started — and ahead — in a career in DevOps
Advice on how to get started — and ahead — in a career in DevOpsPuppet
 
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, PuppetPuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, PuppetPuppet
 
System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet B1 Systems GmbH
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanB1 Systems GmbH
 

Destaque (10)

Puppet Roles & Profiles Using Trusted Facts.
Puppet Roles & Profiles Using Trusted Facts.Puppet Roles & Profiles Using Trusted Facts.
Puppet Roles & Profiles Using Trusted Facts.
 
Puppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwarePuppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMware
 
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, PuppetPuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
PuppetConf 2016: The Future of Testing Puppet Code – Gareth Rushgrove, Puppet
 
Puppet DSL gotchas, and understandiing Roles & Profiles pattern
Puppet DSL gotchas, and understandiing Roles & Profiles patternPuppet DSL gotchas, and understandiing Roles & Profiles pattern
Puppet DSL gotchas, and understandiing Roles & Profiles pattern
 
PuppetConf 2016: Puppet as Security Tooling – Bill Weiss, Puppet
PuppetConf 2016: Puppet as Security Tooling – Bill Weiss, PuppetPuppetConf 2016: Puppet as Security Tooling – Bill Weiss, Puppet
PuppetConf 2016: Puppet as Security Tooling – Bill Weiss, Puppet
 
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
 
Advice on how to get started — and ahead — in a career in DevOps
Advice on how to get started — and ahead — in a career in DevOpsAdvice on how to get started — and ahead — in a career in DevOps
Advice on how to get started — and ahead — in a career in DevOps
 
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, PuppetPuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
 
System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und Foreman
 

Semelhante a Puppet: Designing modules & repositories

Puppet - Umgebungen, Daten & Code, Abhängigkeiten
Puppet - Umgebungen, Daten & Code, AbhängigkeitenPuppet - Umgebungen, Daten & Code, Abhängigkeiten
Puppet - Umgebungen, Daten & Code, Abhängigkeiteninovex GmbH
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppetinovex GmbH
 
EnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heuteEnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heutePhilipp Burgmer
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Managementinovex GmbH
 
Microservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OSMicroservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OSRalf Ernst
 
Implementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBRImplementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBRAlexander Hundt
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerPatrick Baumgartner
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Softwarekonfiguration mit Drupal
Softwarekonfiguration mit DrupalSoftwarekonfiguration mit Drupal
Softwarekonfiguration mit DrupalManuel Pistner
 
MySQL für Oracle DBA's
MySQL für Oracle DBA'sMySQL für Oracle DBA's
MySQL für Oracle DBA'sFromDual GmbH
 
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
 
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
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Torsten Kleiber
 
PostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePeter Eisentraut
 
Regelbasierte Systeme mit JBoss Drools
Regelbasierte Systeme mit JBoss DroolsRegelbasierte Systeme mit JBoss Drools
Regelbasierte Systeme mit JBoss DroolsAndreas Schreiber
 
DOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningDOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningFromDual GmbH
 

Semelhante a Puppet: Designing modules & repositories (20)

Puppet - Umgebungen, Daten & Code, Abhängigkeiten
Puppet - Umgebungen, Daten & Code, AbhängigkeitenPuppet - Umgebungen, Daten & Code, Abhängigkeiten
Puppet - Umgebungen, Daten & Code, Abhängigkeiten
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
EnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heuteEnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heute
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Management
 
Microservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OSMicroservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OS
 
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
 
Implementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBRImplementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBR
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als Entwickler
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Docker Workbench
Docker WorkbenchDocker Workbench
Docker Workbench
 
Softwarekonfiguration mit Drupal
Softwarekonfiguration mit DrupalSoftwarekonfiguration mit Drupal
Softwarekonfiguration mit Drupal
 
MySQL für Oracle DBA's
MySQL für Oracle DBA'sMySQL für Oracle DBA's
MySQL für Oracle DBA's
 
TDD für Testmuffel
TDD für TestmuffelTDD für Testmuffel
TDD für Testmuffel
 
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
 
Werkzeugkasten
WerkzeugkastenWerkzeugkasten
Werkzeugkasten
 
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)
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
 
PostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie Datenbankalternative
 
Regelbasierte Systeme mit JBoss Drools
Regelbasierte Systeme mit JBoss DroolsRegelbasierte Systeme mit JBoss Drools
Regelbasierte Systeme mit JBoss Drools
 
DOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningDOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance Tuning
 

Mais 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
 

Mais 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: Designing modules & repositories

  • 1. Linux Tag 2014 - Puppet Designing Moduls and Repositories Alexander Pacnik Karlsruhe, 08.05.2014
  • 2. 2 Der Schlüssel zum Erfolg ist die Kultur, nicht das Werkzeug ‣  Infrastructure as Code – der gleiche Code für alle Umgebungen (Transparenz) ‣  Continuous Delivery – Ergebnis und die Prozesse in den Mittelpunkt stellen ‣  Infrastructure Testing – die Basis jeglicher Automatisierung und Wartbarkeit Einleitung ... worum es in diesem Vortrag geht
  • 3. 3 Problemstellung: Unterschiedliche Anforderungen ‣  Anforderungen Betrieb (beispielsweise verschiedene Umgebungen) ‣  Anforderungen Entwicklung (beispielsweise schnelles Deployment) ‣  Anforderungen QA (beispielsweise Testbarkeit) ‣  Ziel: Flexibilität Einleitung ... worum es in diesem Vortrag geht
  • 4. Designing Puppet 4 Entscheidungen im Vorfeld ... Papier und Stift bitte Designing Repositories and Environments Designing Modules Getting started
  • 5. 5 Ziele ‣  Anforderungsanalyse ‣  Entscheidung explizit treffen, wie Puppet verwendet werden soll Designing Puppet ... Papier und Stift bitte
  • 6. 6 Was (soll mit Puppet verwaltet werden)? ‣  Deploymentgrenzen anhand der Verantwortung definieren ‣  Betriebssystem ‣  Wie wird die Benutzerverwaltung umgesetzt ‣  Was wird über Pakete installiert und wie bzw. wo werden sie gebaut (keine Binaries über Puppet verteilen!) ‣  Paketversionen über Puppet oder Paketrepository (empfohlen) sicherstellen ‣  Deployment der Stacks (Packages, Configuration, Service) ‣  Deployment der Applikation (Binaries, Configuration, SQL) ‣  Beispiel: ‣  PaaS Ansatz: Cron Jobs, php.ini etc. nur initial mit Puppet verwaltet, dann über das Applikations-Deployment Designing Puppet ... Papier und Stift bitte
  • 7. 7 Wo (soll Puppet verwendet werden)? ‣  Umgebungen definieren ‣  Production, Stage, Test ‣  Vagrant, Docker Designing Puppet ... Papier und Stift bitte
  • 8. 8 Wer (wird Puppet verwenden)? ‣  Alle Puppet Nutzer von Anfang an beteiligen ‣  System Engineers ‣  Entwickler Designing Puppet ... Papier und Stift bitte
  • 9. 9 Wie (soll Puppet verwendet werden)? ‣  run mode festlegen (Ansatz wählen) ‣  Agent (State verwalten - empfohlen) ‣  Pro: Zustand eindeutig, Reports ‣  Contra: Infrastruktur notwendig ‣  Apply (Adhoc Verwaltung) ‣  Pro: einfach, über OS Pakete möglich ‣  Contra: keine Reports, nur einmalige Anwendung ‣  Pets (manuelle pflege) vs Cattle (Wegwerfware) ‣  Alle Workflows skizzieren, in denen Puppet vorkommt ‣  Puppet Entwicklung (Vagrant, Test, ...) ‣  Anwendungsentwicklung (Vagrant) Designing Puppet ... Papier und Stift bitte
  • 10. Designing Puppet 10 Modulentwicklung ... Worauf es wirklich ankommt Designing Repositories and Environments Designing Modules Getting started
  • 11. 11 Problem 1 ‣  Geringe Wiederverwendbarkeit von Puppet Code ‣  Hohe Komplexität des Puppet Codes ‣  häufige if-Statements ‣  Code Duplication Strukturierung der Module ... das Baukastenprinzip und Spielregeln für mehr Übersicht
  • 12. 12 Component Module - Eigenschaften ‣  Unabhängig, atomar und kann jederzeit mit anderen geteilt werden ‣  Abhängigkeiten zu anderen Modulen um jeden Preis vermeiden ‣  Optionen werden über Parameter übergeben und alle Parameter werden validiert ‣  keine organisationsspezifischen oder umgebungsspezifischen Inhalte ‣  Namenskonvention: nach der Funktion die sie erfüllen Strukturierung der Module ... atomare Module für mehr Wiederverwendbarkeit
  • 13. 13 Strukturierung der Module ... das Baukastenprinzip und Spielregeln für mehr Übersicht
  • 14. 14 Problem 2 ‣  Ressourcen in mehreren Modulen definiert ‣  Häufige Dependency Cycles Strukturierung der Module ... das Baukastenprinzip und Spielregeln für mehr Übersicht
  • 15. 15 Profile (früher Services) ‣  die Klammer auf technischer Ebene ‣  besteht aus Component Modulen (und optional Ressourcen) ‣  Ein ähnliches Profil ist ein neues Profil – keine generische Profile ‣  Namenskonvention: profile_<type>_<service>[_<specialisation>] Strukturierung der Module ... die Abstraktion aus technischer Sicht
  • 16. 16 Strukturierung der Module ... die erste Abstraktionsebene
  • 17. 17 Problem 3 ‣  Ein technisches „Profil“ wird auf mehreren Nodes benötigt ‣  Technische Profile passen nicht zu den Business Anforderungen ‣  Logik auf Node-Ebene ‣  Unübersichtlich bei vielen Nodes ‣  Problematisch, wenn man eine ENC verwenden will Strukturierung der Module ... das Baukastenprinzip und Spielregeln für mehr Übersicht
  • 18. 18 Roles ‣  Abstraktionsebene aus Business-Sicht, also für was ein System steht ‣  es werden ausschließlich ein oder mehrere includes von Profilen verwendet ‣  Namenskonvention: role_<function> Strukturierung der Module ... die Abstraktion aus Business Sicht
  • 19. 19 Strukturierung der Module ... die zweite Abstraktionsebene
  • 20. 20 Problem 4 ‣  Wo definiere ich, was aus meinen Servern bzw. Nodes wird? Strukturierung der Module ... das Baukastenprinzip und Spielregeln für mehr Übersicht
  • 21. 21 Möglichkeiten ‣  ENC - empfohlen (The Foreman) ‣  Vorteile: zentral verwaltet ‣  Nachteile: keine Versionierung ‣  site.pp – im Puppet Code ‣  Vorteile: Versionierung, kann auch ohne ENC verwendet werden ‣  Nachteile: kann bei vielen Nodes unübersichtlich werden ‣  facts.d (system_role) – auf dem System ‣  Vorteile: einfach, nur ein default node ‣  Nachteile: theoretisch kann jeder Node alle Rollen annehmen Empfehlung ‣  Nur Classification wenn möglich (Node = Classifier only) ‣  Ein Node hat eine Rolle (wenn mehrere nötig sind, eine neue Rolle schaffen) Strukturierung der Module ... das Baukastenprinzip und Spielregeln für mehr Übersicht
  • 22. 22 Strukturierung der Module ... die dritte Abstraktionsebene
  • 23. 23 Zusammenfassung ‣  Sind Profile und Rollen notwendig? ‣  Nein, aber man verliert die Möglichkeit der Abstraktion ‣  Können Profile und Rollen auch im ENC definiert werden? ‣  Ja, aber man verliert die Versionierbarkeit und die Verwendung ohne ENC - beispielsweise mit Vagrant Strukturierung der Module ... das Baukastenprinzip und Spielregeln für mehr Übersicht
  • 24. 24 Fazit ‣  Vorteile: Abstraktion und Entkopplung von Logik und Implementierung ‣  Nachteile: ‣  kann unübersichtlich werden, Disziplin ‣  kann kompliziert werden, wenn nicht ein Service = eine VM (Konventionen notwendig) Strukturierung der Module ... das Baukastenprinzip und Spielregeln für mehr Übersicht
  • 25. 25 Problem 5 ‣  Viele if-Statements, um umgebungsspezifische Unterschiede abzufangen ‣  Unterschiedlicher Branch bzw. Klassen und Module für Umgebungen Trennung von Daten und Code ... Daten Auslagern für mehr Übersicht
  • 26. 26 Möglichkeiten ‣  params.pp ‣  Vorteile: Logik genau in einer Klasse, einfach, versionierbar ‣  Nachteile: Business Logik im Modul, Daten noch im Modul ‣  Hiera Function ‣  Vorteile: Daten an einer Stelle, Default-Werte möglich ‣  Nachteile: auch die modulspezifischen Daten in Hiera ‣  Params.pp und Hiera Function ‣  Vorteile: Daten in Hiera, Default-Werte in params.pp ‣  Nachteile: Debugging schwieriger (woher kam der Wert?) ‣  Data Binding ‣  Vorteile: Parameter wird automatisch in Hiera nachgeschaut ‣  Nachteile: Lookup ist nicht explizit Trennung von Daten und Code ... Vor- und Nachteile der verschiedenen Möglichkeiten
  • 27. 27 Empfehlung für die Verwendung mit Rollen ‣  Betriebssystemspezifische oder modulspezifische Daten in params.pp (solange „Data in Modules“ noch nicht im Puppet Core) ‣  Alle umgebungsspezifischen Daten kommen aus Hiera ‣  Hiera Lookups sind explizit und werden validiert (stdlib) ‣  Hiera Lookups haben keine Default Werte („fail fast“ Prinzip) Trennung von Daten und Code ... params.pp für Module, Hiera für Profile
  • 28. 28 Trennung von Daten und Code ... die vierte Abstraktionsebene
  • 29. Vgl. Vortrag vom Linuxtag 2013 29 Empfehlung für den Speicherort von Daten ‣  So nah wie möglich am Code (Lesbarkeit) ‣  So weit entfernt wie nötig (Abstraktion) Vorteile von Hiera ‣  Änderungen möglich, ohne den Puppet Code zu verändern ‣  Verschiedene Backends verfügbar Trennung von Daten und Code ... Daten Auslagern für mehr Übersicht
  • 30. https://github.com/TomPoulton/hiera-eyaml 30 Problem 6 ‣  Wie mit sensitive Daten wie Passwörter umgehen? ‣  hieradata/ in ein eigenes Repository ‣  Strings in Hiera verschlüsseln (beispielsweise mit hiera-eyaml) Trennung von Daten und Code ... Daten Auslagern für mehr Übersicht
  • 31. 31 Konfiguration Trennung von Daten und Code ... Daten Auslagern für mehr Übersicht
  • 32. 32 Verzeichnisstruktur Trennung von Daten und Code ... Daten Auslagern für mehr Übersicht
  • 33. 33 Problem 7 ‣  Änderungen am Code sind zeitaufwändig ‣  Fehler werden erst in den Test-Umgebungen erkannt ‣  Code schwierig zu warten Code testen ... testen für schnellere Entwicklung
  • 34. 34 Test und Debugging ‣  Testen ‣  Syntax Checks (puppet–lint) ‣  Smoke Tests (funktionalen Prüfung des Moduls, rspec / serverspec) ‣  Performance Tests ‣  Debugging ‣  Puppet Graph Code testen ... testen für schnellere Entwicklung
  • 35. 35 Beispiel: Checks die lokal und auf dem Git bzw. CI System ausgeführt werden Code testen ... testen für schnellere Entwicklung
  • 36. 36 Beispiel: Checks, die auf dem Testsystem ausgeführt werden Code testen ... testen für schnellere Entwicklung
  • 37. 37 Beispiel: Graphen immer generieren Code testen ... testen für schnellere Entwicklung
  • 38. 38 Empfohlenes Vorgehen für das Testen 1.  Lokal Syntax-Checks ausführen während der Entwicklung (Skript / $EDITOR) 2.  Code auf das Entwicklungssystem synchronisieren (beispielsweise Vagrant) 3.  tests/init.pp mit „puppet apply“ ausführen soweit möglich (sinnvoll für Module, Rollen und Profile) 4.  Performance-Report automatisch generieren und prüfen 5.  Graphen automatisch generieren und prüfen 6.  Commit / CI Tests Code testen ... testen für schnellere Entwicklung
  • 39. Designing Puppet 39 Repositories und Environments ... Abhängigkeiten modellieren Designing Repositories and Environments Designing Modules Getting started
  • 40. 40 Problem 8 ‣  Ein Modul, das in vielen anderen Profilen oder Rollen verwendet wird, lässt sich schwierig ändern ‣  Wie teste ich neue Modulversionen in verschiedenen Umgebungen? Modulentwicklung entkoppeln ... Modularisierung und Versionierung zur Entkopplung
  • 41. 41 Lösungsansätze für Repository zu Environment Mapping 1.  Ein Repository pro Environment ‣  Vorteile: einfach ‣  Nachteile: Änderungen betreffen immer das ganze Repository 2.  Ein Branch pro Environment ‣  Vorteil: Unterschiede zwischen Umgebungen und Versionen möglich ‣  Nachteile: Mergen, Änderungen betreffen immer das ganze Repository 3.  Dynamic Environments und Feature-Branches ‣  Vorteile: man kann einzelne Änderungen auf einzelnen Hosts testen ‣  Nachteile: wie oben 4.  Module in eigenen Repositories ‣  Vorteile: Änderungen auf Module beschränkt, einfache Integration externer Module ‣  Nachteile: Module müssen auf dem Master „zusammengesetzt“ werden Modulentwicklung entkoppeln ... Modularisierung und Versionierung zur Entkopplung
  • 42. 42 Lösungsansätze für Repository zu Environment Mapping 1.  Ein Repository pro Environment ‣  Vorteile: einfach ‣  Nachteile: Änderungen betreffen immer das ganze Repository 2.  Ein Branch pro Environment ‣  Vorteil: Unterschiede zwischen Umgebungen Versionen möglich ‣  Nachteile: Mergen, Änderungen betreffen immer das ganze Repository 3.  Dynamic Environments und Feature-Branches ‣  Vorteile: man kann einzelne Änderungen auf einzelnen Hosts testen ‣  Nachteile: wie oben 4.  Module in eigenen Repositories ‣  Vorteile: Änderungen auf Module beschränkt, einfache Integration externer Module ‣  Nachteile: Module müssen auf dem Master „zusammengesetzt“ werden Modulentwicklung entkoppeln ... Modularisierung und Versionierung zur Entkopplung
  • 43. 43 Modulentwicklung von der Version im Environment entkoppeln ‣  Jedes Modul wird versioniert in einem eigenen Git Repository entwickelt ‣  Optional: Hieradata pro Umgebung in eigenem Git Repository ‣  Beispiel: Minimale Struktur eines Environments mit Puppetfile Modulentwicklung entkoppeln ... die fünfte Abstraktionsebene
  • 44. 44 Abhängigkeiten und Versionen der Repositories werden im Puppetfile definiert Empfehlung ‣  Nur Git verwenden (Historie) und Forge Module auf den eigenen Git Server spiegeln Modulentwicklung entkoppeln ... das Puppetfile
  • 45. 45 Environment nach dem „Aufbauen“ auf dem Puppet Master Modulentwicklung entkoppeln ... die fünfte Abstraktionsebene
  • 46. https://github.com/rodjek/librarian-puppet 46 Repositories mit librarian-puppet verwalten ‣  Syntax Environments aufbauen ... Möglichkeit eins - librarian-puppet
  • 47. https://github.com/adrienthebo/r10k 47 r10k ‣  Konfiguration ‣  r10k.yaml Environments aufbauen ... Möglichkeit zwei – r10k
  • 48. 48 Empfehlung für den Aufbau von Git Repositories ‣  Kleinste sinnvolle Einheit wählen (Module, Environment, Hieradata) ‣  Vorteil: einfache Versionierung, mehrere Versionsstände möglich ‣  Nachteil: Übersichtlichkeit leidet Empfehlung für den Aufbau von Puppet Environments ‣  Environment: produktzentrierten Ansatz bzw. Umgebungen anhand von Deploymentgrenzen / Aufgaben wählen ‣  Vorteil: Änderungen haben kleinere Auswirkungen und sind einfacher ‣  Nachteil: Gefahr der Zersplitterung Environments und Repositories ... die Empfehlung
  • 49. Designing Puppet 49 Dia Agenda ... worum es in diesem Vortrag geht Designing Repositories and Environments Designing Modules Getting started
  • 50. 50 Empfehlung für das Vorgehen 1.  Design bzw. Konventionen schriftlich festlegen 2.  Modul-Skeleton erstellen 3.  Entwicklungs- und Deployment-Workflow mit allen Beteiligten testen 4.  Module, Profile, Rollen und Umgebungen entwickeln Parameter ... um die Übersicht zu behalten
  • 51. 51 Empfehlung für den Anfang ‣  im Zweifel mit dem einfachsten möglichen Weg beginnen ‣  iteratives Vorgehen: im zweiten Schritt versuchen zu abstrahieren / optimieren ‣  generisch vs. speziell, Skills und Zeit beachten Parameter ... um die Übersicht zu behalten
  • 52. 52 Fazit ‣  Puppet-Entwicklung = Software-Entwicklung ‣  Eine DSL ist keine Programmiersprache ‣  Puppet ersetzt nicht die Build-Umgebung ‣  Puppet ersetzt keine adhoc Verwaltung, falls diese notwendig ist ‣  Es wird komplexer = die einfachste Lösung ist meistens falsch ‣  Abstraktion auf allen Ebenen hilft ‣  Engineering als Dienstleister für andere Abteilungen - kein Selbstzweck Fazit ... takeaways
  • 53. 53 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
  • 55. 55 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