SlideShare a Scribd company logo
1 of 114
Vagrant: virtualise your
development environment
Michael Peacock
August 2012, SuperMondays
About Me
 @michaelpeacock
Head Developer @ Ground Six
Leading the development team and managing the
development process
We are a tech investment company: you bring ideas, we
partner and build the product
Author
Occasional Speaker
Virtualisation
Virtualisation

 Abstraction layer for your hardware
Virtualisation

 Abstraction layer for your hardware
 Lets multiple Operating Systems run concurrently, each
 running on their own virtual hardware
Virtualisation

 Abstraction layer for your hardware
 Lets multiple Operating Systems run concurrently, each
 running on their own virtual hardware
 Limited by your own physical hardware and your host
 machine
VirtualBox
VirtualBox


 www.virtualbox.org
VirtualBox


 www.virtualbox.org
 Virtualisation software tool
VirtualBox


 www.virtualbox.org
 Virtualisation software tool
 Provides the hardware abstraction layer and an
 interface for running VMs
Vagrant
Vagrant

www.vagrantup.com
 “Create and configure lightweight, reproducable, and
 portable development environments”
Vagrant

www.vagrantup.com
  “Create and configure lightweight, reproducable, and
  portable development environments”
Set of command line tools which interacts with and
automates VirtualBox
Vagrant

www.vagrantup.com
  “Create and configure lightweight, reproducable, and
  portable development environments”
Set of command line tools which interacts with and
automates VirtualBox
Designed around portability
Puppet



Provisioning Service
Why?
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Server configuration can be version controlled
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Server configuration can be version controlled
Cross-platform: work from any machine
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Server configuration can be version controlled
Cross-platform: work from any machine
Work on multiple projects? Easy to pickup an old, legacy
project with its funky server configs
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Server configuration can be version controlled
Cross-platform: work from any machine
Work on multiple projects? Easy to pickup an old, legacy
project with its funky server configs
Can run multiple VMs independently
Why?
Quick start time for new team members
  Vagrant up: you have a development environment
Server configuration can be version controlled
Cross-platform: work from any machine
Work on multiple projects? Easy to pickup an old, legacy
project with its funky server configs
Can run multiple VMs independently
Doesn’t mess with your local, host machine
Some terms
Some terms


Host: Your physical machine
Some terms


Host: Your physical machine
Guest: The VM
Overview
Overview
1.Project specific configuration file
Overview
1.Project specific configuration file
2.Import base box
Overview
1.Project specific configuration file
2.Import base box
3.Boot up Virtual Machine
  1.Forward Ports
  2.Share folders
Overview
1.Project specific configuration file
2.Import base box
3.Boot up Virtual Machine
  1.Forward Ports
  2.Share folders
4.Configure / provision software
3 lines: up and running
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
3 lines: up and running
 # download a “base” VM image and give it the name
# base for future use
vagrant box add base http://files.vagrantup.com/
precise64.box

# Initialise a new vagrant project
# i.e. create a new vagrant file
vagrant init

# Boot the VM based off the config file we created
vagrant up
Let’s try it...
SSH into the box
vagrant ssh
Whats happened?
Whats happened?

Downloaded a base box of Ubuntu, configured for
vagrant
Whats happened?

Downloaded a base box of Ubuntu, configured for
vagrant
Created a new project
  Configured to use this base box by default
Whats happened?

Downloaded a base box of Ubuntu, configured for
vagrant
Created a new project
  Configured to use this base box by default
Booted the VM: vagrant up
Whats happened?

Downloaded a base box of Ubuntu, configured for
vagrant
Created a new project
  Configured to use this base box by default
Booted the VM: vagrant up
Connected into the VM: vagrant ssh
Managing the VM
Managing the VM
Suspend
  vagrant suspend
Managing the VM
Suspend
  vagrant suspend
Resume
  vagrant resume
Managing the VM
Suspend
  vagrant suspend
Resume
  vagrant resume
Shutdown
  vagrant halt
Managing the VM
Suspend
  vagrant suspend
Resume
  vagrant resume
Shutdown
  vagrant halt
Turn on
  vagrant up (re-runs any provisioning tasks)
Lets try it
Suspend
Resume
Shutdown
When shit hits the fan


        vagrant destroy
vagrant destroy: a warning
vagrant destroy: a warning
 The VM is completely wiped
vagrant destroy: a warning
 The VM is completely wiped
 Anything that can’t be replicated from:
   Your project folder (shared folder)
   Vagrant base box
   Vagrant File
   Puppet Manifests
vagrant destroy: a warning
 The VM is completely wiped
 Anything that can’t be replicated from:
   Your project folder (shared folder)
   Vagrant base box
   Vagrant File
   Puppet Manifests
 WILL BE LOST FOREVER
   E.g. Databases (hint: use a DB patching or versioning tool in your
   project folder)
vagrant init
Creates a new Vagrantfile, which instructs
vagrant what too boot and how to do it. Let’s
take a peak.
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant::Config.run do |config|

  config.vm.box = "base"

end
Box to use

# use the box called base
config.vm.box = "base"

# Fallback URL, if we don't have a box called base, download from here
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
Networking
Networking
Host only
  VM is only visible to the host machine

  config.vm.network :hostonly, "192.168.33.10"
Networking
Host only
  VM is only visible to the host machine

  config.vm.network :hostonly, "192.168.33.10"

Bridged
  Network connection to the VM is bridged, letting it
  appear as a device on the network

  config.vm.network :bridged
Ports
Ports

Easiest way to use the VM is to forward ports
  Forwards port X on the host
  To port Y on the guest
Ports

Easiest way to use the VM is to forward ports
  Forwards port X on the host
  To port Y on the guest


config.vm.forward_port 80, 4567
Shared Folders
Shared Folders

Default:
  Current project (folder containing Vagrantfile) is
  mapped to /vagrant
Shared Folders

Default:
  Current project (folder containing Vagrantfile) is
  mapped to /vagrant
New shared folders:
  config.vm.share_folder "name", "/guestmount", "../
  hostfolder"
Provisioning



 So far: we can build and d
Provisioning with Puppet


config.vm.provision :puppet do |puppet|
    puppet.manifests_path = "provision/manifests"
    puppet.manifest_file = "default.pp"
    puppet.module_path = "provision/modules"
end
What can Puppet do
What can Puppet do
Checks conditions:
What can Puppet do
Checks conditions:
Package installed
What can Puppet do
Checks conditions:
Package installed
File exists / contains / etc
What can Puppet do
Checks conditions:
Package installed
File exists / contains / etc
Exec: Run an ad-hock command*

* doesn’t sit well with Puppets “checking” nature.
Execs get re-run (unless you use special conditions) on
vagrant up
Package


package { "apache2":
    ensure => present,
    require => Exec['apt-get update']
  }
Service

  service { "apache2":
      ensure => running,
      require => Package["apache2"]
    }
File

file   { '/etc/apache2/sites-available/default':
	 	    source => '/vagrant/provision/modules/apache/files/default',
	 	    owner => 'root',
	 	    group => 'root'
	 }
Exec

  exec { 'apt-get update':
       	command => '/usr/bin/apt-get update',
       	require => Exec['preparenetworking']
    	}
Users & Groups

   group { "wheel":
   !     ensure => "present",
   ! }
   !
   ! exec { "/bin/echo "%wheel ALL=(ALL) ALL"
   >> /etc/sudoers":
   !     require => Group["wheel"]
   ! }
Users & Groups

    user   { "developer":
    ! !    ensure => "present",
    ! !    gid => "wheel",
    ! !    shell => "/bin/bash",
    ! !    home => "/home/developer",
    ! !    managehome => true,
    ! !    password => "passwordtest",
    ! !    require => Group["wheel"]
    ! }
Stringing it together
  class apache {

      package { "apache2":
        ensure => present,
        require => Exec['apt-get update']
      }

      file { '/var/www/src':
  !       ensure => 'link',
  !       target => '/vagrant/src',
  !       require => Package['apache2']
  !    }
  !
  !    file { '/etc/apache2/sites-available/default':
  !    ! source => '/vagrant/provision/modules/apache/files/default',
  !    ! owner => 'root',
  !    ! group => 'root'
  !    }

      service { "apache2":
        ensure => running,
        require => Package["apache2"]
      }
  }
Using Puppet Modules


      import "apache"
      include apache
Explicit ordering



     stage { 'first': before => Stage[main] }
     class {'apache': stage => first}
Vagrant up
Multiple VMs

Within the vagrantfile, we can define multiple VMs
  E.g. need a separate VM for web and db server to
  mimic production environment?
       Vagrant::Config.run do |config|
         config.vm.define :web do |web_config|
           web_config.vm.box = "web"
           web_config.vm.forward_port 80, 8080
         end

         config.vm.define :db do |db_config|
           db_config.vm.box = "db"
           db_config.vm.forward_port 3306, 3306
         end
       end
Chef


www.opscode.com/chef
Provisioning service with Ruby based configurations
Plugins


 Backing up and snapshotting a VM
 Automated base box creators
Exporting Box

Always using the same stack / versions on your box?
Slow un-reliable Internet connection means puppet
takes an age to run? Export the base box with these
pre-installed
vagrant package
Creating your own box
Virtualbox configured:
  Guest additions
SSH & key based authentication for the vagrant user
Ruby, RubyGems, Puppet and Chef
Export the box
vagrantup.com/v1/docs/base_boxes.html
The Future



More than just VirtualBox
Caveats
Caveats
Funky permissions
  Files created on the host shared folder show without permissions on the
  guest and are inaccessible
  Solution: upgrade virtualbox guest additions on guest
Caveats
   Funky permissions
      Files created on the host shared folder show without permissions on the
      guest and are inaccessible
      Solution: upgrade virtualbox guest additions on guest
   Can’t chmod files within shared folder
config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777')

      Thanks @AnthonySterling & @ChrisDKemper
Caveats
   Funky permissions
      Files created on the host shared folder show without permissions on the
      guest and are inaccessible
      Solution: upgrade virtualbox guest additions on guest
   Can’t chmod files within shared folder
config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777')

      Thanks @AnthonySterling & @ChrisDKemper
   Waiting for VM to boot
      Open VirtualBox
      Cancel, halt the VM and try again
Caveats
   Funky permissions
      Files created on the host shared folder show without permissions on the
      guest and are inaccessible
      Solution: upgrade virtualbox guest additions on guest
   Can’t chmod files within shared folder
config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777')

      Thanks @AnthonySterling & @ChrisDKemper
   Waiting for VM to boot
      Open VirtualBox
      Cancel, halt the VM and try again
Conclusion

Virtualise your development environment
  Easy to add new team members
  Easy to work from other machines
  So long “works on my Machine”
Cheers!


Any questions?


@michaelpeacock
www.michaelpeacock.co.uk

More Related Content

What's hot

Create your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and PackerCreate your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and Packerfrastel
 
It Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentIt Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentCarlos Perez
 
Docker workshop
Docker workshopDocker workshop
Docker workshopEvans Ye
 
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...Puppet
 
Vagrant-Overview
Vagrant-OverviewVagrant-Overview
Vagrant-OverviewCrifkin
 
Installaling Puppet Master and Agent
Installaling Puppet Master and AgentInstallaling Puppet Master and Agent
Installaling Puppet Master and AgentRanjit Avasarala
 
Using Docker with Puppet - PuppetConf 2014
Using Docker with Puppet - PuppetConf 2014Using Docker with Puppet - PuppetConf 2014
Using Docker with Puppet - PuppetConf 2014Puppet
 
Preparation study of_docker - (MOSG)
Preparation study of_docker  - (MOSG)Preparation study of_docker  - (MOSG)
Preparation study of_docker - (MOSG)Soshi Nemoto
 
Instruction: dev environment
Instruction: dev environmentInstruction: dev environment
Instruction: dev environmentSoshi Nemoto
 
Docker puppetcamp london 2013
Docker puppetcamp london 2013Docker puppetcamp london 2013
Docker puppetcamp london 2013Tomas Doran
 
Vagrant and docker
Vagrant and dockerVagrant and docker
Vagrant and dockerDuckDuckGo
 
EC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerEC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerGeorge Miranda
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet
 
DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)Soshi Nemoto
 

What's hot (20)

Vagrant + Docker
Vagrant + DockerVagrant + Docker
Vagrant + Docker
 
Create your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and PackerCreate your very own Development Environment with Vagrant and Packer
Create your very own Development Environment with Vagrant and Packer
 
Vagrant
Vagrant Vagrant
Vagrant
 
It Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentIt Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software Development
 
Docker workshop
Docker workshopDocker workshop
Docker workshop
 
Vagrant
VagrantVagrant
Vagrant
 
Vagrant for real
Vagrant for realVagrant for real
Vagrant for real
 
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
 
Vagrant-Overview
Vagrant-OverviewVagrant-Overview
Vagrant-Overview
 
Vagrant to-aws-flow
Vagrant to-aws-flowVagrant to-aws-flow
Vagrant to-aws-flow
 
Vagrant presentation
Vagrant presentationVagrant presentation
Vagrant presentation
 
Installaling Puppet Master and Agent
Installaling Puppet Master and AgentInstallaling Puppet Master and Agent
Installaling Puppet Master and Agent
 
Using Docker with Puppet - PuppetConf 2014
Using Docker with Puppet - PuppetConf 2014Using Docker with Puppet - PuppetConf 2014
Using Docker with Puppet - PuppetConf 2014
 
Preparation study of_docker - (MOSG)
Preparation study of_docker  - (MOSG)Preparation study of_docker  - (MOSG)
Preparation study of_docker - (MOSG)
 
Instruction: dev environment
Instruction: dev environmentInstruction: dev environment
Instruction: dev environment
 
Docker puppetcamp london 2013
Docker puppetcamp london 2013Docker puppetcamp london 2013
Docker puppetcamp london 2013
 
Vagrant and docker
Vagrant and dockerVagrant and docker
Vagrant and docker
 
EC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerEC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and Packer
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
 
DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)
 

Viewers also liked

A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩Wen-Tien Chang
 
Vagrant and docker
Vagrant and dockerVagrant and docker
Vagrant and docker文峰 眭
 
Eclipse DemoCamp Munich - Docker Tooling and Vagrant Tooling
Eclipse DemoCamp Munich  - Docker Tooling and Vagrant ToolingEclipse DemoCamp Munich  - Docker Tooling and Vagrant Tooling
Eclipse DemoCamp Munich - Docker Tooling and Vagrant ToolingXavier Coulon
 
"Up" with vagrant and docker
"Up" with vagrant and docker"Up" with vagrant and docker
"Up" with vagrant and dockerHiroshi Miura
 
Vagrant and Docker
Vagrant and DockerVagrant and Docker
Vagrant and DockerNascenia IT
 
Vagrant vs Docker
Vagrant vs DockerVagrant vs Docker
Vagrant vs Dockerjchase50
 
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...Carlos Sanchez
 
Linux Container Technology inside Docker with RHEL7
Linux Container Technology inside Docker with RHEL7Linux Container Technology inside Docker with RHEL7
Linux Container Technology inside Docker with RHEL7Etsuji Nakai
 
Transforming Organizations with CI/CD
Transforming Organizations with CI/CDTransforming Organizations with CI/CD
Transforming Organizations with CI/CDCprime
 
Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015Alex S
 
Khaleel Devops Resume (2)
Khaleel Devops Resume (2)Khaleel Devops Resume (2)
Khaleel Devops Resume (2)khaleel a
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみたKazuto Kusama
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction Robert Reiz
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheLeslie Samuel
 

Viewers also liked (20)

A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
Vagrant and docker
Vagrant and dockerVagrant and docker
Vagrant and docker
 
Eclipse DemoCamp Munich - Docker Tooling and Vagrant Tooling
Eclipse DemoCamp Munich  - Docker Tooling and Vagrant ToolingEclipse DemoCamp Munich  - Docker Tooling and Vagrant Tooling
Eclipse DemoCamp Munich - Docker Tooling and Vagrant Tooling
 
Framework codeigniter 2
Framework codeigniter 2Framework codeigniter 2
Framework codeigniter 2
 
Vagrant教學
Vagrant教學Vagrant教學
Vagrant教學
 
"Up" with vagrant and docker
"Up" with vagrant and docker"Up" with vagrant and docker
"Up" with vagrant and docker
 
Vagrant and Docker
Vagrant and DockerVagrant and Docker
Vagrant and Docker
 
Vagrant + ansible vs docker
Vagrant + ansible vs dockerVagrant + ansible vs docker
Vagrant + ansible vs docker
 
Vagrant vs Docker
Vagrant vs DockerVagrant vs Docker
Vagrant vs Docker
 
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...
Infrastructure testing with Jenkins, Puppet and Vagrant - Agile Testing Days ...
 
Introduction to Vagrant
Introduction to VagrantIntroduction to Vagrant
Introduction to Vagrant
 
Linux Container Technology inside Docker with RHEL7
Linux Container Technology inside Docker with RHEL7Linux Container Technology inside Docker with RHEL7
Linux Container Technology inside Docker with RHEL7
 
Transforming Organizations with CI/CD
Transforming Organizations with CI/CDTransforming Organizations with CI/CD
Transforming Organizations with CI/CD
 
Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015Ansible is the simplest way to automate. MoldCamp, 2015
Ansible is the simplest way to automate. MoldCamp, 2015
 
Khaleel Devops Resume (2)
Khaleel Devops Resume (2)Khaleel Devops Resume (2)
Khaleel Devops Resume (2)
 
Dev ops engineer
Dev ops engineerDev ops engineer
Dev ops engineer
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみた
 
reveal.js 3.0.0
reveal.js 3.0.0reveal.js 3.0.0
reveal.js 3.0.0
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Similar to Vagrant

Create Development and Production Environments with Vagrant
Create Development and Production Environments with VagrantCreate Development and Production Environments with Vagrant
Create Development and Production Environments with VagrantBrian Hogan
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for DevelopersJohn Coggeshall
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for DevelopersJohn Coggeshall
 
Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Puppet
 
Node.js, Vagrant, Chef, and Mathoid @ Benetech
Node.js, Vagrant, Chef, and Mathoid @ BenetechNode.js, Vagrant, Chef, and Mathoid @ Benetech
Node.js, Vagrant, Chef, and Mathoid @ BenetechChristopher Bumgardner
 
Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Hendrik Ebbers
 
Making Developers Productive with Vagrant, VirtualBox, and Docker
Making Developers Productive with Vagrant, VirtualBox, and DockerMaking Developers Productive with Vagrant, VirtualBox, and Docker
Making Developers Productive with Vagrant, VirtualBox, and DockerJohn Rofrano
 
Varying wordpressdevelopmentenvironment wp-campus2016
Varying wordpressdevelopmentenvironment wp-campus2016Varying wordpressdevelopmentenvironment wp-campus2016
Varying wordpressdevelopmentenvironment wp-campus2016David Brattoli
 
Varying WordPress Development Environment WordCamp Columbus 2016
Varying WordPress Development Environment WordCamp Columbus 2016Varying WordPress Development Environment WordCamp Columbus 2016
Varying WordPress Development Environment WordCamp Columbus 2016David Brattoli
 
Varying WordPress Development Environment WordCamp Cincinnati 2016
Varying WordPress Development Environment WordCamp Cincinnati 2016Varying WordPress Development Environment WordCamp Cincinnati 2016
Varying WordPress Development Environment WordCamp Cincinnati 2016David Brattoli
 
Run Docker On Windows Using Vagrant
Run Docker On Windows Using VagrantRun Docker On Windows Using Vagrant
Run Docker On Windows Using VagrantJulien Barbier
 
Vagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundVagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundHendrik Ebbers
 
Monitoring kubernetes with prometheus
Monitoring kubernetes with prometheusMonitoring kubernetes with prometheus
Monitoring kubernetes with prometheusBrice Fernandes
 
Oracle Developers APAC Meetup #1 - Working with Wercker Worksheets
Oracle Developers APAC Meetup #1 -  Working with Wercker WorksheetsOracle Developers APAC Meetup #1 -  Working with Wercker Worksheets
Oracle Developers APAC Meetup #1 - Working with Wercker WorksheetsDarrel Chia
 
Development with Vagrant
Development with VagrantDevelopment with Vagrant
Development with VagrantJohn Coggeshall
 
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...Artefactual Systems - AtoM
 

Similar to Vagrant (20)

Create Development and Production Environments with Vagrant
Create Development and Production Environments with VagrantCreate Development and Production Environments with Vagrant
Create Development and Production Environments with Vagrant
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for Developers
 
Virtualization for Developers
Virtualization for DevelopersVirtualization for Developers
Virtualization for Developers
 
Vagrant
VagrantVagrant
Vagrant
 
Vagrant Up in 5 Easy Steps
Vagrant Up in 5 Easy StepsVagrant Up in 5 Easy Steps
Vagrant Up in 5 Easy Steps
 
Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)
 
Vagrant For DevOps
Vagrant For DevOpsVagrant For DevOps
Vagrant For DevOps
 
Node.js, Vagrant, Chef, and Mathoid @ Benetech
Node.js, Vagrant, Chef, and Mathoid @ BenetechNode.js, Vagrant, Chef, and Mathoid @ Benetech
Node.js, Vagrant, Chef, and Mathoid @ Benetech
 
Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013
 
Making Developers Productive with Vagrant, VirtualBox, and Docker
Making Developers Productive with Vagrant, VirtualBox, and DockerMaking Developers Productive with Vagrant, VirtualBox, and Docker
Making Developers Productive with Vagrant, VirtualBox, and Docker
 
Varying wordpressdevelopmentenvironment wp-campus2016
Varying wordpressdevelopmentenvironment wp-campus2016Varying wordpressdevelopmentenvironment wp-campus2016
Varying wordpressdevelopmentenvironment wp-campus2016
 
Varying WordPress Development Environment WordCamp Columbus 2016
Varying WordPress Development Environment WordCamp Columbus 2016Varying WordPress Development Environment WordCamp Columbus 2016
Varying WordPress Development Environment WordCamp Columbus 2016
 
Varying WordPress Development Environment WordCamp Cincinnati 2016
Varying WordPress Development Environment WordCamp Cincinnati 2016Varying WordPress Development Environment WordCamp Cincinnati 2016
Varying WordPress Development Environment WordCamp Cincinnati 2016
 
Run Docker On Windows Using Vagrant
Run Docker On Windows Using VagrantRun Docker On Windows Using Vagrant
Run Docker On Windows Using Vagrant
 
Deployment automation
Deployment automationDeployment automation
Deployment automation
 
Vagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundVagrant-Binding JUG Dortmund
Vagrant-Binding JUG Dortmund
 
Monitoring kubernetes with prometheus
Monitoring kubernetes with prometheusMonitoring kubernetes with prometheus
Monitoring kubernetes with prometheus
 
Oracle Developers APAC Meetup #1 - Working with Wercker Worksheets
Oracle Developers APAC Meetup #1 -  Working with Wercker WorksheetsOracle Developers APAC Meetup #1 -  Working with Wercker Worksheets
Oracle Developers APAC Meetup #1 - Working with Wercker Worksheets
 
Development with Vagrant
Development with VagrantDevelopment with Vagrant
Development with Vagrant
 
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...
AtoM and Vagrant: Installing and Configuring the AtoM Vagrant Box for Local T...
 

More from Michael Peacock

Immutable Infrastructure with Packer Ansible and Terraform
Immutable Infrastructure with Packer Ansible and TerraformImmutable Infrastructure with Packer Ansible and Terraform
Immutable Infrastructure with Packer Ansible and TerraformMichael Peacock
 
Test driven APIs with Laravel
Test driven APIs with LaravelTest driven APIs with Laravel
Test driven APIs with LaravelMichael Peacock
 
Symfony Workflow Component - Introductory Lightning Talk
Symfony Workflow Component - Introductory Lightning TalkSymfony Workflow Component - Introductory Lightning Talk
Symfony Workflow Component - Introductory Lightning TalkMichael Peacock
 
Alexa, lets make a skill
Alexa, lets make a skillAlexa, lets make a skill
Alexa, lets make a skillMichael Peacock
 
API Development with Laravel
API Development with LaravelAPI Development with Laravel
API Development with LaravelMichael Peacock
 
An introduction to Laravel Passport
An introduction to Laravel PassportAn introduction to Laravel Passport
An introduction to Laravel PassportMichael Peacock
 
Refactoring to symfony components
Refactoring to symfony componentsRefactoring to symfony components
Refactoring to symfony componentsMichael Peacock
 
Dance for the puppet master: G6 Tech Talk
Dance for the puppet master: G6 Tech TalkDance for the puppet master: G6 Tech Talk
Dance for the puppet master: G6 Tech TalkMichael Peacock
 
Powerful and flexible templates with Twig
Powerful and flexible templates with Twig Powerful and flexible templates with Twig
Powerful and flexible templates with Twig Michael Peacock
 
Introduction to OOP with PHP
Introduction to OOP with PHPIntroduction to OOP with PHP
Introduction to OOP with PHPMichael Peacock
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsMichael Peacock
 
Evolution of a big data project
Evolution of a big data projectEvolution of a big data project
Evolution of a big data projectMichael Peacock
 
Real time voice call integration - Confoo 2012
Real time voice call integration - Confoo 2012Real time voice call integration - Confoo 2012
Real time voice call integration - Confoo 2012Michael Peacock
 
Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012Michael Peacock
 
Data at Scale - Michael Peacock, Cloud Connect 2012
Data at Scale - Michael Peacock, Cloud Connect 2012Data at Scale - Michael Peacock, Cloud Connect 2012
Data at Scale - Michael Peacock, Cloud Connect 2012Michael Peacock
 
PHP Continuous Data Processing
PHP Continuous Data ProcessingPHP Continuous Data Processing
PHP Continuous Data ProcessingMichael Peacock
 
PHP North East Registry Pattern
PHP North East Registry PatternPHP North East Registry Pattern
PHP North East Registry PatternMichael Peacock
 

More from Michael Peacock (20)

Immutable Infrastructure with Packer Ansible and Terraform
Immutable Infrastructure with Packer Ansible and TerraformImmutable Infrastructure with Packer Ansible and Terraform
Immutable Infrastructure with Packer Ansible and Terraform
 
Test driven APIs with Laravel
Test driven APIs with LaravelTest driven APIs with Laravel
Test driven APIs with Laravel
 
Symfony Workflow Component - Introductory Lightning Talk
Symfony Workflow Component - Introductory Lightning TalkSymfony Workflow Component - Introductory Lightning Talk
Symfony Workflow Component - Introductory Lightning Talk
 
Alexa, lets make a skill
Alexa, lets make a skillAlexa, lets make a skill
Alexa, lets make a skill
 
API Development with Laravel
API Development with LaravelAPI Development with Laravel
API Development with Laravel
 
An introduction to Laravel Passport
An introduction to Laravel PassportAn introduction to Laravel Passport
An introduction to Laravel Passport
 
Phinx talk
Phinx talkPhinx talk
Phinx talk
 
Refactoring to symfony components
Refactoring to symfony componentsRefactoring to symfony components
Refactoring to symfony components
 
Dance for the puppet master: G6 Tech Talk
Dance for the puppet master: G6 Tech TalkDance for the puppet master: G6 Tech Talk
Dance for the puppet master: G6 Tech Talk
 
Powerful and flexible templates with Twig
Powerful and flexible templates with Twig Powerful and flexible templates with Twig
Powerful and flexible templates with Twig
 
Introduction to OOP with PHP
Introduction to OOP with PHPIntroduction to OOP with PHP
Introduction to OOP with PHP
 
Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
 
Evolution of a big data project
Evolution of a big data projectEvolution of a big data project
Evolution of a big data project
 
Real time voice call integration - Confoo 2012
Real time voice call integration - Confoo 2012Real time voice call integration - Confoo 2012
Real time voice call integration - Confoo 2012
 
Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012
 
Data at Scale - Michael Peacock, Cloud Connect 2012
Data at Scale - Michael Peacock, Cloud Connect 2012Data at Scale - Michael Peacock, Cloud Connect 2012
Data at Scale - Michael Peacock, Cloud Connect 2012
 
Supermondays twilio
Supermondays twilioSupermondays twilio
Supermondays twilio
 
PHP & Twilio
PHP & TwilioPHP & Twilio
PHP & Twilio
 
PHP Continuous Data Processing
PHP Continuous Data ProcessingPHP Continuous Data Processing
PHP Continuous Data Processing
 
PHP North East Registry Pattern
PHP North East Registry PatternPHP North East Registry Pattern
PHP North East Registry Pattern
 

Recently uploaded

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 

Vagrant

  • 1. Vagrant: virtualise your development environment Michael Peacock August 2012, SuperMondays
  • 2. About Me @michaelpeacock Head Developer @ Ground Six Leading the development team and managing the development process We are a tech investment company: you bring ideas, we partner and build the product Author Occasional Speaker
  • 5. Virtualisation Abstraction layer for your hardware Lets multiple Operating Systems run concurrently, each running on their own virtual hardware
  • 6. Virtualisation Abstraction layer for your hardware Lets multiple Operating Systems run concurrently, each running on their own virtual hardware Limited by your own physical hardware and your host machine
  • 10. VirtualBox www.virtualbox.org Virtualisation software tool Provides the hardware abstraction layer and an interface for running VMs
  • 12. Vagrant www.vagrantup.com “Create and configure lightweight, reproducable, and portable development environments”
  • 13. Vagrant www.vagrantup.com “Create and configure lightweight, reproducable, and portable development environments” Set of command line tools which interacts with and automates VirtualBox
  • 14. Vagrant www.vagrantup.com “Create and configure lightweight, reproducable, and portable development environments” Set of command line tools which interacts with and automates VirtualBox Designed around portability
  • 16. Why?
  • 17. Why? Quick start time for new team members Vagrant up: you have a development environment
  • 18. Why? Quick start time for new team members Vagrant up: you have a development environment Server configuration can be version controlled
  • 19. Why? Quick start time for new team members Vagrant up: you have a development environment Server configuration can be version controlled Cross-platform: work from any machine
  • 20. Why? Quick start time for new team members Vagrant up: you have a development environment Server configuration can be version controlled Cross-platform: work from any machine Work on multiple projects? Easy to pickup an old, legacy project with its funky server configs
  • 21. Why? Quick start time for new team members Vagrant up: you have a development environment Server configuration can be version controlled Cross-platform: work from any machine Work on multiple projects? Easy to pickup an old, legacy project with its funky server configs Can run multiple VMs independently
  • 22. Why? Quick start time for new team members Vagrant up: you have a development environment Server configuration can be version controlled Cross-platform: work from any machine Work on multiple projects? Easy to pickup an old, legacy project with its funky server configs Can run multiple VMs independently Doesn’t mess with your local, host machine
  • 24. Some terms Host: Your physical machine
  • 25. Some terms Host: Your physical machine Guest: The VM
  • 29. Overview 1.Project specific configuration file 2.Import base box 3.Boot up Virtual Machine 1.Forward Ports 2.Share folders
  • 30. Overview 1.Project specific configuration file 2.Import base box 3.Boot up Virtual Machine 1.Forward Ports 2.Share folders 4.Configure / provision software
  • 31. 3 lines: up and running
  • 32. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 33. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 34. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 35. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 36. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 37. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 38. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 39. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 40. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 41. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 42. 3 lines: up and running # download a “base” VM image and give it the name # base for future use vagrant box add base http://files.vagrantup.com/ precise64.box # Initialise a new vagrant project # i.e. create a new vagrant file vagrant init # Boot the VM based off the config file we created vagrant up
  • 44.
  • 45.
  • 46.
  • 47.
  • 48. SSH into the box vagrant ssh
  • 50. Whats happened? Downloaded a base box of Ubuntu, configured for vagrant
  • 51. Whats happened? Downloaded a base box of Ubuntu, configured for vagrant Created a new project Configured to use this base box by default
  • 52. Whats happened? Downloaded a base box of Ubuntu, configured for vagrant Created a new project Configured to use this base box by default Booted the VM: vagrant up
  • 53. Whats happened? Downloaded a base box of Ubuntu, configured for vagrant Created a new project Configured to use this base box by default Booted the VM: vagrant up Connected into the VM: vagrant ssh
  • 55. Managing the VM Suspend vagrant suspend
  • 56. Managing the VM Suspend vagrant suspend Resume vagrant resume
  • 57. Managing the VM Suspend vagrant suspend Resume vagrant resume Shutdown vagrant halt
  • 58. Managing the VM Suspend vagrant suspend Resume vagrant resume Shutdown vagrant halt Turn on vagrant up (re-runs any provisioning tasks)
  • 62.
  • 64. When shit hits the fan vagrant destroy
  • 65.
  • 67. vagrant destroy: a warning The VM is completely wiped
  • 68. vagrant destroy: a warning The VM is completely wiped Anything that can’t be replicated from: Your project folder (shared folder) Vagrant base box Vagrant File Puppet Manifests
  • 69. vagrant destroy: a warning The VM is completely wiped Anything that can’t be replicated from: Your project folder (shared folder) Vagrant base box Vagrant File Puppet Manifests WILL BE LOST FOREVER E.g. Databases (hint: use a DB patching or versioning tool in your project folder)
  • 70. vagrant init Creates a new Vagrantfile, which instructs vagrant what too boot and how to do it. Let’s take a peak.
  • 71. # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant::Config.run do |config| config.vm.box = "base" end
  • 72. Box to use # use the box called base config.vm.box = "base" # Fallback URL, if we don't have a box called base, download from here config.vm.box_url = "http://files.vagrantup.com/precise64.box"
  • 74. Networking Host only VM is only visible to the host machine config.vm.network :hostonly, "192.168.33.10"
  • 75. Networking Host only VM is only visible to the host machine config.vm.network :hostonly, "192.168.33.10" Bridged Network connection to the VM is bridged, letting it appear as a device on the network config.vm.network :bridged
  • 76. Ports
  • 77. Ports Easiest way to use the VM is to forward ports Forwards port X on the host To port Y on the guest
  • 78. Ports Easiest way to use the VM is to forward ports Forwards port X on the host To port Y on the guest config.vm.forward_port 80, 4567
  • 80. Shared Folders Default: Current project (folder containing Vagrantfile) is mapped to /vagrant
  • 81. Shared Folders Default: Current project (folder containing Vagrantfile) is mapped to /vagrant New shared folders: config.vm.share_folder "name", "/guestmount", "../ hostfolder"
  • 82. Provisioning So far: we can build and d
  • 83. Provisioning with Puppet config.vm.provision :puppet do |puppet| puppet.manifests_path = "provision/manifests" puppet.manifest_file = "default.pp" puppet.module_path = "provision/modules" end
  • 85. What can Puppet do Checks conditions:
  • 86. What can Puppet do Checks conditions: Package installed
  • 87. What can Puppet do Checks conditions: Package installed File exists / contains / etc
  • 88. What can Puppet do Checks conditions: Package installed File exists / contains / etc Exec: Run an ad-hock command* * doesn’t sit well with Puppets “checking” nature. Execs get re-run (unless you use special conditions) on vagrant up
  • 89. Package package { "apache2": ensure => present, require => Exec['apt-get update'] }
  • 90. Service service { "apache2": ensure => running, require => Package["apache2"] }
  • 91. File file { '/etc/apache2/sites-available/default': source => '/vagrant/provision/modules/apache/files/default', owner => 'root', group => 'root' }
  • 92. Exec exec { 'apt-get update': command => '/usr/bin/apt-get update', require => Exec['preparenetworking'] }
  • 93. Users & Groups group { "wheel": ! ensure => "present", ! } ! ! exec { "/bin/echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers": ! require => Group["wheel"] ! }
  • 94. Users & Groups user { "developer": ! ! ensure => "present", ! ! gid => "wheel", ! ! shell => "/bin/bash", ! ! home => "/home/developer", ! ! managehome => true, ! ! password => "passwordtest", ! ! require => Group["wheel"] ! }
  • 95. Stringing it together class apache { package { "apache2": ensure => present, require => Exec['apt-get update'] } file { '/var/www/src': ! ensure => 'link', ! target => '/vagrant/src', ! require => Package['apache2'] ! } ! ! file { '/etc/apache2/sites-available/default': ! ! source => '/vagrant/provision/modules/apache/files/default', ! ! owner => 'root', ! ! group => 'root' ! } service { "apache2": ensure => running, require => Package["apache2"] } }
  • 96.
  • 97. Using Puppet Modules import "apache" include apache
  • 98. Explicit ordering stage { 'first': before => Stage[main] } class {'apache': stage => first}
  • 100.
  • 101.
  • 102. Multiple VMs Within the vagrantfile, we can define multiple VMs E.g. need a separate VM for web and db server to mimic production environment? Vagrant::Config.run do |config| config.vm.define :web do |web_config| web_config.vm.box = "web" web_config.vm.forward_port 80, 8080 end config.vm.define :db do |db_config| db_config.vm.box = "db" db_config.vm.forward_port 3306, 3306 end end
  • 104. Plugins Backing up and snapshotting a VM Automated base box creators
  • 105. Exporting Box Always using the same stack / versions on your box? Slow un-reliable Internet connection means puppet takes an age to run? Export the base box with these pre-installed vagrant package
  • 106. Creating your own box Virtualbox configured: Guest additions SSH & key based authentication for the vagrant user Ruby, RubyGems, Puppet and Chef Export the box vagrantup.com/v1/docs/base_boxes.html
  • 107. The Future More than just VirtualBox
  • 109. Caveats Funky permissions Files created on the host shared folder show without permissions on the guest and are inaccessible Solution: upgrade virtualbox guest additions on guest
  • 110. Caveats Funky permissions Files created on the host shared folder show without permissions on the guest and are inaccessible Solution: upgrade virtualbox guest additions on guest Can’t chmod files within shared folder config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777') Thanks @AnthonySterling & @ChrisDKemper
  • 111. Caveats Funky permissions Files created on the host shared folder show without permissions on the guest and are inaccessible Solution: upgrade virtualbox guest additions on guest Can’t chmod files within shared folder config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777') Thanks @AnthonySterling & @ChrisDKemper Waiting for VM to boot Open VirtualBox Cancel, halt the VM and try again
  • 112. Caveats Funky permissions Files created on the host shared folder show without permissions on the guest and are inaccessible Solution: upgrade virtualbox guest additions on guest Can’t chmod files within shared folder config.vm.share_folder("v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777') Thanks @AnthonySterling & @ChrisDKemper Waiting for VM to boot Open VirtualBox Cancel, halt the VM and try again
  • 113. Conclusion Virtualise your development environment Easy to add new team members Easy to work from other machines So long “works on my Machine”

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n