2. Infrastructure progressio
cum Puppet
IT Infrastructures development with Puppet
Alessandro Franceschi / Lab42
CodeMotion 2012 Roma
Creative Commons BY-NC-SA 3.0
21. Mater semper
certa est,
pater nunquam
O: Who changed that file?!
info: Filebucket[/var/lib/puppet/clientbucket]: Adding /etc/
resolv.conf(d7fbc1695489ce896d30b7b04d72887c)
info: //test/File[/etc/resolv.conf]: Filebucketed /etc/resolv.conf to main with sum
d7fbc1695489ce896d30b7b04d72887c
Old file is copied in:
/var/lib/puppet/clientbucket/d/7/f/b/c/1/6/9/d7fbc1695489ce896d30b7b04d72887c/content
23. Nodes definitions
In Puppet code: On an External Node Classifier (ENC)
/etc/puppet/manifests/site.pp
node 'prod-fep-1' {
$status = "prod"
include role_fep
}
node 'prod-fep-2' { The Foreman
$status = "prod"
include role_fep
}
node 'test-fep-1' {
$status = "test"
include role_fep
}
Puppet Dashboard
node 'dev-fep-1' {
$status = "dev"
include role_fep
}
[...]
Puppet Enterprise Console
24. Classes (collections of resources)
class role_fep {
$role="fep"
include general # We see it in the next slide
include apache
include php::pear
include php::dev
include php::oci8
apache::module { "rewrite": }
apache::module { "proxy": templatefile => "proxy.conf.erb" }
php::module { "gd": }
php::pear::module { "apc": }
php::pear::module { "XML_Serializer": use_package => "no" }
php::pecl::config { "http_proxy": value => "$proxy_server" }
[...]
# Sample custom files
file { ‘/data’:
ensure => directory,
}
file { ‘/data/www’:
ensure => $::operatingsystem ? {
/(?i:Centos|RedHat|Scientific|Fedora)/ => ‘/var/www/html’,
/(?i:Debian|Ubuntu|Mint)/ => ‘/var/www’,
},
require => File[‘/data’]:
}
}
25. Classes ( a baseline common to all nodes )
class general {
include puppet
include users
include openssh
include hosts
include resolver
include sudo
include snmpd
include nrpe
include munin
case $::operatingsystem {
ubuntu,debian: {
include apt
include exim
}
centos,redhat: {
include yum
}
default: { }
}
}
26. Modules - Directory layout
/etc/puppet/modules/ ($modulepath)
apache/ One Application, One Module, One class
apache/manifests/
apache/manifests/init.pp Puppet Manifests ( code in the Puppet DSL )
apache/manifests/module.pp
apache/lib/
apache/lib/puppet/
Puppet extensions ( code in Ruby )
apache/lib/puppet/parser/
apache/lib/puppet/parser/functions
apache/lib/puppet/provider/
apache/lib/puppet/type/
apache/lib/facter/
apache/templates/ Erb Templates (files with dynamic content)
apache/files/ Static files
apache/spec/
apache/spec/classes/ Rspec tests
apache/spec/defines/
apache/Modulefile Module’s metadata for the Puppet Forge
apache/README.md
28. LINKS
for a better living
http://docs.puppetlabs.com/ - PuppetLabs documentation
http://planetpuppet.org/ - Planet Puppet - Feeds aggregator
http://puppetlabs.com/community/puppet-camp/ - PuppetCamps
https://bitly.com/wnvqaN - How to start with Puppet - Useful links
http://www.example42.com/ - Example42 Puppet modules ( disclaimer ;-)
29. DO UT DES
Automated Systems Setups
Coherent Infrastructure
Track and History of Change
Installations Replicability
A new language to learn
Quick propagation of changes
Effectiveness needs practice
Aligned Environments for Test/[...]/Prod
If there’s code , there are bugs
Automated monitoring
Make Puppet the Enforcer not the Violator
Discipline in Systems management
More time to make things done (the first time)
Great Power gives Great Responsibilities
30. ad maiora
Questions?
Graphics:
@alvagante www.tatlin.net