SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
Upgrading Puppet 
HowTo 
PuppetCamp Düsseldorf 
Martin Alfke 
<martin.alfke@buero20.org>
Wer 
• Martin Alfke 
• Berlin 
• Freelancer / Trainer 
• Puppet @ Linuxhotel 
• Puppet User Group Berlin
Poll 
! 
! 
• Puppet 2.x?
Poll 
! 
! 
• Puppet 2.x? 
• Puppet 3.x?
Agenda 
• Warum soll man Puppet 
aktualisieren? 
• Funktioniert der alte 
Puppet DSL code noch? 
• Wie führe ich das Upgrade 
durch? 
• Was kommt in Puppet 4?
Warum upgraden? 
• Sehr schneller Release 
Zyklus 
• Best Practices 
• Neue oder geänderte 
Funktionalität 
• Endlich fallen alte Sachen 
raus 
• Puppet 4 kommt!
Why should I upgrade 
Puppet at all? 
• Do you want security updates? 
• Do you want to make use of new functionality? 
(e.g. automatic data bindings, environmentpath, 
future parser) 
• Do you want to get support (community or 
enterprise)?
Funktionieren meine 
Module noch? 
• Der eigene Puppet Code (Module) 
wurde vor einiger Zeit entwickelt 
und wird einfach benutzt. 
• Der eigene Puppet Code basiert 
noch auf alten Best Practices und 
folgt nicht den neuen Style Guides 
• Alle schauen immer in ihre Puppet 
Logfiles und prüfen auf “deprecation 
warnings”
Worauf muss man achten?
BAD 
Best practice 
• Multiple Vererbung (inherits) 
• Verwendung von import 
• Modifizieren von Remote Modules 
• Benutzung von Variablen ohne 
Angabe des Scopes
Best practice 
Restriktive Benutzung von Vererbung 
! 
Anstelle von Vererbung kann man oft parametrisierte Klassen verwenden. 
Aktuelle “Best Practice” ist nur noch Vererbung von params.pp 
!! 
BETTER 
class ssh ( 
$server = $ssh::params::server, 
$client = $ssh::params::client, 
$x11fwd = false, 
) inherits ssh::params { 
} 
! 
class { ssh::params:: 
server => false, 
x11fwd => true, 
}
Best practice 
Include verwenden 
! 
Nutzt den Puppet Autoloader. 
! 
# ssh/manifests/init.pp 
class ssh { 
include ssh::server 
} 
! 
# ssh/manifests/server 
class ssh::server { 
} 
! 
BETTER
Best practice 
“Remote Modules” sind 
Open-Source -> helft beim 
Besser machen. 
! 
Erstelle ein Issue oder PR wenn 
eine Verbesserung rein soll. 
! 
Sorge dafür, dass die Remote 
Modules upgradefähig bleiben. 
BETTER
Best practice 
Setze beim Verwenden von Variablen 
den Scope. 
! 
class ssh ( 
$server 
) { 
} 
! 
class ssh::server { 
notify { $ssh::server: } 
} 
BETTER
Best practice 
Nutzt die Scope function in 
Templates 
!! 
BETTER 
key = <%= @ssh::server %> 
! 
oder 
! 
key = <%= scope.lookupvar(‘ssh::server’) %> 
! 
oder 
! 
key = <%= scope[‘ssh::server’]
Best practice 
Setzt bei facter Variablen den Top Scope 
! 
class ssh { 
notify { “OS: ${::operatingsystem}”: } 
} 
! 
class ssh::server { 
if $::is_virtual { 
notify { “Virtuelle Maschine unter ${::virtual}”: } 
} else { 
notify { “Hardware: ${::productname}”: } 
} 
BETTER
Best practice 
Ab sofort immer mit Daten 
Validierung 
! 
class ssh ( 
$server = hiera(‘server’, ‘localhost’) 
){ 
# validate_string is a function from stdlib 
validate_string($server) 
notify { “We will use Server: ${server}”: } 
} 
! 
BETTER
Remote modules 
• Welche Puppet Version unterstützen 
“Remote Modules”? 
• Neue Puppet Versionen habe neue 
function Attribute (z.B. arity) 
• Neue Remote Modules können 
neuere Puppet Versionen 
voraussetzen. 
• Neue Remote Modules können 
andere Module erfordern, die nicht 
von der installierten Puppet Version 
unterstützt werden.
Remote modules 
• Prüft Puppetfile / 
metadata.json in 
Hinsicht auf Versionen 
• Testet neue Module 
vor dem Einsatz auf 
Produktivsystemen
Wie kann ich meinen 
Puppet DSL code testen?
Wie kann ich meinen 
Puppet DSL code testen? 
• Syntax/Semantische Prüfung 
• puppet parser validate / puppet-syntax / puppet-lint 
• Unit Tests 
• rspec-puppet 
• Integrations Tests 
• beaker, vagrant, serverspec,…
Einfacher rspec upgrade 
Test
Einfacher rspec upgrade 
Test 
• Fügt spec Tests zu den eigenen Modulen hinzu 
• Nutzt rvm oder rbenv um zwischen verschiedenen 
Ruby Versionen zu wechseln 
• Setzt im Gemfile die zu verwendende Puppet 
Version 
• Führt spec lokal aus und prüft das Ergebnis
Einfacher Puppet upgrade 
Test
Einfacher Puppet upgrade 
Test 
• Download des tar Archives, Auspacken 
• manueller Start des Puppet Master wahlweise mit 
RUBYLIB oder ruby -I auf einem anderen Port (— 
masterport 8141) 
• Testlauf von einem Node gegen den neuen 
PuppetMaster
Einfacher Puppet upgrade 
Test 
Beispiel: zweiter Puppet Master Prozess: 
! 
tar zxf puppet-3.7.1.tar.gz -C /opt/puppet-3.7.1 
! 
ruby1.8 -I /opt/puppet-3.7.1/lib /opt/puppet-3.7.1/bin/puppet master  
—nodaemonize —masterport=8150 —pidfile=/tmp/puppetmaster.pid 
!! 
Beispiel: Agent Lauf gegen den zusätzlichen Puppet Master Prozess: 
! 
puppet agent —test —masterport 8150
Demo
Puppet 4 
• Major update 
• Alte (deprecated) 
Funktionalität fliegt raus 
• Neue Features in Puppet 
DSL
Puppet 4 
• Deprecated in Puppet 4: 
• node inheritance - statt dessen sollen roles/profiles verwendet 
werden 
• Variablen mit Großbuchstaben 
• Variablen mit einem Unterstrich an erster Position 
• Referenzen auf Klassen wobei die Klasse mit Großbuchstaben 
angegeben wird 
• Anführungszeichen und Punkte in Namen (Module, Klassen, …) 
• Ruby DSL
Puppet 4 
• Neu in Puppet 4: 
• Striktes Namensschema für Variablen und Lookup 
(wird in Puppet 5 zwingend) 
• Typen Validierung von Variablen 
• Boolsche Prüfung (“” -> true anstatt false) 
• Environmentpath 
• Funktionen in Puppet DSL 
• Neue API für Ruby Funktionen
Upgrading Puppet 
HowTo 
! 
Thank you. 
! 
Martin Alfke 
<martin.alfke@buero20.org>

Weitere ähnliche Inhalte

Was ist angesagt?

Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Ralf Sigmund
 
Coffee Backone Introduction
Coffee Backone IntroductionCoffee Backone Introduction
Coffee Backone Introduction
Tino Isnich
 

Was ist angesagt? (20)

Devs@Home - Einführung in Go
Devs@Home - Einführung in GoDevs@Home - Einführung in Go
Devs@Home - Einführung in Go
 
Cloud Provisioning mit Juju
Cloud Provisioning mit JujuCloud Provisioning mit Juju
Cloud Provisioning mit Juju
 
System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet
 
Java Batch: Der neue Standard für‘s Stapeln
Java Batch: Der neue Standard für‘s StapelnJava Batch: Der neue Standard für‘s Stapeln
Java Batch: Der neue Standard für‘s Stapeln
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
 
Der oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerterDer oracle dba_und_seine_passwoerter
Der oracle dba_und_seine_passwoerter
 
PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011
 
An Introduction to Ruby
An Introduction to RubyAn Introduction to Ruby
An Introduction to Ruby
 
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas LangeOSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
OSDC 2011 | FAI - Fully Automatic Installation by Thomas Lange
 
IPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedIPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 Reloaded
 
Ldap sqlnet
Ldap sqlnetLdap sqlnet
Ldap sqlnet
 
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import DataIntroduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
 
Boost C++ Libraries
Boost C++ LibrariesBoost C++ Libraries
Boost C++ Libraries
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und Foreman
 
01 sqlplus
01 sqlplus01 sqlplus
01 sqlplus
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
Einfuehrung in die Erstellung von Software-Paketen mit dem RPM Package Manager
Einfuehrung in die Erstellung von Software-Paketen mit dem RPM Package ManagerEinfuehrung in die Erstellung von Software-Paketen mit dem RPM Package Manager
Einfuehrung in die Erstellung von Software-Paketen mit dem RPM Package Manager
 
Coffee Backone Introduction
Coffee Backone IntroductionCoffee Backone Introduction
Coffee Backone Introduction
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 

Andere mochten auch (6)

Puppet Camp Paris 2016 Data in Modules
Puppet Camp Paris 2016 Data in ModulesPuppet Camp Paris 2016 Data in Modules
Puppet Camp Paris 2016 Data in Modules
 
Can you upgrade to Puppet 4.x?
Can you upgrade to Puppet 4.x?Can you upgrade to Puppet 4.x?
Can you upgrade to Puppet 4.x?
 
Puppet camp london-modulerewritingsmartway
Puppet camp london-modulerewritingsmartwayPuppet camp london-modulerewritingsmartway
Puppet camp london-modulerewritingsmartway
 
One
OneOne
One
 
PuppetConf 2016 Moving from Exec to Types and Provides
PuppetConf 2016 Moving from Exec to Types and ProvidesPuppetConf 2016 Moving from Exec to Types and Provides
PuppetConf 2016 Moving from Exec to Types and Provides
 
Gluster fs buero20_presentation
Gluster fs buero20_presentationGluster fs buero20_presentation
Gluster fs buero20_presentation
 

Ähnlich wie Upgrading Puppet CommitterConf Essen 2014

Puppet und OpenStack - Ein gutes Team
Puppet und OpenStack - Ein gutes TeamPuppet und OpenStack - Ein gutes Team
Puppet und OpenStack - Ein gutes Team
NETWAYS
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
inovex GmbH
 
Puppet - Entwicklungsworkflow und Basismodule
Puppet - Entwicklungsworkflow und BasismodulePuppet - Entwicklungsworkflow und Basismodule
Puppet - Entwicklungsworkflow und Basismodule
inovex GmbH
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HH
Florian Holzhauer
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastruktur
inovex GmbH
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
s0enke
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershell
Creasoft AG
 
Metaprogrammierung mit Ruby
Metaprogrammierung mit RubyMetaprogrammierung mit Ruby
Metaprogrammierung mit Ruby
Dario Rexin
 

Ähnlich wie Upgrading Puppet CommitterConf Essen 2014 (20)

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)
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
Puppet und OpenStack - Ein gutes Team
Puppet und OpenStack - Ein gutes TeamPuppet und OpenStack - Ein gutes Team
Puppet und OpenStack - Ein gutes Team
 
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...
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
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
 
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
 
Puppet: Aufbau einer Puppet Enterprise Umgebung (Webinar vom 28.03.2014)
Puppet: Aufbau einer Puppet Enterprise Umgebung (Webinar vom 28.03.2014)Puppet: Aufbau einer Puppet Enterprise Umgebung (Webinar vom 28.03.2014)
Puppet: Aufbau einer Puppet Enterprise Umgebung (Webinar vom 28.03.2014)
 
Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)Foreman: Provisionierungswege (Webinar vom 31. März 2016)
Foreman: Provisionierungswege (Webinar vom 31. März 2016)
 
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
 
Puppet - Entwicklungsworkflow und Basismodule
Puppet - Entwicklungsworkflow und BasismodulePuppet - Entwicklungsworkflow und Basismodule
Puppet - Entwicklungsworkflow und Basismodule
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HH
 
Puppet: Aufbau einer Open Source Umgebung (Webinar vom 09.05.2014)
Puppet: Aufbau einer Open Source Umgebung (Webinar vom 09.05.2014)Puppet: Aufbau einer Open Source Umgebung (Webinar vom 09.05.2014)
Puppet: Aufbau einer Open Source Umgebung (Webinar vom 09.05.2014)
 
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
Foreman: Klassen und Parametrisierung in Puppet (Webinar vom 20. Mai 2016)
 
Serverprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen InfrastrukturServerprovisioning in einer dynamischen Infrastruktur
Serverprovisioning in einer dynamischen Infrastruktur
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantDeployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershell
 
Raspberry Pi im Embedded Testing - „tool“ oder „toy“?
Raspberry Pi im Embedded Testing - „tool“ oder „toy“?Raspberry Pi im Embedded Testing - „tool“ oder „toy“?
Raspberry Pi im Embedded Testing - „tool“ oder „toy“?
 
Metaprogrammierung mit Ruby
Metaprogrammierung mit RubyMetaprogrammierung mit Ruby
Metaprogrammierung mit Ruby
 

Mehr von Martin Alfke

Puppet buero20 presentation
Puppet buero20 presentationPuppet buero20 presentation
Puppet buero20 presentation
Martin Alfke
 

Mehr von Martin Alfke (11)

CfgMgmtCamp 2023 - Puppet is YAML.pdf
CfgMgmtCamp 2023 - Puppet is YAML.pdfCfgMgmtCamp 2023 - Puppet is YAML.pdf
CfgMgmtCamp 2023 - Puppet is YAML.pdf
 
HashiTalksDACH-Terraform-Managing training instances in the Cloud
HashiTalksDACH-Terraform-Managing training instances in the CloudHashiTalksDACH-Terraform-Managing training instances in the Cloud
HashiTalksDACH-Terraform-Managing training instances in the Cloud
 
PuppetCamp2021-Testing Modules and ControlRepo.pdf
PuppetCamp2021-Testing Modules and ControlRepo.pdfPuppetCamp2021-Testing Modules and ControlRepo.pdf
PuppetCamp2021-Testing Modules and ControlRepo.pdf
 
Puppet Camp Germany 2020 - Puppet Control Repo and GIT
Puppet Camp Germany 2020 - Puppet Control Repo and GITPuppet Camp Germany 2020 - Puppet Control Repo and GIT
Puppet Camp Germany 2020 - Puppet Control Repo and GIT
 
DevOps - How to get technical buy in
DevOps - How to get technical buy inDevOps - How to get technical buy in
DevOps - How to get technical buy in
 
ADDO 2019 DevOps in a containerized world
ADDO 2019 DevOps in a containerized worldADDO 2019 DevOps in a containerized world
ADDO 2019 DevOps in a containerized world
 
OpenRheinRuhr 2018 - Ops hates containers! Why?
OpenRheinRuhr 2018 - Ops hates containers! Why?OpenRheinRuhr 2018 - Ops hates containers! Why?
OpenRheinRuhr 2018 - Ops hates containers! Why?
 
Power of Puppet 4
Power of Puppet 4Power of Puppet 4
Power of Puppet 4
 
Puppet future parser
Puppet future parserPuppet future parser
Puppet future parser
 
developing sysadmin, sysadmining developersGuug devops puppet
developing sysadmin, sysadmining developersGuug devops puppetdeveloping sysadmin, sysadmining developersGuug devops puppet
developing sysadmin, sysadmining developersGuug devops puppet
 
Puppet buero20 presentation
Puppet buero20 presentationPuppet buero20 presentation
Puppet buero20 presentation
 

Upgrading Puppet CommitterConf Essen 2014

  • 1. Upgrading Puppet HowTo PuppetCamp Düsseldorf Martin Alfke <martin.alfke@buero20.org>
  • 2. Wer • Martin Alfke • Berlin • Freelancer / Trainer • Puppet @ Linuxhotel • Puppet User Group Berlin
  • 3. Poll ! ! • Puppet 2.x?
  • 4. Poll ! ! • Puppet 2.x? • Puppet 3.x?
  • 5. Agenda • Warum soll man Puppet aktualisieren? • Funktioniert der alte Puppet DSL code noch? • Wie führe ich das Upgrade durch? • Was kommt in Puppet 4?
  • 6. Warum upgraden? • Sehr schneller Release Zyklus • Best Practices • Neue oder geänderte Funktionalität • Endlich fallen alte Sachen raus • Puppet 4 kommt!
  • 7. Why should I upgrade Puppet at all? • Do you want security updates? • Do you want to make use of new functionality? (e.g. automatic data bindings, environmentpath, future parser) • Do you want to get support (community or enterprise)?
  • 8. Funktionieren meine Module noch? • Der eigene Puppet Code (Module) wurde vor einiger Zeit entwickelt und wird einfach benutzt. • Der eigene Puppet Code basiert noch auf alten Best Practices und folgt nicht den neuen Style Guides • Alle schauen immer in ihre Puppet Logfiles und prüfen auf “deprecation warnings”
  • 9. Worauf muss man achten?
  • 10. BAD Best practice • Multiple Vererbung (inherits) • Verwendung von import • Modifizieren von Remote Modules • Benutzung von Variablen ohne Angabe des Scopes
  • 11. Best practice Restriktive Benutzung von Vererbung ! Anstelle von Vererbung kann man oft parametrisierte Klassen verwenden. Aktuelle “Best Practice” ist nur noch Vererbung von params.pp !! BETTER class ssh ( $server = $ssh::params::server, $client = $ssh::params::client, $x11fwd = false, ) inherits ssh::params { } ! class { ssh::params:: server => false, x11fwd => true, }
  • 12. Best practice Include verwenden ! Nutzt den Puppet Autoloader. ! # ssh/manifests/init.pp class ssh { include ssh::server } ! # ssh/manifests/server class ssh::server { } ! BETTER
  • 13. Best practice “Remote Modules” sind Open-Source -> helft beim Besser machen. ! Erstelle ein Issue oder PR wenn eine Verbesserung rein soll. ! Sorge dafür, dass die Remote Modules upgradefähig bleiben. BETTER
  • 14. Best practice Setze beim Verwenden von Variablen den Scope. ! class ssh ( $server ) { } ! class ssh::server { notify { $ssh::server: } } BETTER
  • 15. Best practice Nutzt die Scope function in Templates !! BETTER key = <%= @ssh::server %> ! oder ! key = <%= scope.lookupvar(‘ssh::server’) %> ! oder ! key = <%= scope[‘ssh::server’]
  • 16. Best practice Setzt bei facter Variablen den Top Scope ! class ssh { notify { “OS: ${::operatingsystem}”: } } ! class ssh::server { if $::is_virtual { notify { “Virtuelle Maschine unter ${::virtual}”: } } else { notify { “Hardware: ${::productname}”: } } BETTER
  • 17. Best practice Ab sofort immer mit Daten Validierung ! class ssh ( $server = hiera(‘server’, ‘localhost’) ){ # validate_string is a function from stdlib validate_string($server) notify { “We will use Server: ${server}”: } } ! BETTER
  • 18. Remote modules • Welche Puppet Version unterstützen “Remote Modules”? • Neue Puppet Versionen habe neue function Attribute (z.B. arity) • Neue Remote Modules können neuere Puppet Versionen voraussetzen. • Neue Remote Modules können andere Module erfordern, die nicht von der installierten Puppet Version unterstützt werden.
  • 19. Remote modules • Prüft Puppetfile / metadata.json in Hinsicht auf Versionen • Testet neue Module vor dem Einsatz auf Produktivsystemen
  • 20. Wie kann ich meinen Puppet DSL code testen?
  • 21. Wie kann ich meinen Puppet DSL code testen? • Syntax/Semantische Prüfung • puppet parser validate / puppet-syntax / puppet-lint • Unit Tests • rspec-puppet • Integrations Tests • beaker, vagrant, serverspec,…
  • 23. Einfacher rspec upgrade Test • Fügt spec Tests zu den eigenen Modulen hinzu • Nutzt rvm oder rbenv um zwischen verschiedenen Ruby Versionen zu wechseln • Setzt im Gemfile die zu verwendende Puppet Version • Führt spec lokal aus und prüft das Ergebnis
  • 25. Einfacher Puppet upgrade Test • Download des tar Archives, Auspacken • manueller Start des Puppet Master wahlweise mit RUBYLIB oder ruby -I auf einem anderen Port (— masterport 8141) • Testlauf von einem Node gegen den neuen PuppetMaster
  • 26. Einfacher Puppet upgrade Test Beispiel: zweiter Puppet Master Prozess: ! tar zxf puppet-3.7.1.tar.gz -C /opt/puppet-3.7.1 ! ruby1.8 -I /opt/puppet-3.7.1/lib /opt/puppet-3.7.1/bin/puppet master —nodaemonize —masterport=8150 —pidfile=/tmp/puppetmaster.pid !! Beispiel: Agent Lauf gegen den zusätzlichen Puppet Master Prozess: ! puppet agent —test —masterport 8150
  • 27. Demo
  • 28. Puppet 4 • Major update • Alte (deprecated) Funktionalität fliegt raus • Neue Features in Puppet DSL
  • 29. Puppet 4 • Deprecated in Puppet 4: • node inheritance - statt dessen sollen roles/profiles verwendet werden • Variablen mit Großbuchstaben • Variablen mit einem Unterstrich an erster Position • Referenzen auf Klassen wobei die Klasse mit Großbuchstaben angegeben wird • Anführungszeichen und Punkte in Namen (Module, Klassen, …) • Ruby DSL
  • 30. Puppet 4 • Neu in Puppet 4: • Striktes Namensschema für Variablen und Lookup (wird in Puppet 5 zwingend) • Typen Validierung von Variablen • Boolsche Prüfung (“” -> true anstatt false) • Environmentpath • Funktionen in Puppet DSL • Neue API für Ruby Funktionen
  • 31. Upgrading Puppet HowTo ! Thank you. ! Martin Alfke <martin.alfke@buero20.org>