Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Puppet and Vagrant in Development

Puppet and Vagrant in Development

Talked about using Puppet and Vagrant to help ease the creation of development environments and matching the production environment.

Adam Culp

July 11, 2012
Tweet

More Decks by Adam Culp

Other Decks in Programming

Transcript

  1. Puppet and Vagrant in Development  Puppet is:  Automation

    software to help system admins manage infrastructure.  Automates provisioning and configuration  Automate repetitive tasks  Ensure stability through consistency  Open source and commercial versions
  2. Puppet and Vagrant in Development  Puppet Components:  Puppet

    Master  Puppet Agent  Puppet Enterprise Console (not in open source)  Puppet Module Tool  Puppet Compliance  Mcollective  Facter
  3. Puppet and Vagrant in Development  Third-party Product Needs: 

    Ruby  Apache HTTP server  Phusion Passenger  ActiveMQ  Ruby on Rails
  4. Puppet and Vagrant in Development  Supported Operating Systems: 

    RHEL  CentOS  Ubuntu  Debian  Scientific Linux  Oracle Linux  SUSE  Solaris  Windows
  5. Puppet and Vagrant in Development  Pieces  Modules for

    popular configurations  Compose application stack needed  Rollout to the node
  6. Puppet and Vagrant in Development  Workflow  Node informs

    Puppet Master of status  Puppet Master compiles a catalog  Node complies with catalog  Puppet Agent on client reports back to Puppet Master  Puppet Master reports to Report Collector.
  7. Puppet and Vagrant in Development  Sample Usages  Roll

    out another node in a cluster  Webserver  Email server  Database server  Etc.  Add another workstation  Create lifecycle machine  Development  Testing  Staging  Production
  8. Puppet and Vagrant in Development  Puppet Resources  Puppet

    defines resources in a array'ish language User { 'dave': Ensure => present, uid => '507', gid => 'admin', shell => '/bin/zsh', home => '/home/dave', managehome => true, }  We can see the parts of the structure  Type = User  Title = Dave  Attributes  Values
  9. Puppet and Vagrant in Development  Puppet Adding a Resources

     What does it look like: $ puppet resource user dave ensure=present shell=”/bin/zsh” home=”/home/dave” managehome=true  Would output: Notice: /User[dave]/ensure: created User { 'dave': Ensure => present, uid => '507', gid => 'admin', shell => '/bin/zsh', home => '/home/dave', managehome => true, }
  10. Puppet and Vagrant in Development  Puppet Manifests  Can

    inform Puppet what to do in bulk using manifests. $ puppet apply my_test_manifest.pp  Manifest would look like: # /path/to/my_test_manifest.pp User { 'dave': Ensure => present, uid => '507', gid => 'admin', shell => '/bin/zsh', home => '/home/dave', managehome => true, }
  11. Puppet and Vagrant in Development  Puppet Manifest Classes 

    The Puppet manifests can become complex. Class ntp { package { 'ntp': ensure => installed, } service { 'ntp': name => 'ntpd', ensure => running, enable => true, subscribe => File['ntp.conf'], } }
  12. Puppet and Vagrant in Development  Puppet Training  Materials

    available on PuppetLabs site for FREE download.  Learning Puppet Tutorial  Learn Puppet VM to train on (VMWare or VirtualBox)  Module cheatsheet  Core types cheatsheet  Users Guide  Dashboard Manual
  13. Puppet and Vagrant in Development  Provisioned Your Way 

    VirtualBox – through 3rd party  VMWare – direct Puppet support  Cloud – direct Puppet support  Traditional hardware - standard
  14. Puppet and Vagrant in Development  Vagrant  Virtualized development

    made easy  Lowers setup time  Eliminates “works on my machine” excuse  Uses Oracle VirtualBox  Can use Puppet or Chef  FREE and open source
  15. Puppet and Vagrant in Development  Vagrant setup items needed

    for this example  Get VirtualBox from Oracle's download page  Install Ruby  Required by Vagrant, Chef and/or Puppet.  Install Vagrant  Talks to VirtualBox and builds virtual machine based on a “base box”.  Decide on whether to use Chef or Puppet.  Enables setup and configuration of advanced services you may need in your environment.
  16. Puppet and Vagrant in Development  Vagrant Basic How To

     Create a directory and change to the new directory via command line.  Execute three simple commands: $ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box $ vagrant init lucid32 $ vagrant up  We now have a working Ubuntu (Lucid Lynx 32 bit) linux server running. However it is very “bare bones”.  List installed Boxes $ vagrant box list
  17. Puppet and Vagrant in Development  Benefits of Using Vagrant

     Solo Developers  Maintain consistency across multiple projects.  Run multiple environments on a single home machine. (Dev., Test, Staging)  Easily tear down and rebuild  Teams  Identical development environments. Consistent and portable.  Companies  Easier onboarding of new talent.  Build development environment once and distribute to teams.
  18. Puppet and Vagrant in Development  Vagrant Configuration  Vagrantfile

     Simply Ruby code which typically contains a Vagrant configuration block.  First thing loaded by Vagrant.  Basic file created when 'init' is called from within a directory.  Add more options for more configuration.
  19. Puppet and Vagrant in Development  Vagrant Base Box 

    Many base boxes available over the Internet, or you can create your own.  Creation convention should be followed  A base box must be added via local file or HTTP $ vagrant box add {name} {location to pull from}  Or you can remove current base boxes $ vagrant box remove {name}  Base box is defined in the Vagrantfile Vagrant::Config.run do |config| config.vm.box = “lucid32” end
  20. Puppet and Vagrant in Development  Testing/Running  To launch

    the bootup/provision we simply tell Vagrant “up”. $ vagrant up  Or if you “suspended” to shut down last time you would use “resume”.  To shut down we can either “suspend” to save the current state of the machine (does not return disk space, about 1GB), “destroy” everything (requires re-provision), or “halt” which is a graceful shutdown. $ vagrant destroy $ vagrant halt
  21. Puppet and Vagrant in Development  SSH  Vagrant makes

    SSH easy to the virtual machine from within the project directory. $ vagrant ssh  Project files are available at '/vagrant' by default, but can be changed.  The VM has both read and write access to the shared folder.  To gain root (su) access the password is 'vagrant'
  22. Puppet and Vagrant in Development  Provisioning  Using Chef

    or Puppet we can create a manifest to alter the VM.  Install apps  Edit config files  Many tasks needed to go from Base Box to desired environment.  Manifests (or recipe for Chef)  Manifests sub-directory within project.  Default.pp is the default file loaded.
  23. Puppet and Vagrant in Development  Port Forwarding  By

    default your host machine should be able to access the virtual machine by IP address. However, we need to activate port forwarding for services.  For HTTP: Vagrant::Config.run do |config| # Forward guest port 80 to host port 4567 config.vm.forward_port 80, 4567 end  Then we simply reload Vagrant. $ vagrant reload
  24. Puppet and Vagrant in Development  Packaging  Start with

    a Base Box  Customize it as needed, unless relying solely on provisioning with Chef or Puppet.  Run command to package $ vagrant package –vagrantfile Vagrantfile.pkg  Creates 'package.box' in same directory.  Distribute via raw file or via HTTP, for others.  Other users can now use: $ vagrant box add my_box /path/to/the/package.box $ vagrant init my_box $ vagrant up
  25. Puppet and Vagrant in Development  Advanced Capabilities of Vagrant

     Many advanced topics available under Documentation on the Vagrant site.  Modules within Manifests to encapsulate Puppet files.  Create your own Base Boxes  Multi-VM Environment  Plugins  NFS Shared Folders
  26. Puppet and Vagrant in Development  Resources  http://vagrantup.com 

    http://puppetlabs.com  http://opscode.com/chef/  http://virtualbox.org View details and rate at https://joind.in/6709
  27. Puppet and Vagrant in Development  Thank you Adam Culp

    http://www.geekyboy.com http://github.com/adamculp Twitter @adamculp