Puppet• Conﬁguration management utility• Written in Ruby (^_^)• Model driven• Abstract OS layer• Focus on high level details and relationships
General overview Modules Puppet Master Node conﬁguration General infrastructure Monitoring LDAP / Kerberos SSH gatewayNagios, Munin Applications infrastructureDevelopment Staging Production app servers, web servers, httpd, mysqld, ... VMs, httpd, mysqld db servers, ... Puppet clients
Anatomy of a puppet run1. Requests a signed certiﬁcate (ﬁrst run only)2. Collects facts (hardware, OS, hostname, ...)3. Obtains latest catalog from master4. Apply changes5. Sends report of changes and failure to master
Structure of a module deﬁne how the modulemanifests/ works static contentﬁles/ notonthehighstreet.cert dynamic templatestemplates/ httpd.conf.erb ruby based librarieslib/ package providers, ...spec/, tests/, features/... tests for classes, deﬁnitions
Manifestsa collection of resources & relationships
Resource collectionsClasses, parameterised classes, deﬁned resource types Classes:• single inheritance• singleton• are typically used to group all the resources of a particular package, service, ...
Present• Most of our services managed by Puppet• Most of our environments managed by Puppet• Basic testing process in place on Jenkins
Future• Centralise host provisioning with Foreman• Complete testing cycle with production-like testing servers• Deploy fully working application servers from scratch with Puppet• Puppet 3.0 / Ruby 1.9• Provide development instance conﬁgurable with Puppet