software to help system admins manage infrastructure. Automates provisioning and configuration Automate repetitive tasks Ensure stability through consistency Open source and commercial versions
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.
out another node in a cluster Webserver Email server Database server Etc. Add another workstation Create lifecycle machine Development Testing Staging Production
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
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, }
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
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.
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
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.
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.
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
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
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'
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.
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
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
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