Your SlideShare is downloading. ×
Provisioning with Puppet
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Provisioning with Puppet

715
views

Published on

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
715
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Provisioning with PuppetPhoto: http://www.flickr.com/photos/vasta/4463786284/
  • 2. $ whoami Joe Ray Senior Systems Developer Future Publishing @jr261
  • 3. Overview• Why you should use provisioners• What is Puppet?• How do you use it?• Using Puppet with Vagrant• Using Puppet in production
  • 4. Why use provisioners?• Reproducible setup• Write less documentation• Same config for multiple platforms• Scale your setup • Easily move from development to production • Distribute amongst team • SSH access not necessary• Use associated tools
  • 5. What is Puppet?• Configuration management tool• Platform-agnostic (supports Linux, Free/OpenBSD, OSX, Windows, Solaris)• Description of systems configuration using manifests• Idempotent
  • 6. Resources• Building blocks of configuration: • packages • services • files • users / groups
  • 7. Resourcespackage { nginx: ensure => present,}user { joe: ensure => present, shell => /bin/zsh, home => /home/joe,}
  • 8. Modules• Self-contained, reusable sets of resources• Typical pattern: • Install package • Manage service • Provide configuration helpers (defined types)• http://forge.puppetlabs.com
  • 9. Modulesclass nginx($workers=1, $ensure=present) { package { nginx: ensure => $ensure, } service { nginx: ensure => $ensure, subscribe => File["/etc/nginx/nginx.conf"], require => File["/etc/nginx/nginx.conf"], } file { "/etc/nginx/nginx.conf": ensure => $ensure, content => template("nginx/nginx.conf.erb"), require => Package[nginx], }}
  • 10. Templatesserver {! listen 80;! server_name <%= domain %>;! root <%= root %>;! access_log /var/log/nginx/<%= domain %>.access.log;! keepalive_timeout 5;! location / { index index.html index.htm;! }}
  • 11. Using modulesinclude nginxclass { nginx: workers => 5,}nginx::site { www.mywebsite.com: config => www.mywebsite.com, root => /data/www.mywebsite.com,}
  • 12. Using withVagrant::Config.run do |config| config.vm.provision :puppet do |puppet| puppet.manifests_path = "manifests" puppet.manifest_file = "my_manifest.pp" endend
  • 13. Facts• How Puppet knows about your system$ facterarchitecture => amd64domain => vagrantup.comfacterversion => 1.6.17fqdn => debian6.vagrantup.comhardwareisa => unknownhardwaremodel => x86_64hostname => debian6id => vagrantinterfaces => eth0,loipaddress => 10.0.2.15etc...
  • 14. Using withVagrant::Config.run do |config| config.vm.provision :puppet, :facts =>{"vagrant" => "vagrant"} do |puppet| puppet.manifests_path = "manifests" puppet.manifest_file = "my_manifest.pp" endend
  • 15. Using withserver {! listen 80;! server_name <%= domain %>;! root <%= root %>; <% if @vagrant %> satisfy any; deny all; allow 192.168.33.1; allow 10.0.2.2; <% end %>! access_log /var/log/nginx/<%= domain %>.access.log;! keepalive_timeout 5;! location / { index index.html index.htm;! }}
  • 16. Using Puppet in production manifests / git / svn Puppetmaster modules / files or whatever REST over HTTPS Reports Client Client Client
  • 17. What next?• Example Puppet project at: github.com/ josno/puppet-example• Read the docs: docs.puppetlabs.com