Vagrant and Configuration Management

Post on 08-May-2015

4.747 views 0 download

description

Short talk given to engineers and operations folk at The Guardian introducing the Vagrant virtualisation management tool.

Transcript of Vagrant and Configuration Management

http://www.flickr.com/photos/mundoo/313716925gareth rushgrove | morethanseven.net

Vagrantand Configuration Management

The Guardian 1st April 2011

Gareth Rushgrove

gareth rushgrove | morethanseven.net

morethanseven.net

Work at FreeAgent

gareth rushgrove | morethanseven.net

freeagentcentral.com

Blog at morethanseven.net

gareth rushgrove | morethanseven.net

Currate devopsweekly.com

gareth rushgrove | morethanseven.net

http://www.flickr.com/photos/arttravel_nz/4178520218gareth rushgrove | morethanseven.net

Problems

- Not all developers want to be sysadmins- New employees or contractors starting

- Works on my machine syndrome- Advantage to running a full stack locally- local service based architectures

gareth rushgrove | morethanseven.net http://www.flickr.com/photos/exalthim/3597210568

Solutions

- Virtualisation

- Configuration management- Vagrant

Virtualisation needs powerful hardware

gareth rushgrove | morethanseven.net http://www.flickr.com/photos/martinoc/477335951

VirtualBox

gareth rushgrove | morethanseven.net

VMware

gareth rushgrove | morethanseven.net

Vagrant

gareth rushgrove | morethanseven.net

vagrantup.com

What is Vagrant?

gareth rushgrove | morethanseven.net

- Automated virtual machine creation using Oracle’s VirtualBox

- Automated provisioning of virtual environments using Chef or Puppet

- Full SSH access to created environments

- Assign a static IP to your VM, accessible from your machine

- Forward ports to the host machine

- Shared folders allows you to continue using your own editor

- Package environments into distributable boxes

- Completely tear down environment when you’re done

- Easily rebuild a complete environment with a single command

$ gem install vagrant$ vagrant box add lucid32 http://.../lucid32.box$ vagrant init$ vagrant up

Vagrant up

gareth rushgrove | morethanseven.net

Vagrant::Config.run do |config| config.vm.box = "lucid32"end

Vagrantfile

gareth rushgrove | morethanseven.net

Vagrant::Config.run do |config| config.vm.forward_port("web", 80, 8080) config.vm.forward_port("ftp", 21, 4567) config.vm.forward_port("ssh", 22, 2222, :auto => true)end

Port forwarding

gareth rushgrove | morethanseven.net

Vagrant::Config.run do |config| config.vm.share_folder("folder", "/guest", "../host")end

Shared folders

gareth rushgrove | morethanseven.net

Vagrant::Config.run do |config| config.vm.define :web do |web_config| web_config.vm.box = "web" web_config.vm.forward_port("http", 80, 8080) end

config.vm.define :db do |db_config| db_config.vm.box = "db" db_config.vm.forward_port("db", 3306, 3306) endend

Multiple VMs

gareth rushgrove | morethanseven.net

gareth rushgrove | morethanseven.net

Base boxes

VeeWee

gareth rushgrove | morethanseven.net

Chef

gareth rushgrove | morethanseven.net

Vagrant provisioning with Chef

gareth rushgrove | morethanseven.net

Vagrant::Config.run do |config| config.vm.provision :chef_solo do |chef| chef.roles_path = "roles" chef.add_role("vm") endend

Vagrant provisioning with Chef Server

gareth rushgrove | morethanseven.net

Vagrant::Config.run do |config| config.vm.provision :chef_server do |chef| chef.chef_server_url = "http://chefserver" chef.add_role("vm") endend

Vagrant::Config.run do |config| config.vm.provision :chef_solo do |chef| chef.recipe_url = "http://github.com/cookbooks.tar.gz" chef.add_recipe "garethr" chef.cookbooks_path = [:vm, "cookbooks"] chef.json.merge!({ :garethr => { :ohmyzsh => "https://github.com/.../oh-my-zsh.git", :dotvim => "https://github.com/garethr/dotvim.git" }}) endend

gareth rushgrove | morethanseven.net

Remote Tar File

Puppet

gareth rushgrove | morethanseven.net

Vagrant provisioning with Puppet

gareth rushgrove | morethanseven.net

Vagrant::Config.run do |config| config.vm.provision :puppet do |puppet| puppet.manifests_path = "puppetmanifests" puppet.manifest_file = "newbox.pp" endend

Vagrant provisioning with Puppet Server

gareth rushgrove | morethanseven.net

Vagrant::Config.run do |config| config.vm.provision :puppet_server do |puppet| puppet.puppet_server = "puppet.example.com" puppet.puppet_node = "vm.example.com" endend

gareth rushgrove | morethanseven.net ttp://www.flickr.com/photos/moonboots/40371626

Advantages

gareth rushgrove | morethanseven.net http://www.flickr.com/photos/exalthim/1783760822

- Executable documentation- Early and often testing of configuration

- Shared language between dev and ops

Questions?

gareth rushgrove | morethanseven.net http://flickr.com/photos/psd/102332391/