SlideShare ist ein Scribd-Unternehmen logo
1 von 54
Prepared For: Acquia
                                            October 4, 2012


                             Title: Harmonious Development:
Standardizing The Deployment Process via Vagrant and Puppet


         Achieve – Quality on Time

                                                       1
Achieve Internet Overview

   7+ years developing media and entertainment web
    properties


 Over 60,000 development hours developing Drupal web &
    mobile-optimized solutions


   Deep expertise in UX
    (theming), Globalization, Integration, and Performance


 Company commitment to
    quality, transparency, continuity, reliability and client
    experience
Key Clients: Media & Entertainment




             Media
Key Clients: Other




      Other
Pop Quiz

<?php
/**
 * Transform upper camel case to lower camel case.
 *
 * @param string $word
 * Upper camel case word.
 *
 * @return string
 * $word with first letter in lower case.
 *
 * @see http://www.php.net/manual/en/function.lcfirst.php
 */
function my_module_camel_case($word) {
  return lcfirst($word);
}

echo my_module_camel_case('HelloWorld');
Agenda




+        =
Agenda (Cont.)

   What’s all the fuss?

   What is Virtualization?

   Vagrant – Creating (and destroying) environments on the fly

   Provisioning (via Puppet)

   Examples

   Future Directions

   Q&A
What We Are Not Covering

 Performance Tuning
  These are examples only


 Version Control
  All provisioning can be placed into VCS

   Puppet vs. Chef
What’s all the fuss?

“Write once, run anywhere” -- Sun Microsystems



“Write Once, Debug Everywhere” -- Anonymous / Reality



“In many distributed computing environments, failures are
reported in a way that violates even the simplest notions of
consistency.” -- IEEE Software, Bradford Glade. K. Birman
The Good Old Days
Today….
How It Compares




Old Approach

                      Old Approach… Today
The Drupal Ecosystem
Site Building Roles
How It All Fits




     Virtual Box                         Vagrant
(Virtual Environment)           (Virtual Machine Builder)




                                                 VeeWee
                                               (Vagrant Box
                                                 Builder)
       Puppet
     (Provisioner)
Versions

 VirtualBox v4.1.18
 (https://www.virtualbox.org/wiki/Downloads)


 Vagrant v1.0.3 (http://downloads.vagrantup.com/)

 Puppet v2.7.19

 Veewee v0.3.0.beta1 (https://github.com/jedi4ever/veewee)

 Ubuntu v8.04 Hardy Heron
Virtual Box




     Virtual Box
                                          Vagrant
(Virtual Environment)
                                 (Virtual Machine Builder)




                                                   VeeWee
                                                 (Vagrant Box
                                                   Builder)
       Puppet
     (Provisioner)
What is Virtualization?
 Technical Definition….
 A logical representation of a computer in software. By decoupling the
 physical hardware from the operating system, virtualization provides
 more operational flexibility and increases the utilization rate of the
 underlying physical hardware.1

 In a Nutshell….
 Putting a small computer [guest/virtual machine] (operating system,
 memory, video display, peripherals, etc.) into the confines of another
 bigger physical system [host].
VirtualBox


 Open Source virtualization software for
 Windows, Mac, and Linux

 Can host multiple operating systems at
 once (within memory and CPU
 resources)

 Free!
Vagrant




     Virtual Box
                                       Vagrant
(Virtual Environment)
                              (Virtual Machine Builder)




                                                VeeWee
                                              (Vagrant Box
                                                Builder)
       Puppet
     (Provisioner)
Vagrant


 Manages your virtual machines
 Works with VirtualBox
 Extremely customizable
 Over 50+ pre-built base boxes
 Free!
Why Vagrant?

 Creates consistent, reproducible environments
 Rapid setup – Start development in a few quick steps
 Reduce duplicated effort
 Increased reliability
 Allows you to tinker around, more on this later…
 Cost savings!
Agenda - Revisited

 What’s all the fuss?
 What is Virtualization?
 Vagrant – Creating (and destroying)
 environments on the fly.
 Provisioning (via Puppet)
 Examples
 Future Directions
Q&A
Using Vagrant
Objective:
Part 1: Create a Ubuntu 8.04 LTS Virtual Machine (VM)

One Time Steps:
List available boxes:
$ vagrant box list

Add a new Vagrant base box to inventory if not available:
(@see http://www.vagrantbox.es/)
Usage: vagrant box add <alias> <location>
$ vagrant box add hardy /path/to/hardy.box

Create a directory for your Vagrant VMs
$ mkdir <vm_dir>/myproject

Create a Vagrant file (do this in <vm_dir>/myproject)
Usage: vagrant init <alias>
$ vagrant init hardy
Using Vagrant

Let’s Rock!!

Start up a virtual machine:
$ vagrant up

Delete a virtual machine:
$ vagrant remove

Connect to virtual machine:
$ vagrant ssh


Success! Instant VM. Do the happy dance!
Using Vagrant
Other Useful Commands

Go to lunch:
$ vagrant suspend # Save state of virtual machine
$ vagrant resume # Start virtual machine up again

Reboot:
$ vagrant halt       # Shutdown the VM
$ vagrant up –no-provision # Restart VM, skip provisioning*
* = Online documentation says no reprovisioning will occur…

Reload configuration (automatically does a provisioning)
$ vagrant reload

Reprovision a system:
$ vagrant reprovision

Repackage running system:
$ vagrant package
Example 1

$ mkdir <vm_dir>/myproject
$ vagrant init hardy

Customize our VM Instance (Excerpts of Vagrantfile)
config.vm.network :hostonly, "192.168.33.10”

# Host: <vm_dir>/<project_name> == Guest: /vagrant
config.vm.share_folder "v-root", "/vagrant", ".", :owner => 'www-data', :group => 'www-
data’

# Configure the VM with puppet.
config.vm.provision :puppet, :module_path => "modules", :options => ["--
environment", "local"] do |puppet|
 puppet.manifests_path = "manifests”
 puppet.manifest_file = ”myproject.pp”
End

$ vagrant up
Example 1

Scenario: Admin for a Day

Wonder what this does… (WARNING)*

$ sudo chmod 444 /etc/sudoers

* Warning, doing this on a Production system may have an adverse effect on
your career. This will remove any ability to sudo.



Solution (Assuming all configuration is provisioned):
$ vagrant destroy
$ vagrant up
Vagrant++


 Instant development environments!


 No physical hardware required.


 Creates a safe environment for configuration optimization.
Puppet




     Virtual Box
                                      Vagrant
(Virtual Environment)
                             (Virtual Machine Builder)




                                               VeeWee
                                             (Vagrant Box
                                               Builder)
       Puppet
     (Provisioner)
Puppet



   Provisioning = preparing a device/server for usage, aka configuration


   Allows enforceable system configuration


   Similar to Microsoft’s System Center Configuration Manager/SMS or Apple’s Profile
    Manager


   Uses a Resource Abstraction Layer (RAL) to interact with the host.
    Core Resource Types include: notify, file, package, service, exec, cron, user, group


   RAL can be used to read and modify resources


   Configurations can be store in manifests. See resources for prebuilt modules.
Puppet: Miscellaneous Info

Facter: Inspects operating system “facts” that can be used in modules.
$ facter
…
 id => vagrant
interfaces => eth0,eth1,lo
ipaddress => 10.0.2.15
ipaddress_eth0 => 10.0.2.15
ipaddress_eth1 => 192.168.33.10
ipaddress_lo => 127.0.0.1
is_virtual => true
kernel => Linux
kernelmajversion => 2.6
kernelrelease => 2.6.24-26-server
kernelversion => 2.6.24
lsbdistcodename => hardy
lsbdistdescription => Ubuntu 8.04.4 LTS
lsbdistid => Ubuntu
lsbdistrelease => 8.04
lsbmajdistrelease => 8
memoryfree => 1.85 GB
memorysize => 1.98 GB
memorytotal => 1.98 GB
netmask => 255.255.255.0
netmask_lo => 255.0.0.0
network_eth0 => 10.0.2.0
network_eth1 => 192.168.33.0
network_lo => 127.0.0.0
operatingsystem => Ubuntu
operatingsystemrelease => 8.04
…
Puppet: Miscellaneous Info (Cont.)

Describes a resource, use -s to summarize
$ puppet describe <resource>

Inspect individual resource in “Puppet-speak”
$ puppet resource service apache2
service { 'apache2':
  ensure => 'stopped',
  enable => 'true',
}

Test a manifest on the local system
$ puppet apply --modulepath=<module_path> <manifest>.pp
Agenda - Revisited

 What’s all the fuss?
 What is Virtualization?
 Vagrant – Creating (and destroying)
 environments on the fly.
 Provisioning (via Puppet)
 Examples
 Future Directions
Q&A
Puppet: Important Notes


Common Pattern:
Package, File, Service


Resources are processed asynchronously! Use dependency
relationships (require/before) if any ordering is necessary.


@see http://forge.puppetlabs.com/ for prebuilt Puppet
modules.
Puppet Main Manifest
myproject.pp
class myproject {
                                     Site specific          ensure => 'absent';
 $site = ’myproject'                                       $site:
                                                            ensure => 'present';             Site/DB
 # Vagrant specific setup, set up hostname, hosts file    }
 class { 'vagrant':                                       apache::mod {
   site => $site,                                           'rewrite': ensure => 'present'
 }                                                        }

 # Cool stuff                                             mysql::schema { $site:
 class { 'vim': }                                           user => $site,
                                                            password => $site,
 # LAMP stack                                             }
 class { 'linux': }
 class { 'apache': }                 Base LAMP            class { 'drupal::prepare':
 class { 'mysql': }                                          site => $site,
 class { 'php':                                              admin_pw => 'admin',
   error_reporting => 'E_ALL & ~(E_WARNING|E_NOTICE)',     }
 }                                                       }
 class { 'phpmyadmin': }
                                                         class { 'myproject': }
 # Drupal
 class { 'drupal':
   server_type => 'dev',
 }

 # Solr
 class { 'tomcat': }
 class { 'solr': }                   Search
 # Site specific stuff
 apache::site {
  'default':
    vhost => 'default',
Example 2: Puppet Module
/modules/apache/init.pp (Header)
# Class: apache                                                              # vhost => 'default',
#                                                                            # ensure => 'absent';
# This module installs apache and sets up the virtual.
#
                                                                             # '<site_name_1>':
                                                                             # ensure => 'present';             Advanced usage
# Mike Lee <michael.lee@achieveinternet.com>                                 # '<site_name_2>':
# 2012-09-07
#
                                                                             # docroot => '/custom/path',
                                                                             # ensure => 'present';
                                                                                                                Enable host/mod
# Tested platforms:                                                          #}
# - Ubuntu 8.04 Hardy Heron                                                  #
#                                                                            # Enable/disable modules.
# Parameters:                                                                # apache::mod {
# N/A                                                                        # 'rewrite': ensure => 'present’
#                                                                            #}
# Actions:
# Installs and configures apache. Will automatically create the site file.
#
# Requires:
# N/A
#
# Sample Usage:
#
# Make sure apache is present.
# class { 'apache': }
#                                            Base usage
# Enable/disable sites.
# <site_name> = Simple site name. The vagrant domain will be added
automatically.
# i.e. <site_name> = "example" creates a site named "example.vagrant".
# <docroot> = Docroot. Defaults to /vagrant/<site_name>/docroot.
# If this is overridden, this must be the ABSOLUTE path to the docroot.
#
# apache::site {
# 'default':
Puppet Sample Module
/modules/apache/init.pp (Code)
class apache {                                                             case $ensure {
 $apache2_sites = '/etc/apache2/sites'                                        present: {
 $apache2_mods = '/etc/apache2/mods'                                           file { "/etc/apache2/sites-available/$site_name":
                                                                                 ensure => file,
 # OS Specific settings
 case $::operatingsystem {                  OS Specific                          require => Package[$apache::package_name],
                                                                                 content => template("apache/${apache::conf_template}"),
   ubuntu: {                                                                   }
     $package_name = 'apache2'
     $conf_template = 'site.conf.debian.erb'                                    exec { "/usr/sbin/a2ensite $site_name":
   }                                                                              unless => "/bin/readlink -e ${apache2_sites}-enabled/$site_name",
   default: {                                                                     notify => Exec['force-reload-apache'],
     notify { "${module_name}_unsupported":                                       require => Package[$apache::package_name],
       message => "The ${module_name} module is not supported on                }
${::operatingsystem}.",                                                         }
     }                                                                          absent: {
     error("OS support for ${::operatingsystem} needs to be configured")          exec { "/usr/sbin/a2dissite $site_name":
   }                                                                                #onlyif => "/bin/readlink -e ${apache2_sites}-enabled/$site_name", #
 }                                                                         readlink not returning 0

 # Define new type: site
                                    Define type: site                               notify => Exec['force-reload-apache'],
                                                                                    require => Package[$apache::package_name],
 define site ($ensure = 'present', $vhost = undef, $docroot = undef) {            }
  if $vhost {                                                                   }
    $site_name = $vhost                                                         default: {
  }                                                                               err("Unknown ensure value: '$ensure'")
  else {                                                                        }
    $site_name = "${title}.vagrant"                                           }
  }                                                                         }

  if $docroot {
    $path = $docroot
  }
  else {
    $path = "/vagrant/${title}/docroot"
  }
Puppet Sample Module
/modules/apache/init.pp (Code)
 # Define new type: mod
 define mod ($ensure = 'present') {                                                   service { $package_name:
   case $ensure {
     present: {
                                                                                        ensure => running,
                                                                                        hasstatus => true,
                                                                                                                       Package/Service
       exec { "/usr/sbin/a2enmod $title":                                               hasrestart => true,
         unless => "/bin/readlink -e ${apache2_mods}-enabled/${title}.load",            require => Package[$package_name],
         notify => Exec['force-reload-apache'],                                       }
         require => Package[$apache::package_name],                               }
       }
     }
     absent: {
                               Define type: mod
       exec { "/usr/sbin/a2dismod $title":
         #onlyif => "/bin/readlink -e ${apache2_mods}-enabled/${title}.load", #
readlink not returning 0
         notify => Exec['force-reload-apache'],
         require => Package[$apache::package_name],
       }
     }
     default: {
       err("Unknown ensure value: '$ensure'")
     }
   }
 }

 # Force reload all the time, doesn't take that much more in resources.
 exec { 'force-reload-apache':
   command => '/etc/init.d/apache2 force-reload',
   refreshonly => true,
 }

 package { $package_name:
   ensure => installed,
 }
Puppet Sample Module
ERB Templates: Create files on the fly.
/modules/apache/templates/site.conf.debian.erb

# Puppet generated file. DO NOT EDIT!
# Managed by Class['apache']

<VirtualHost *:80>
 ServerAdmin webmaster@achieveinternet.com

 DocumentRoot <%= path %>
 ServerName <%= site_name %>

 <Directory <%= path %>>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
 </Directory>
</VirtualHost>
Puppet++

 Construct fully functioning development environments on
 the fly!


 Bring new team members up to speed in a few simple
 commands.


 CONSISTENCY! CONSISTENCY! CONSISTENCY!
 Everyone is working with the same virtual machine.
Agenda - Revisited

 What’s all the fuss?
 What is Virtualization?
 Vagrant – Creating (and destroying)
 environments on the fly.
 Provisioning (via Puppet)
 Examples
 Future Directions
Q&A
Veewee




     Virtual Box
                                      Vagrant
(Virtual Environment)
                             (Virtual Machine Builder)




                                               VeeWee
                                             (Vagrant Box
                                               Builder)
       Puppet
     (Provisioner)
Next Steps: Veewee

Want your own custom Vagrant Box or one doesn’t exist?

Veewee has predefined definitions for creating a variety of Vagrant base boxes.

Installation Requirements (Mac OS X)
- Install RVM (Ruby Version Manager)
   $ curl -L https://get.rvm.io | bash -s stable

-   Install Xcode, Command Line Tools for Xcode (required by Homebrew)

-   Install Homebrew
    $ ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go)

-   Install apple-gcc42 GCC Required!
      $ brew update
     $ brew tap homebrew/dupes
     $ brew install autoconf automake apple-gcc42
     $ rvm pkg install openssl
Next Steps: Veewee

Veewee Installation (Mac OS X)

$ rvm install 1.9.2
$ git clone https://github.com/jedi4ever/veewee.git
$ cd veewee

(official – Never worked for me…)
$ gem install bundler
$ bundle install

(unoffical)
$ gem build veewee.gemspec
$ gem install veewee-*.gem (run as sudo)
$ unalias veewee
Next Steps: Veewee
Veewee Base Box Creation (Mac OS X)

In veewee directory:
- Copy new iso into [currentDir]/iso   (optional, saves veewee from finding)

Create VM definition off of template:
Usage: veewee vbox define <box_name> <template>
$ veewee vbox define hardy ubuntu-8.04.4-server-i386

Customize VM Definition:
- Edit <veewee_dir>/definitions/<box_name>/definition.rb

Build virtual box (This should start VirtualBox)
Usage: veewee build <box_name>
$ veewee vbox build hardy # go get a coffee

Usage: veewee vbox validate <box_name>
$ veewee vbox validate hardy

Build Vagrant base box:
Usage: vagrant basebox export <box_name>
$ vagrant basebox export hardy
Next Steps: Puppet Enterprise


 Allow for remote management of puppet nodes.

  “One server to rule them all.”

 Clone your configurations to EC2.

 Audit your configurations.
Gotchas

 Be mindful of Puppets asyncronous execution order:
  Make sure dependecies are properly set.
 Starbucks syndrome:
  Switching networks can sometimes cause your VM’s networking to
   get confused. Halt and restart to correct.

 Provision everything… or as much as you can:
  This will make resetting your environment go much more smoothly.
Versions

 VirtualBox v4.1.18
 (https://www.virtualbox.org/wiki/Downloads)


 Vagrant v1.0.3 (http://downloads.vagrantup.com/)

 Puppet v2.7.19

 Veewee v0.3.0.beta1 (https://github.com/jedi4ever/veewee)

 Ubuntu v8.04 Hardy Heron
Further Resources


 Prebulit Vagrant Base Boxes (http://www.vagrantbox.es/)


 Puppet Forge (http://forge.puppetlabs.com/)


 Learn Puppet (http://docs.puppetlabs.com/learning/ral.html)
Conclusion
   …makes the "works on my machine" excuse a relic of the past. -- Vagrant


   Created a disposable test bed to play with configuration changes


   Created reusable modules to easily build customized setups


   Provided canned environment for those who simply want to jump into a project. Allows
    team members to focus on core competencies.


   Allows you to quickly and efficiently archive projects and come back to them later

                        CONSISTENCY - REDUCED ERRORS
                                EASY & INEXPENSIVE
                       INSTANT DEVELOPMENT              - SAVE $$$
Achieve Internet Pillars of Expertise

                  Technical Foundation Built On the
                  Following Core Areas of Expertise
                  and Knowledge:


                  1. User Experience (UX) / Theming


                  2. Globalization/Localization


                  3. Performance & Deployment


                  4. Integration
QA
Thank You
        Michael Lee
       Senior Architect
michael.lee@achieveinternet.com
    www.achieveinternet.com
           mlee11111
         @ach_mikelee
   /pub/michael-lee/4/297/a6b
      Direct: 858-453-5760

Weitere ähnliche Inhalte

Was ist angesagt?

Software Defined Datacenter
Software Defined DatacenterSoftware Defined Datacenter
Software Defined DatacenterNETWAYS
 
Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012Carlos Sanchez
 
Installaling Puppet Master and Agent
Installaling Puppet Master and AgentInstallaling Puppet Master and Agent
Installaling Puppet Master and AgentRanjit Avasarala
 
Using Containers for Continuous Integration and Continuous Delivery
Using Containers for Continuous Integration and Continuous DeliveryUsing Containers for Continuous Integration and Continuous Delivery
Using Containers for Continuous Integration and Continuous DeliveryCarlos Sanchez
 
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...Carlos Sanchez
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierCarlos Sanchez
 
Preparation study of_docker - (MOSG)
Preparation study of_docker  - (MOSG)Preparation study of_docker  - (MOSG)
Preparation study of_docker - (MOSG)Soshi Nemoto
 
Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))Michele Orselli
 
Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)Michele Orselli
 
Streamline your development environment with docker
Streamline your development environment with dockerStreamline your development environment with docker
Streamline your development environment with dockerGiacomo Bagnoli
 
Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerMarcus Lönnberg
 
How to Develop Puppet Modules: From Source to the Forge With Zero Clicks
How to Develop Puppet Modules: From Source to the Forge With Zero ClicksHow to Develop Puppet Modules: From Source to the Forge With Zero Clicks
How to Develop Puppet Modules: From Source to the Forge With Zero ClicksCarlos Sanchez
 
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2daysUsing Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2daysCarlos Sanchez
 
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
 

Was ist angesagt? (18)

Software Defined Datacenter
Software Defined DatacenterSoftware Defined Datacenter
Software Defined Datacenter
 
Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012
 
Installaling Puppet Master and Agent
Installaling Puppet Master and AgentInstallaling Puppet Master and Agent
Installaling Puppet Master and Agent
 
A Hands-on Introduction to Docker
A Hands-on Introduction to DockerA Hands-on Introduction to Docker
A Hands-on Introduction to Docker
 
Using Containers for Continuous Integration and Continuous Delivery
Using Containers for Continuous Integration and Continuous DeliveryUsing Containers for Continuous Integration and Continuous Delivery
Using Containers for Continuous Integration and Continuous Delivery
 
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
Using Containers for Continuous Integration and Continuous Delivery. KubeCon ...
 
Docker by Example - Basics
Docker by Example - Basics Docker by Example - Basics
Docker by Example - Basics
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
 
Preparation study of_docker - (MOSG)
Preparation study of_docker  - (MOSG)Preparation study of_docker  - (MOSG)
Preparation study of_docker - (MOSG)
 
Docker by Example - Quiz
Docker by Example - QuizDocker by Example - Quiz
Docker by Example - Quiz
 
Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))
 
Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)
 
Streamline your development environment with docker
Streamline your development environment with dockerStreamline your development environment with docker
Streamline your development environment with docker
 
Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with Docker
 
ABCs of docker
ABCs of dockerABCs of docker
ABCs of docker
 
How to Develop Puppet Modules: From Source to the Forge With Zero Clicks
How to Develop Puppet Modules: From Source to the Forge With Zero ClicksHow to Develop Puppet Modules: From Source to the Forge With Zero Clicks
How to Develop Puppet Modules: From Source to the Forge With Zero Clicks
 
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2daysUsing Kubernetes for Continuous Integration and Continuous Delivery. Java2days
Using Kubernetes for Continuous Integration and Continuous Delivery. Java2days
 
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
 

Ähnlich wie Harmonious Development: Standardizing The Deployment Process via Vagrant and Puppet

Harmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetHarmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetAchieve Internet
 
Puppet and Vagrant in development
Puppet and Vagrant in developmentPuppet and Vagrant in development
Puppet and Vagrant in developmentAdam Culp
 
Vagrant - Version control your dev environment
Vagrant - Version control your dev environmentVagrant - Version control your dev environment
Vagrant - Version control your dev environmentbocribbz
 
Devoxx UK 2013: Sandboxing with the Vagrant-Binding API
Devoxx UK 2013: Sandboxing with the Vagrant-Binding APIDevoxx UK 2013: Sandboxing with the Vagrant-Binding API
Devoxx UK 2013: Sandboxing with the Vagrant-Binding APIHendrik Ebbers
 
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
 
Vagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundVagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundHendrik Ebbers
 
Virtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitVirtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitAndreas Heim
 
Agile Brown Bag - Vagrant & Docker: Introduction
Agile Brown Bag - Vagrant & Docker: IntroductionAgile Brown Bag - Vagrant & Docker: Introduction
Agile Brown Bag - Vagrant & Docker: IntroductionAgile Partner S.A.
 
Lightweight and reproducible environments with vagrant and Puppet
Lightweight and reproducible environments with vagrant and PuppetLightweight and reproducible environments with vagrant and Puppet
Lightweight and reproducible environments with vagrant and PuppetHendrik Ebbers
 
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
 
DevOps: Using Vagrant to Enhance Your Day to Day Development
DevOps: Using Vagrant to Enhance Your Day to Day DevelopmentDevOps: Using Vagrant to Enhance Your Day to Day Development
DevOps: Using Vagrant to Enhance Your Day to Day DevelopmentRob Reynolds
 
Development with Vagrant
Development with VagrantDevelopment with Vagrant
Development with VagrantJohn Coggeshall
 
Virtualization with Vagrant (ua.pycon 2011)
Virtualization with Vagrant (ua.pycon 2011)Virtualization with Vagrant (ua.pycon 2011)
Virtualization with Vagrant (ua.pycon 2011)Dmitry Guyvoronsky
 
Vagrant: Your Personal Cloud
Vagrant: Your Personal CloudVagrant: Your Personal Cloud
Vagrant: Your Personal CloudJames Wickett
 

Ähnlich wie Harmonious Development: Standardizing The Deployment Process via Vagrant and Puppet (20)

Harmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and PuppetHarmonious Development: Via Vagrant and Puppet
Harmonious Development: Via Vagrant and Puppet
 
Puppet and Vagrant in development
Puppet and Vagrant in developmentPuppet and Vagrant in development
Puppet and Vagrant in development
 
Vagrant - Version control your dev environment
Vagrant - Version control your dev environmentVagrant - Version control your dev environment
Vagrant - Version control your dev environment
 
Devoxx UK 2013: Sandboxing with the Vagrant-Binding API
Devoxx UK 2013: Sandboxing with the Vagrant-Binding APIDevoxx UK 2013: Sandboxing with the Vagrant-Binding API
Devoxx UK 2013: Sandboxing with the Vagrant-Binding API
 
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-Binding JUG Dortmund
Vagrant-Binding JUG DortmundVagrant-Binding JUG Dortmund
Vagrant-Binding JUG Dortmund
 
Tech Talk - Vagrant
Tech Talk - VagrantTech Talk - Vagrant
Tech Talk - Vagrant
 
Vagrant For DevOps
Vagrant For DevOpsVagrant For DevOps
Vagrant For DevOps
 
Virtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitVirtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profit
 
Agile Brown Bag - Vagrant & Docker: Introduction
Agile Brown Bag - Vagrant & Docker: IntroductionAgile Brown Bag - Vagrant & Docker: Introduction
Agile Brown Bag - Vagrant & Docker: Introduction
 
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
 
Intro to vagrant
Intro to vagrantIntro to vagrant
Intro to vagrant
 
Lightweight and reproducible environments with vagrant and Puppet
Lightweight and reproducible environments with vagrant and PuppetLightweight and reproducible environments with vagrant and Puppet
Lightweight and reproducible environments with vagrant and Puppet
 
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
 
DevOps: Using Vagrant to Enhance Your Day to Day Development
DevOps: Using Vagrant to Enhance Your Day to Day DevelopmentDevOps: Using Vagrant to Enhance Your Day to Day Development
DevOps: Using Vagrant to Enhance Your Day to Day Development
 
Development with Vagrant
Development with VagrantDevelopment with Vagrant
Development with Vagrant
 
Vagrant and chef
Vagrant and chefVagrant and chef
Vagrant and chef
 
Virtualization with Vagrant (ua.pycon 2011)
Virtualization with Vagrant (ua.pycon 2011)Virtualization with Vagrant (ua.pycon 2011)
Virtualization with Vagrant (ua.pycon 2011)
 
Vagrant: Your Personal Cloud
Vagrant: Your Personal CloudVagrant: Your Personal Cloud
Vagrant: Your Personal Cloud
 

Mehr von Acquia

Acquia_Adcetera Webinar_Marketing Automation.pdf
Acquia_Adcetera Webinar_Marketing Automation.pdfAcquia_Adcetera Webinar_Marketing Automation.pdf
Acquia_Adcetera Webinar_Marketing Automation.pdfAcquia
 
Acquia Webinar Deck - 9_13 .pdf
Acquia Webinar Deck - 9_13 .pdfAcquia Webinar Deck - 9_13 .pdf
Acquia Webinar Deck - 9_13 .pdfAcquia
 
Taking Your Multi-Site Management at Scale to the Next Level
Taking Your Multi-Site Management at Scale to the Next LevelTaking Your Multi-Site Management at Scale to the Next Level
Taking Your Multi-Site Management at Scale to the Next LevelAcquia
 
CDP for Retail Webinar with Appnovation - Q2 2022.pdf
CDP for Retail Webinar with Appnovation - Q2 2022.pdfCDP for Retail Webinar with Appnovation - Q2 2022.pdf
CDP for Retail Webinar with Appnovation - Q2 2022.pdfAcquia
 
May Partner Bootcamp 2022
May Partner Bootcamp 2022May Partner Bootcamp 2022
May Partner Bootcamp 2022Acquia
 
April Partner Bootcamp 2022
April Partner Bootcamp 2022April Partner Bootcamp 2022
April Partner Bootcamp 2022Acquia
 
How to Unify Brand Experience: A Hootsuite Story
How to Unify Brand Experience: A Hootsuite Story How to Unify Brand Experience: A Hootsuite Story
How to Unify Brand Experience: A Hootsuite Story Acquia
 
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CX
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CXUsing Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CX
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CXAcquia
 
Improve Code Quality and Time to Market: 100% Cloud-Based Development Workflow
Improve Code Quality and Time to Market: 100% Cloud-Based Development WorkflowImprove Code Quality and Time to Market: 100% Cloud-Based Development Workflow
Improve Code Quality and Time to Market: 100% Cloud-Based Development WorkflowAcquia
 
September Partner Bootcamp
September Partner BootcampSeptember Partner Bootcamp
September Partner BootcampAcquia
 
August partner bootcamp
August partner bootcampAugust partner bootcamp
August partner bootcampAcquia
 
July 2021 Partner Bootcamp
July  2021 Partner BootcampJuly  2021 Partner Bootcamp
July 2021 Partner BootcampAcquia
 
May Partner Bootcamp
May Partner BootcampMay Partner Bootcamp
May Partner BootcampAcquia
 
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASY
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASYDRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASY
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASYAcquia
 
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead Machine
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead MachineWork While You Sleep: The CMO’s Guide to a 24/7/365 Lead Machine
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead MachineAcquia
 
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B Leads
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B LeadsAcquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B Leads
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B LeadsAcquia
 
April partner bootcamp deck cookieless future
April partner bootcamp deck  cookieless futureApril partner bootcamp deck  cookieless future
April partner bootcamp deck cookieless futureAcquia
 
How to enhance cx through personalised, automated solutions
How to enhance cx through personalised, automated solutionsHow to enhance cx through personalised, automated solutions
How to enhance cx through personalised, automated solutionsAcquia
 
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...Acquia
 
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021Acquia
 

Mehr von Acquia (20)

Acquia_Adcetera Webinar_Marketing Automation.pdf
Acquia_Adcetera Webinar_Marketing Automation.pdfAcquia_Adcetera Webinar_Marketing Automation.pdf
Acquia_Adcetera Webinar_Marketing Automation.pdf
 
Acquia Webinar Deck - 9_13 .pdf
Acquia Webinar Deck - 9_13 .pdfAcquia Webinar Deck - 9_13 .pdf
Acquia Webinar Deck - 9_13 .pdf
 
Taking Your Multi-Site Management at Scale to the Next Level
Taking Your Multi-Site Management at Scale to the Next LevelTaking Your Multi-Site Management at Scale to the Next Level
Taking Your Multi-Site Management at Scale to the Next Level
 
CDP for Retail Webinar with Appnovation - Q2 2022.pdf
CDP for Retail Webinar with Appnovation - Q2 2022.pdfCDP for Retail Webinar with Appnovation - Q2 2022.pdf
CDP for Retail Webinar with Appnovation - Q2 2022.pdf
 
May Partner Bootcamp 2022
May Partner Bootcamp 2022May Partner Bootcamp 2022
May Partner Bootcamp 2022
 
April Partner Bootcamp 2022
April Partner Bootcamp 2022April Partner Bootcamp 2022
April Partner Bootcamp 2022
 
How to Unify Brand Experience: A Hootsuite Story
How to Unify Brand Experience: A Hootsuite Story How to Unify Brand Experience: A Hootsuite Story
How to Unify Brand Experience: A Hootsuite Story
 
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CX
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CXUsing Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CX
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CX
 
Improve Code Quality and Time to Market: 100% Cloud-Based Development Workflow
Improve Code Quality and Time to Market: 100% Cloud-Based Development WorkflowImprove Code Quality and Time to Market: 100% Cloud-Based Development Workflow
Improve Code Quality and Time to Market: 100% Cloud-Based Development Workflow
 
September Partner Bootcamp
September Partner BootcampSeptember Partner Bootcamp
September Partner Bootcamp
 
August partner bootcamp
August partner bootcampAugust partner bootcamp
August partner bootcamp
 
July 2021 Partner Bootcamp
July  2021 Partner BootcampJuly  2021 Partner Bootcamp
July 2021 Partner Bootcamp
 
May Partner Bootcamp
May Partner BootcampMay Partner Bootcamp
May Partner Bootcamp
 
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASY
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASYDRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASY
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASY
 
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead Machine
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead MachineWork While You Sleep: The CMO’s Guide to a 24/7/365 Lead Machine
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead Machine
 
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B Leads
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B LeadsAcquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B Leads
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B Leads
 
April partner bootcamp deck cookieless future
April partner bootcamp deck  cookieless futureApril partner bootcamp deck  cookieless future
April partner bootcamp deck cookieless future
 
How to enhance cx through personalised, automated solutions
How to enhance cx through personalised, automated solutionsHow to enhance cx through personalised, automated solutions
How to enhance cx through personalised, automated solutions
 
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...
 
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021
 

Harmonious Development: Standardizing The Deployment Process via Vagrant and Puppet

  • 1. Prepared For: Acquia October 4, 2012 Title: Harmonious Development: Standardizing The Deployment Process via Vagrant and Puppet Achieve – Quality on Time 1
  • 2. Achieve Internet Overview  7+ years developing media and entertainment web properties  Over 60,000 development hours developing Drupal web & mobile-optimized solutions  Deep expertise in UX (theming), Globalization, Integration, and Performance  Company commitment to quality, transparency, continuity, reliability and client experience
  • 3. Key Clients: Media & Entertainment Media
  • 5. Pop Quiz <?php /** * Transform upper camel case to lower camel case. * * @param string $word * Upper camel case word. * * @return string * $word with first letter in lower case. * * @see http://www.php.net/manual/en/function.lcfirst.php */ function my_module_camel_case($word) { return lcfirst($word); } echo my_module_camel_case('HelloWorld');
  • 7. Agenda (Cont.)  What’s all the fuss?  What is Virtualization?  Vagrant – Creating (and destroying) environments on the fly  Provisioning (via Puppet)  Examples  Future Directions  Q&A
  • 8. What We Are Not Covering  Performance Tuning  These are examples only  Version Control  All provisioning can be placed into VCS  Puppet vs. Chef
  • 9. What’s all the fuss? “Write once, run anywhere” -- Sun Microsystems “Write Once, Debug Everywhere” -- Anonymous / Reality “In many distributed computing environments, failures are reported in a way that violates even the simplest notions of consistency.” -- IEEE Software, Bradford Glade. K. Birman
  • 10. The Good Old Days
  • 12. How It Compares Old Approach Old Approach… Today
  • 15. How It All Fits Virtual Box Vagrant (Virtual Environment) (Virtual Machine Builder) VeeWee (Vagrant Box Builder) Puppet (Provisioner)
  • 16. Versions  VirtualBox v4.1.18 (https://www.virtualbox.org/wiki/Downloads)  Vagrant v1.0.3 (http://downloads.vagrantup.com/)  Puppet v2.7.19  Veewee v0.3.0.beta1 (https://github.com/jedi4ever/veewee)  Ubuntu v8.04 Hardy Heron
  • 17. Virtual Box Virtual Box Vagrant (Virtual Environment) (Virtual Machine Builder) VeeWee (Vagrant Box Builder) Puppet (Provisioner)
  • 18. What is Virtualization?  Technical Definition….  A logical representation of a computer in software. By decoupling the physical hardware from the operating system, virtualization provides more operational flexibility and increases the utilization rate of the underlying physical hardware.1  In a Nutshell….  Putting a small computer [guest/virtual machine] (operating system, memory, video display, peripherals, etc.) into the confines of another bigger physical system [host].
  • 19. VirtualBox  Open Source virtualization software for Windows, Mac, and Linux  Can host multiple operating systems at once (within memory and CPU resources)  Free!
  • 20. Vagrant Virtual Box Vagrant (Virtual Environment) (Virtual Machine Builder) VeeWee (Vagrant Box Builder) Puppet (Provisioner)
  • 21. Vagrant  Manages your virtual machines  Works with VirtualBox  Extremely customizable  Over 50+ pre-built base boxes  Free!
  • 22. Why Vagrant?  Creates consistent, reproducible environments  Rapid setup – Start development in a few quick steps  Reduce duplicated effort  Increased reliability  Allows you to tinker around, more on this later…  Cost savings!
  • 23. Agenda - Revisited  What’s all the fuss?  What is Virtualization?  Vagrant – Creating (and destroying) environments on the fly.  Provisioning (via Puppet)  Examples  Future Directions Q&A
  • 24. Using Vagrant Objective: Part 1: Create a Ubuntu 8.04 LTS Virtual Machine (VM) One Time Steps: List available boxes: $ vagrant box list Add a new Vagrant base box to inventory if not available: (@see http://www.vagrantbox.es/) Usage: vagrant box add <alias> <location> $ vagrant box add hardy /path/to/hardy.box Create a directory for your Vagrant VMs $ mkdir <vm_dir>/myproject Create a Vagrant file (do this in <vm_dir>/myproject) Usage: vagrant init <alias> $ vagrant init hardy
  • 25. Using Vagrant Let’s Rock!! Start up a virtual machine: $ vagrant up Delete a virtual machine: $ vagrant remove Connect to virtual machine: $ vagrant ssh Success! Instant VM. Do the happy dance!
  • 26. Using Vagrant Other Useful Commands Go to lunch: $ vagrant suspend # Save state of virtual machine $ vagrant resume # Start virtual machine up again Reboot: $ vagrant halt # Shutdown the VM $ vagrant up –no-provision # Restart VM, skip provisioning* * = Online documentation says no reprovisioning will occur… Reload configuration (automatically does a provisioning) $ vagrant reload Reprovision a system: $ vagrant reprovision Repackage running system: $ vagrant package
  • 27. Example 1 $ mkdir <vm_dir>/myproject $ vagrant init hardy Customize our VM Instance (Excerpts of Vagrantfile) config.vm.network :hostonly, "192.168.33.10” # Host: <vm_dir>/<project_name> == Guest: /vagrant config.vm.share_folder "v-root", "/vagrant", ".", :owner => 'www-data', :group => 'www- data’ # Configure the VM with puppet. config.vm.provision :puppet, :module_path => "modules", :options => ["-- environment", "local"] do |puppet| puppet.manifests_path = "manifests” puppet.manifest_file = ”myproject.pp” End $ vagrant up
  • 28. Example 1 Scenario: Admin for a Day Wonder what this does… (WARNING)* $ sudo chmod 444 /etc/sudoers * Warning, doing this on a Production system may have an adverse effect on your career. This will remove any ability to sudo. Solution (Assuming all configuration is provisioned): $ vagrant destroy $ vagrant up
  • 29. Vagrant++  Instant development environments!  No physical hardware required.  Creates a safe environment for configuration optimization.
  • 30. Puppet Virtual Box Vagrant (Virtual Environment) (Virtual Machine Builder) VeeWee (Vagrant Box Builder) Puppet (Provisioner)
  • 31. Puppet  Provisioning = preparing a device/server for usage, aka configuration  Allows enforceable system configuration  Similar to Microsoft’s System Center Configuration Manager/SMS or Apple’s Profile Manager  Uses a Resource Abstraction Layer (RAL) to interact with the host. Core Resource Types include: notify, file, package, service, exec, cron, user, group  RAL can be used to read and modify resources  Configurations can be store in manifests. See resources for prebuilt modules.
  • 32. Puppet: Miscellaneous Info Facter: Inspects operating system “facts” that can be used in modules. $ facter … id => vagrant interfaces => eth0,eth1,lo ipaddress => 10.0.2.15 ipaddress_eth0 => 10.0.2.15 ipaddress_eth1 => 192.168.33.10 ipaddress_lo => 127.0.0.1 is_virtual => true kernel => Linux kernelmajversion => 2.6 kernelrelease => 2.6.24-26-server kernelversion => 2.6.24 lsbdistcodename => hardy lsbdistdescription => Ubuntu 8.04.4 LTS lsbdistid => Ubuntu lsbdistrelease => 8.04 lsbmajdistrelease => 8 memoryfree => 1.85 GB memorysize => 1.98 GB memorytotal => 1.98 GB netmask => 255.255.255.0 netmask_lo => 255.0.0.0 network_eth0 => 10.0.2.0 network_eth1 => 192.168.33.0 network_lo => 127.0.0.0 operatingsystem => Ubuntu operatingsystemrelease => 8.04 …
  • 33. Puppet: Miscellaneous Info (Cont.) Describes a resource, use -s to summarize $ puppet describe <resource> Inspect individual resource in “Puppet-speak” $ puppet resource service apache2 service { 'apache2': ensure => 'stopped', enable => 'true', } Test a manifest on the local system $ puppet apply --modulepath=<module_path> <manifest>.pp
  • 34. Agenda - Revisited  What’s all the fuss?  What is Virtualization?  Vagrant – Creating (and destroying) environments on the fly.  Provisioning (via Puppet)  Examples  Future Directions Q&A
  • 35. Puppet: Important Notes Common Pattern: Package, File, Service Resources are processed asynchronously! Use dependency relationships (require/before) if any ordering is necessary. @see http://forge.puppetlabs.com/ for prebuilt Puppet modules.
  • 36. Puppet Main Manifest myproject.pp class myproject { Site specific ensure => 'absent'; $site = ’myproject' $site: ensure => 'present'; Site/DB # Vagrant specific setup, set up hostname, hosts file } class { 'vagrant': apache::mod { site => $site, 'rewrite': ensure => 'present' } } # Cool stuff mysql::schema { $site: class { 'vim': } user => $site, password => $site, # LAMP stack } class { 'linux': } class { 'apache': } Base LAMP class { 'drupal::prepare': class { 'mysql': } site => $site, class { 'php': admin_pw => 'admin', error_reporting => 'E_ALL & ~(E_WARNING|E_NOTICE)', } } } class { 'phpmyadmin': } class { 'myproject': } # Drupal class { 'drupal': server_type => 'dev', } # Solr class { 'tomcat': } class { 'solr': } Search # Site specific stuff apache::site { 'default': vhost => 'default',
  • 37. Example 2: Puppet Module /modules/apache/init.pp (Header) # Class: apache # vhost => 'default', # # ensure => 'absent'; # This module installs apache and sets up the virtual. # # '<site_name_1>': # ensure => 'present'; Advanced usage # Mike Lee <michael.lee@achieveinternet.com> # '<site_name_2>': # 2012-09-07 # # docroot => '/custom/path', # ensure => 'present'; Enable host/mod # Tested platforms: #} # - Ubuntu 8.04 Hardy Heron # # # Enable/disable modules. # Parameters: # apache::mod { # N/A # 'rewrite': ensure => 'present’ # #} # Actions: # Installs and configures apache. Will automatically create the site file. # # Requires: # N/A # # Sample Usage: # # Make sure apache is present. # class { 'apache': } # Base usage # Enable/disable sites. # <site_name> = Simple site name. The vagrant domain will be added automatically. # i.e. <site_name> = "example" creates a site named "example.vagrant". # <docroot> = Docroot. Defaults to /vagrant/<site_name>/docroot. # If this is overridden, this must be the ABSOLUTE path to the docroot. # # apache::site { # 'default':
  • 38. Puppet Sample Module /modules/apache/init.pp (Code) class apache { case $ensure { $apache2_sites = '/etc/apache2/sites' present: { $apache2_mods = '/etc/apache2/mods' file { "/etc/apache2/sites-available/$site_name": ensure => file, # OS Specific settings case $::operatingsystem { OS Specific require => Package[$apache::package_name], content => template("apache/${apache::conf_template}"), ubuntu: { } $package_name = 'apache2' $conf_template = 'site.conf.debian.erb' exec { "/usr/sbin/a2ensite $site_name": } unless => "/bin/readlink -e ${apache2_sites}-enabled/$site_name", default: { notify => Exec['force-reload-apache'], notify { "${module_name}_unsupported": require => Package[$apache::package_name], message => "The ${module_name} module is not supported on } ${::operatingsystem}.", } } absent: { error("OS support for ${::operatingsystem} needs to be configured") exec { "/usr/sbin/a2dissite $site_name": } #onlyif => "/bin/readlink -e ${apache2_sites}-enabled/$site_name", # } readlink not returning 0 # Define new type: site Define type: site notify => Exec['force-reload-apache'], require => Package[$apache::package_name], define site ($ensure = 'present', $vhost = undef, $docroot = undef) { } if $vhost { } $site_name = $vhost default: { } err("Unknown ensure value: '$ensure'") else { } $site_name = "${title}.vagrant" } } } if $docroot { $path = $docroot } else { $path = "/vagrant/${title}/docroot" }
  • 39. Puppet Sample Module /modules/apache/init.pp (Code) # Define new type: mod define mod ($ensure = 'present') { service { $package_name: case $ensure { present: { ensure => running, hasstatus => true, Package/Service exec { "/usr/sbin/a2enmod $title": hasrestart => true, unless => "/bin/readlink -e ${apache2_mods}-enabled/${title}.load", require => Package[$package_name], notify => Exec['force-reload-apache'], } require => Package[$apache::package_name], } } } absent: { Define type: mod exec { "/usr/sbin/a2dismod $title": #onlyif => "/bin/readlink -e ${apache2_mods}-enabled/${title}.load", # readlink not returning 0 notify => Exec['force-reload-apache'], require => Package[$apache::package_name], } } default: { err("Unknown ensure value: '$ensure'") } } } # Force reload all the time, doesn't take that much more in resources. exec { 'force-reload-apache': command => '/etc/init.d/apache2 force-reload', refreshonly => true, } package { $package_name: ensure => installed, }
  • 40. Puppet Sample Module ERB Templates: Create files on the fly. /modules/apache/templates/site.conf.debian.erb # Puppet generated file. DO NOT EDIT! # Managed by Class['apache'] <VirtualHost *:80> ServerAdmin webmaster@achieveinternet.com DocumentRoot <%= path %> ServerName <%= site_name %> <Directory <%= path %>> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
  • 41. Puppet++  Construct fully functioning development environments on the fly!  Bring new team members up to speed in a few simple commands.  CONSISTENCY! CONSISTENCY! CONSISTENCY! Everyone is working with the same virtual machine.
  • 42. Agenda - Revisited  What’s all the fuss?  What is Virtualization?  Vagrant – Creating (and destroying) environments on the fly.  Provisioning (via Puppet)  Examples  Future Directions Q&A
  • 43. Veewee Virtual Box Vagrant (Virtual Environment) (Virtual Machine Builder) VeeWee (Vagrant Box Builder) Puppet (Provisioner)
  • 44. Next Steps: Veewee Want your own custom Vagrant Box or one doesn’t exist? Veewee has predefined definitions for creating a variety of Vagrant base boxes. Installation Requirements (Mac OS X) - Install RVM (Ruby Version Manager) $ curl -L https://get.rvm.io | bash -s stable - Install Xcode, Command Line Tools for Xcode (required by Homebrew) - Install Homebrew $ ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go) - Install apple-gcc42 GCC Required! $ brew update $ brew tap homebrew/dupes $ brew install autoconf automake apple-gcc42 $ rvm pkg install openssl
  • 45. Next Steps: Veewee Veewee Installation (Mac OS X) $ rvm install 1.9.2 $ git clone https://github.com/jedi4ever/veewee.git $ cd veewee (official – Never worked for me…) $ gem install bundler $ bundle install (unoffical) $ gem build veewee.gemspec $ gem install veewee-*.gem (run as sudo) $ unalias veewee
  • 46. Next Steps: Veewee Veewee Base Box Creation (Mac OS X) In veewee directory: - Copy new iso into [currentDir]/iso (optional, saves veewee from finding) Create VM definition off of template: Usage: veewee vbox define <box_name> <template> $ veewee vbox define hardy ubuntu-8.04.4-server-i386 Customize VM Definition: - Edit <veewee_dir>/definitions/<box_name>/definition.rb Build virtual box (This should start VirtualBox) Usage: veewee build <box_name> $ veewee vbox build hardy # go get a coffee Usage: veewee vbox validate <box_name> $ veewee vbox validate hardy Build Vagrant base box: Usage: vagrant basebox export <box_name> $ vagrant basebox export hardy
  • 47. Next Steps: Puppet Enterprise  Allow for remote management of puppet nodes.  “One server to rule them all.”  Clone your configurations to EC2.  Audit your configurations.
  • 48. Gotchas  Be mindful of Puppets asyncronous execution order:  Make sure dependecies are properly set.  Starbucks syndrome:  Switching networks can sometimes cause your VM’s networking to get confused. Halt and restart to correct.  Provision everything… or as much as you can:  This will make resetting your environment go much more smoothly.
  • 49. Versions  VirtualBox v4.1.18 (https://www.virtualbox.org/wiki/Downloads)  Vagrant v1.0.3 (http://downloads.vagrantup.com/)  Puppet v2.7.19  Veewee v0.3.0.beta1 (https://github.com/jedi4ever/veewee)  Ubuntu v8.04 Hardy Heron
  • 50. Further Resources  Prebulit Vagrant Base Boxes (http://www.vagrantbox.es/)  Puppet Forge (http://forge.puppetlabs.com/)  Learn Puppet (http://docs.puppetlabs.com/learning/ral.html)
  • 51. Conclusion  …makes the "works on my machine" excuse a relic of the past. -- Vagrant  Created a disposable test bed to play with configuration changes  Created reusable modules to easily build customized setups  Provided canned environment for those who simply want to jump into a project. Allows team members to focus on core competencies.  Allows you to quickly and efficiently archive projects and come back to them later  CONSISTENCY - REDUCED ERRORS  EASY & INEXPENSIVE  INSTANT DEVELOPMENT - SAVE $$$
  • 52. Achieve Internet Pillars of Expertise Technical Foundation Built On the Following Core Areas of Expertise and Knowledge: 1. User Experience (UX) / Theming 2. Globalization/Localization 3. Performance & Deployment 4. Integration
  • 53. QA
  • 54. Thank You Michael Lee Senior Architect michael.lee@achieveinternet.com www.achieveinternet.com mlee11111 @ach_mikelee /pub/michael-lee/4/297/a6b Direct: 858-453-5760