Puppet and Vagrant in Development




   View details and rate at https://joind.in/6709
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
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
Puppet and Vagrant in Development

   Third-party Product Needs:
       Ruby
       Apache HTTP server
       Phusion Passenger
       ActiveMQ
       Ruby on Rails
Puppet and Vagrant in Development

   Supported Operating Systems:
       RHEL
       CentOS
       Ubuntu
       Debian
       Scientific Linux
       Oracle Linux
       SUSE
       Solaris
       Windows
Puppet and Vagrant in Development
   Pieces
       Modules for
        popular
        configurations
       Compose
        application stack
        needed
       Rollout to the
        node
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.
Puppet and Vagrant in Development
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
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
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,
}
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,
}
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'],
    }
}
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
Puppet and Vagrant in Development
   Provisioned Your Way
       VirtualBox – through 3rd party
       VMWare – direct Puppet support
       Cloud – direct Puppet support
       Traditional hardware - standard
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
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.
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
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.
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.
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
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
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'
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.
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
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
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
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
Puppet and Vagrant in Development

   Thank you


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

Puppet and Vagrant in development

  • 1.
    Puppet and Vagrantin Development View details and rate at https://joind.in/6709
  • 2.
    Puppet and Vagrantin 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
  • 3.
    Puppet and Vagrantin Development  Puppet Components:  Puppet Master  Puppet Agent  Puppet Enterprise Console (not in open source)  Puppet Module Tool  Puppet Compliance  Mcollective  Facter
  • 4.
    Puppet and Vagrantin Development  Third-party Product Needs:  Ruby  Apache HTTP server  Phusion Passenger  ActiveMQ  Ruby on Rails
  • 5.
    Puppet and Vagrantin Development  Supported Operating Systems:  RHEL  CentOS  Ubuntu  Debian  Scientific Linux  Oracle Linux  SUSE  Solaris  Windows
  • 6.
    Puppet and Vagrantin Development  Pieces  Modules for popular configurations  Compose application stack needed  Rollout to the node
  • 7.
    Puppet and Vagrantin 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.
  • 8.
    Puppet and Vagrantin Development
  • 9.
    Puppet and Vagrantin 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
  • 10.
    Puppet and Vagrantin 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
  • 11.
    Puppet and Vagrantin 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, }
  • 12.
    Puppet and Vagrantin 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, }
  • 13.
    Puppet and Vagrantin 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'], } }
  • 14.
    Puppet and Vagrantin 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
  • 15.
    Puppet and Vagrantin Development  Provisioned Your Way  VirtualBox – through 3rd party  VMWare – direct Puppet support  Cloud – direct Puppet support  Traditional hardware - standard
  • 16.
    Puppet and Vagrantin 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
  • 17.
    Puppet and Vagrantin 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.
  • 18.
    Puppet and Vagrantin 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
  • 19.
    Puppet and Vagrantin 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.
  • 20.
    Puppet and Vagrantin 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.
  • 21.
    Puppet and Vagrantin 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
  • 22.
    Puppet and Vagrantin 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
  • 23.
    Puppet and Vagrantin 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'
  • 24.
    Puppet and Vagrantin 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.
  • 25.
    Puppet and Vagrantin 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
  • 26.
    Puppet and Vagrantin 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
  • 27.
    Puppet and Vagrantin 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
  • 28.
    Puppet and Vagrantin Development  Resources  http://vagrantup.com  http://puppetlabs.com  http://opscode.com/chef/  http://virtualbox.org View details and rate at https://joind.in/6709
  • 29.
    Puppet and Vagrantin Development  Thank you Adam Culp http://www.geekyboy.com http://github.com/adamculp Twitter @adamculp