SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
Standardized Debugging 
Environments 
Taking the Friction Out of Ticket Investigation 
Charlie Sharpsteen 
Open Source Support Engineer, Puppet Labs
What Are We Trying to Improve?
Collaboration Across Groups…
Collaboration Across Groups… 
Support
Collaboration Across Groups… 
Support Engineering
Collaboration Across Groups… 
Support Engineering Users
Collaboration Across Groups… 
Support Engineering Users 
…and Across Environments
Collaboration Across Groups… 
Support Engineering Users 
…and Across Environments 
Windows Linux
Collaboration Across Groups… 
Support Engineering Users 
…and Across Environments 
Windows OS X Solaris Linux
What I cannot create, 
I do not understand. 
- Richard Feynmen
First Steps
First Steps 
• Hand-built VMs
First Steps 
• Hand-built VMs 
• Manually managed snapshots
First Steps 
• Hand-built VMs 
• Manually managed snapshots 
• Hard to scale out and 
manually manage many VMs
Enter Vagrant
Enter Vagrant 
• A tool that allows us to create and manage many VM instances
Enter Vagrant 
• A tool that allows us to create and manage many VM instances 
• Manages artifacts required to use multiple guest operating systems 
• Provisions VMs after creation
Enter Vagrant 
• A tool that allows us to create and manage many VM instances 
• Manages artifacts required to use multiple guest operating systems 
• Provisions VMs after creation 
• Each VM is specified in a plain text file
# -*- mode: ruby -*-! 
# vi: set ft=ruby :! !! 
# Hashes of box URLs! 
S3_BOXES = {! 
:sles_11sp1 => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! 
:sles_11sp1_nocm => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210- 
nocm.box',! 
:fedora_18 => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210.box',! 
:fedora_18_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! 
:centos_59 => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210.box',! 
:centos_59_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! 
:centos_64_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! 
:centos_64_fusion_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-fusion503-nocm.box',! 
:debian_6_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! 
:debian_7 => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box',! 
:debian_7_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210- 
nocm.box',! 
:ubuntu_1204_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210- 
nocm.box',! 
}!! LOCAL_BOXES = {! 
:centos_64_pe => "~/Data/boxes/centos-6.4-i386-pe.box",! 
:solaris_10 => '~/Data/boxes/solaris-10u11-i386-vbox4210.box',! 
:solaris_10_nocm => '~/Data/boxes/solaris-10u11-i386-vbox4210-nocm.box',! 
}!! BOOTSTRAPS = {! 
:centos_6 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing EPEL'! 
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm! 
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm! 
! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
:centos_59 => <<-EOS,! 
# CentOS 5 has some networking problems! 
/etc/init.d/network restart! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
:ubuntu_1204 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
wget --output-document=/tmp/puppet-repo-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise. 
deb! 
dpkg -i /tmp/puppet-repo-precise.deb! 
apt-get update! 
apt-get install -y --allow-unauthenticated puppet! 
fi! 
EOS! 
:fedora_18 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
sudo rpm -ivh http://yum.puppetlabs.com/fedora/f18/products/i386/puppetlabs-release-18-7.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
}!! # Shorthand method for setting box URL and name in one shot.! 
def set_box box, box_url! 
box.vm.box_url = box_url! 
# Recover box name from url by returning the last component minus the! 
# `.box` extension.! 
box.vm.box = File.basename(box.vm.box_url, File.extname(box.vm.box_url))! 
e!nd! def share_puppet_source box! 
e!nd! def share_puppet_modules box! 
box.vm.share_folder 'puppet-source', '/puppetlabs', "#{ENV['HOME']}/Source/puppetlabs"! 
e!nd! def provision_box box, manifest! 
box.vm.provision :puppet do |puppet|! 
box.vm.share_folder 'puppet-modules', '/usr/share/puppet/modules', 'provisioning/modules'! 
puppet.pp_path = '/tmp/vagrant-puppet'! 
puppet.manifests_path = 'provisioning/manifests'! 
puppet.module_path = 'provisioning/modules'! 
puppet.manifest_file = manifest! 
e!nd! 
end! 
!! 
Vagrant::Config.run do |config|! 
! config.ssh.forward_x11 = true! config.vm.define :pemaster do |box|! 
flavor = :centos_64_pe! 
! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.40"! 
box.vm.host_name = 'pemaster.boxnet'! 
! end! config.vm.define :peagent do |box|! 
flavor = :centos_64_pe! 
! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.41"! 
box.vm.host_name = 'peagent.boxnet'! 
end! !! 
config.vm.define :puppetmaster do |box|! 
flavor = :centos_6! 
! set_box box, S3_BOXES[:centos_64_nocm]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.20"! 
! box.vm.host_name = 'puppetmaster.boxnet'! # NOTE: Share folders, such as Git checkouts of the Puppet source code! 
! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'server.pp'! 
! end! config.vm.define :puppetagent do |box|! 
flavor = :centos_6! 
! set_box box, S3_BOXES[:centos_64_nocm]! box.vm.network :hostonly, "192.168.23.21"! 
! box.vm.host_name = "puppetagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :centos_59 do |box|! 
flavor = :centos_59_nocm! 
! set_box box, S3_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.22"! 
! box.vm.host_name = "centos-59.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[:centos_59]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :ubuntuagent do |box|! 
flavor = :ubuntu_1204! 
! set_box box, S3_BOXES[:ubuntu_1204_nocm]! box.vm.network :hostonly, "192.168.23.23"! 
! box.vm.host_name = "ubuntuagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :solaris_10 do |box|! 
box.vm.guest = :solaris! 
flavor = :solaris_10! 
! set_box box, LOCAL_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.24"! 
box.vm.host_name = "solaris-10.boxnet"! 
! end! config.vm.define :debianagent do |box|! 
flavor = :debian_7_nocm! 
! set_box box, S3_BOXES[flavor]! 
The uberVagrantfile
# -*- mode: ruby -*-! 
# vi: set ft=ruby :! !! 
# Hashes of box URLs! 
S3_BOXES = {! 
:sles_11sp1 => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! 
:sles_11sp1_nocm => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210- 
nocm.box',! 
:fedora_18 => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210.box',! 
:fedora_18_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! 
:centos_59 => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210.box',! 
:centos_59_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! 
:centos_64_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! 
:centos_64_fusion_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-fusion503-nocm.box',! 
:debian_6_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! 
:debian_7 => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box',! 
:debian_7_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210- 
nocm.box',! 
:ubuntu_1204_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210- 
nocm.box',! 
}!! LOCAL_BOXES = {! 
:centos_64_pe => "~/Data/boxes/centos-6.4-i386-pe.box",! 
:solaris_10 => '~/Data/boxes/solaris-10u11-i386-vbox4210.box',! 
:solaris_10_nocm => '~/Data/boxes/solaris-10u11-i386-vbox4210-nocm.box',! 
}!! BOOTSTRAPS = {! 
:centos_6 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing EPEL'! 
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm! 
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm! 
! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
:centos_59 => <<-EOS,! 
# CentOS 5 has some networking problems! 
/etc/init.d/network restart! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
:ubuntu_1204 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
wget --output-document=/tmp/puppet-repo-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise. 
deb! 
dpkg -i /tmp/puppet-repo-precise.deb! 
apt-get update! 
apt-get install -y --allow-unauthenticated puppet! 
fi! 
EOS! 
:fedora_18 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
sudo rpm -ivh http://yum.puppetlabs.com/fedora/f18/products/i386/puppetlabs-release-18-7.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
}!! # Shorthand method for setting box URL and name in one shot.! 
def set_box box, box_url! 
box.vm.box_url = box_url! 
# Recover box name from url by returning the last component minus the! 
# `.box` extension.! 
box.vm.box = File.basename(box.vm.box_url, File.extname(box.vm.box_url))! 
e!nd! def share_puppet_source box! 
e!nd! def share_puppet_modules box! 
box.vm.share_folder 'puppet-source', '/puppetlabs', "#{ENV['HOME']}/Source/puppetlabs"! 
e!nd! def provision_box box, manifest! 
box.vm.provision :puppet do |puppet|! 
box.vm.share_folder 'puppet-modules', '/usr/share/puppet/modules', 'provisioning/modules'! 
puppet.pp_path = '/tmp/vagrant-puppet'! 
puppet.manifests_path = 'provisioning/manifests'! 
puppet.module_path = 'provisioning/modules'! 
puppet.manifest_file = manifest! 
e!nd! 
end! 
!! 
Vagrant::Config.run do |config|! 
! config.ssh.forward_x11 = true! config.vm.define :pemaster do |box|! 
flavor = :centos_64_pe! 
! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.40"! 
box.vm.host_name = 'pemaster.boxnet'! 
! end! config.vm.define :peagent do |box|! 
flavor = :centos_64_pe! 
! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.41"! 
box.vm.host_name = 'peagent.boxnet'! 
end! !! 
config.vm.define :puppetmaster do |box|! 
flavor = :centos_6! 
! set_box box, S3_BOXES[:centos_64_nocm]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.20"! 
! box.vm.host_name = 'puppetmaster.boxnet'! # NOTE: Share folders, such as Git checkouts of the Puppet source code! 
! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'server.pp'! 
! end! config.vm.define :puppetagent do |box|! 
flavor = :centos_6! 
! set_box box, S3_BOXES[:centos_64_nocm]! box.vm.network :hostonly, "192.168.23.21"! 
! box.vm.host_name = "puppetagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :centos_59 do |box|! 
flavor = :centos_59_nocm! 
! set_box box, S3_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.22"! 
! box.vm.host_name = "centos-59.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[:centos_59]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :ubuntuagent do |box|! 
flavor = :ubuntu_1204! 
! set_box box, S3_BOXES[:ubuntu_1204_nocm]! box.vm.network :hostonly, "192.168.23.23"! 
! box.vm.host_name = "ubuntuagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :solaris_10 do |box|! 
box.vm.guest = :solaris! 
flavor = :solaris_10! 
! set_box box, LOCAL_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.24"! 
box.vm.host_name = "solaris-10.boxnet"! 
! end! config.vm.define :debianagent do |box|! 
flavor = :debian_7_nocm! 
! set_box box, S3_BOXES[flavor]! 
The uberVagrantfile 
Data: 
! 
# Hashes of box URLs! 
S3_BOXES = {! 
:sles_11sp1 => 'http://puppet-vagrant-boxes. 
s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! 
:sles_11sp1_nocm => 'http://puppet-vagrant-boxes. 
s3.amazonaws.com/sles-11sp1-x64-vbox4210-nocm.box',! 
:fedora_18 => 'http://puppet-vagrant-boxes. 
puppetlabs.com/fedora-18-x64-vbox4210.box',! 
:fedora_18_nocm => 'http://puppet-vagrant-boxes. 
puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! 
:centos_59 => 'http://puppet-vagrant-boxes. 
puppetlabs.com/centos-59-x64-vbox4210.box',! 
:centos_59_nocm => 'http://puppet-vagrant-boxes. 
puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! 
:centos_64_nocm => 'http://puppet-vagrant-boxes. 
puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! 
:centos_64_fusion_nocm => 'http://puppet-vagrant-boxes. 
puppetlabs.com/centos-64-x64-fusion503-nocm.box',! 
:debian_6_nocm => 'http://puppet-vagrant-boxes. 
puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! 
:debian_7 => 'http://puppet-vagrant-boxes. 
puppetlabs.com/debian-70rc1-x64-vbox4210.box',! 
:debian_7_nocm => 'http://puppet-vagrant-boxes. 
puppetlabs.com/debian-70rc1-x64-vbox4210-nocm.box',! 
:ubuntu_1204_nocm => 'http://puppet-vagrant-boxes. 
puppetlabs.com/ubuntu-server-12042-x64-vbox4210- 
nocm.box',! 
}!
# -*- mode: ruby -*-! 
# vi: set ft=ruby :! !! 
# Hashes of box URLs! 
S3_BOXES = {! 
:sles_11sp1 => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! 
:sles_11sp1_nocm => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210- 
nocm.box',! 
:fedora_18 => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210.box',! 
:fedora_18_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! 
:centos_59 => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210.box',! 
:centos_59_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! 
:centos_64_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! 
:centos_64_fusion_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-fusion503-nocm.box',! 
:debian_6_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! 
:debian_7 => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box',! 
:debian_7_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210- 
nocm.box',! 
:ubuntu_1204_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210- 
nocm.box',! 
}!! LOCAL_BOXES = {! 
:centos_64_pe => "~/Data/boxes/centos-6.4-i386-pe.box",! 
:solaris_10 => '~/Data/boxes/solaris-10u11-i386-vbox4210.box',! 
:solaris_10_nocm => '~/Data/boxes/solaris-10u11-i386-vbox4210-nocm.box',! 
}!! BOOTSTRAPS = {! 
:centos_6 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing EPEL'! 
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm! 
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm! 
! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
:centos_59 => <<-EOS,! 
# CentOS 5 has some networking problems! 
/etc/init.d/network restart! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
:ubuntu_1204 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
wget --output-document=/tmp/puppet-repo-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise. 
deb! 
dpkg -i /tmp/puppet-repo-precise.deb! 
apt-get update! 
apt-get install -y --allow-unauthenticated puppet! 
fi! 
EOS! 
:fedora_18 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
sudo rpm -ivh http://yum.puppetlabs.com/fedora/f18/products/i386/puppetlabs-release-18-7.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
}!! # Shorthand method for setting box URL and name in one shot.! 
def set_box box, box_url! 
box.vm.box_url = box_url! 
# Recover box name from url by returning the last component minus the! 
# `.box` extension.! 
box.vm.box = File.basename(box.vm.box_url, File.extname(box.vm.box_url))! 
e!nd! def share_puppet_source box! 
e!nd! def share_puppet_modules box! 
box.vm.share_folder 'puppet-source', '/puppetlabs', "#{ENV['HOME']}/Source/puppetlabs"! 
e!nd! def provision_box box, manifest! 
box.vm.provision :puppet do |puppet|! 
box.vm.share_folder 'puppet-modules', '/usr/share/puppet/modules', 'provisioning/modules'! 
puppet.pp_path = '/tmp/vagrant-puppet'! 
puppet.manifests_path = 'provisioning/manifests'! 
puppet.module_path = 'provisioning/modules'! 
puppet.manifest_file = manifest! 
e!nd! 
end! 
!! 
Vagrant::Config.run do |config|! 
! config.ssh.forward_x11 = true! config.vm.define :pemaster do |box|! 
flavor = :centos_64_pe! 
! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.40"! 
box.vm.host_name = 'pemaster.boxnet'! 
! end! config.vm.define :peagent do |box|! 
flavor = :centos_64_pe! 
! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.41"! 
box.vm.host_name = 'peagent.boxnet'! 
end! !! 
config.vm.define :puppetmaster do |box|! 
flavor = :centos_6! 
! set_box box, S3_BOXES[:centos_64_nocm]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.20"! 
! box.vm.host_name = 'puppetmaster.boxnet'! # NOTE: Share folders, such as Git checkouts of the Puppet source code! 
! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'server.pp'! 
! end! config.vm.define :puppetagent do |box|! 
flavor = :centos_6! 
! set_box box, S3_BOXES[:centos_64_nocm]! box.vm.network :hostonly, "192.168.23.21"! 
! box.vm.host_name = "puppetagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :centos_59 do |box|! 
flavor = :centos_59_nocm! 
! set_box box, S3_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.22"! 
! box.vm.host_name = "centos-59.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[:centos_59]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :ubuntuagent do |box|! 
flavor = :ubuntu_1204! 
! set_box box, S3_BOXES[:ubuntu_1204_nocm]! box.vm.network :hostonly, "192.168.23.23"! 
! box.vm.host_name = "ubuntuagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :solaris_10 do |box|! 
box.vm.guest = :solaris! 
flavor = :solaris_10! 
! set_box box, LOCAL_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.24"! 
box.vm.host_name = "solaris-10.boxnet"! 
! end! config.vm.define :debianagent do |box|! 
flavor = :debian_7_nocm! 
! set_box box, S3_BOXES[flavor]! 
The uberVagrantfile 
Custom Provisioners: 
! 
BOOTSTRAPS = {! 
:centos_6 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing EPEL'! 
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release- 
6-8.noarch.rpm! 
wget http://rpms.famillecollet.com/enterprise/remi-release- 
6.rpm! 
sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! 
! 
echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/ 
puppetlabs-release-6-6.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
...! 
! 
def provision_box box, manifest! 
box.vm.provision :puppet do |puppet|! 
puppet.pp_path = '/tmp/vagrant-puppet'! 
puppet.manifests_path = 'provisioning/manifests'! 
puppet.module_path = 'provisioning/modules'! 
puppet.manifest_file = manifest! 
end! 
end
# -*- mode: ruby -*-! 
# vi: set ft=ruby :! !! 
# Hashes of box URLs! 
S3_BOXES = {! 
:sles_11sp1 => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! 
:sles_11sp1_nocm => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210- 
nocm.box',! 
:fedora_18 => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210.box',! 
:fedora_18_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! 
:centos_59 => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210.box',! 
:centos_59_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! 
:centos_64_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! 
:centos_64_fusion_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-fusion503-nocm.box',! 
:debian_6_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! 
:debian_7 => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box',! 
:debian_7_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210- 
nocm.box',! 
:ubuntu_1204_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210- 
nocm.box',! 
}!! LOCAL_BOXES = {! 
:centos_64_pe => "~/Data/boxes/centos-6.4-i386-pe.box",! 
:solaris_10 => '~/Data/boxes/solaris-10u11-i386-vbox4210.box',! 
:solaris_10_nocm => '~/Data/boxes/solaris-10u11-i386-vbox4210-nocm.box',! 
}!! BOOTSTRAPS = {! 
:centos_6 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing EPEL'! 
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm! 
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm! 
! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
:centos_59 => <<-EOS,! 
# CentOS 5 has some networking problems! 
/etc/init.d/network restart! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
:ubuntu_1204 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
wget --output-document=/tmp/puppet-repo-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise. 
deb! 
dpkg -i /tmp/puppet-repo-precise.deb! 
apt-get update! 
apt-get install -y --allow-unauthenticated puppet! 
fi! 
EOS! 
:fedora_18 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
sudo rpm -ivh http://yum.puppetlabs.com/fedora/f18/products/i386/puppetlabs-release-18-7.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
}!! # Shorthand method for setting box URL and name in one shot.! 
def set_box box, box_url! 
box.vm.box_url = box_url! 
# Recover box name from url by returning the last component minus the! 
# `.box` extension.! 
box.vm.box = File.basename(box.vm.box_url, File.extname(box.vm.box_url))! 
e!nd! def share_puppet_source box! 
e!nd! def share_puppet_modules box! 
box.vm.share_folder 'puppet-source', '/puppetlabs', "#{ENV['HOME']}/Source/puppetlabs"! 
e!nd! def provision_box box, manifest! 
box.vm.provision :puppet do |puppet|! 
box.vm.share_folder 'puppet-modules', '/usr/share/puppet/modules', 'provisioning/modules'! 
puppet.pp_path = '/tmp/vagrant-puppet'! 
puppet.manifests_path = 'provisioning/manifests'! 
puppet.module_path = 'provisioning/modules'! 
puppet.manifest_file = manifest! 
e!nd! 
end! 
!! 
Vagrant::Config.run do |config|! 
! config.ssh.forward_x11 = true! config.vm.define :pemaster do |box|! 
flavor = :centos_64_pe! 
! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.40"! 
box.vm.host_name = 'pemaster.boxnet'! 
! end! config.vm.define :peagent do |box|! 
flavor = :centos_64_pe! 
! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.41"! 
box.vm.host_name = 'peagent.boxnet'! 
end! !! 
config.vm.define :puppetmaster do |box|! 
flavor = :centos_6! 
! set_box box, S3_BOXES[:centos_64_nocm]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.20"! 
! box.vm.host_name = 'puppetmaster.boxnet'! # NOTE: Share folders, such as Git checkouts of the Puppet source code! 
! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'server.pp'! 
! end! config.vm.define :puppetagent do |box|! 
flavor = :centos_6! 
! set_box box, S3_BOXES[:centos_64_nocm]! box.vm.network :hostonly, "192.168.23.21"! 
! box.vm.host_name = "puppetagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :centos_59 do |box|! 
flavor = :centos_59_nocm! 
! set_box box, S3_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.22"! 
! box.vm.host_name = "centos-59.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[:centos_59]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :ubuntuagent do |box|! 
flavor = :ubuntu_1204! 
! set_box box, S3_BOXES[:ubuntu_1204_nocm]! box.vm.network :hostonly, "192.168.23.23"! 
! box.vm.host_name = "ubuntuagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :solaris_10 do |box|! 
box.vm.guest = :solaris! 
flavor = :solaris_10! 
! set_box box, LOCAL_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.24"! 
box.vm.host_name = "solaris-10.boxnet"! 
! end! config.vm.define :debianagent do |box|! 
flavor = :debian_7_nocm! 
! set_box box, S3_BOXES[flavor]! 
The uberVagrantfile 
VM Definitions 
! 
config.vm.define :pemaster do |box|! 
flavor = :centos_64_pe! 
set_box box, LOCAL_BOXES[flavor]! 
! 
# NOTE: Headless or no?! 
#webnode_config.vm.boot_mode = :gui! 
! 
# NOTE: Hostonly _may_ mean no internets if this 
adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.40"! 
box.vm.host_name = 'pemaster.boxnet'! 
end! 
! 
config.vm.define :peagent do |box|! 
flavor = :centos_64_pe! 
set_box box, LOCAL_BOXES[flavor]! 
! 
# NOTE: Headless or no?! 
#webnode_config.vm.boot_mode = :gui! 
! 
# NOTE: Hostonly _may_ mean no internets if this 
adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.41"! 
box.vm.host_name = 'peagent.boxnet'! 
end
# -*- mode: ruby -*-! 
# vi: set ft=ruby :! !! 
# Hashes of box URLs! 
S3_BOXES = {! 
:sles_11sp1 => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! 
:sles_11sp1_nocm => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210- 
nocm.box',! 
:fedora_18 => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210.box',! 
:fedora_18_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! 
:centos_59 => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210.box',! 
:centos_59_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! 
:centos_64_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! 
:centos_64_fusion_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-fusion503-nocm.box',! 
:debian_6_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! 
:debian_7 => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box',! 
:debian_7_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210- 
nocm.box',! 
:ubuntu_1204_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210- 
nocm.box',! 
}!! LOCAL_BOXES = {! 
:centos_64_pe => "~/Data/boxes/centos-6.4-i386-pe.box",! 
:solaris_10 => '~/Data/boxes/solaris-10u11-i386-vbox4210.box',! 
:solaris_10_nocm => '~/Data/boxes/solaris-10u11-i386-vbox4210-nocm.box',! 
}!! BOOTSTRAPS = {! 
:centos_6 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing EPEL'! 
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm! 
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm! 
! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
:centos_59 => <<-EOS,! 
# CentOS 5 has some networking problems! 
/etc/init.d/network restart! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
echo 'Installing Puppet.'! 
rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
:ubuntu_1204 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
wget --output-document=/tmp/puppet-repo-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise. 
deb! 
dpkg -i /tmp/puppet-repo-precise.deb! 
apt-get update! 
apt-get install -y --allow-unauthenticated puppet! 
fi! 
EOS! 
:fedora_18 => <<-EOS,! 
if which puppet > /dev/null 2>&1; then! 
echo 'Puppet Installed.'! 
else! 
sudo rpm -ivh http://yum.puppetlabs.com/fedora/f18/products/i386/puppetlabs-release-18-7.noarch.rpm! 
yum --nogpgcheck -y install puppet-server! 
fi! 
EOS! 
}!! # Shorthand method for setting box URL and name in one shot.! 
def set_box box, box_url! 
box.vm.box_url = box_url! 
# Recover box name from url by returning the last component minus the! 
# `.box` extension.! 
box.vm.box = File.basename(box.vm.box_url, File.extname(box.vm.box_url))! 
e!nd! def share_puppet_source box! 
e!nd! def share_puppet_modules box! 
box.vm.share_folder 'puppet-source', '/puppetlabs', "#{ENV['HOME']}/Source/puppetlabs"! 
e!nd! def provision_box box, manifest! 
box.vm.provision :puppet do |puppet|! 
box.vm.share_folder 'puppet-modules', '/usr/share/puppet/modules', 'provisioning/modules'! 
puppet.pp_path = '/tmp/vagrant-puppet'! 
puppet.manifests_path = 'provisioning/manifests'! 
puppet.module_path = 'provisioning/modules'! 
puppet.manifest_file = manifest! 
e!nd! 
end! 
!! 
Vagrant::Config.run do |config|! 
! config.ssh.forward_x11 = true! config.vm.define :pemaster do |box|! 
flavor = :centos_64_pe! 
! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.40"! 
box.vm.host_name = 'pemaster.boxnet'! 
! end! config.vm.define :peagent do |box|! 
flavor = :centos_64_pe! 
! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.41"! 
box.vm.host_name = 'peagent.boxnet'! 
end! !! 
config.vm.define :puppetmaster do |box|! 
flavor = :centos_6! 
! set_box box, S3_BOXES[:centos_64_nocm]! # NOTE: Headless or no?! 
! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! 
# Check /etc/resolv.conf !! 
box.vm.network :hostonly, "192.168.23.20"! 
! box.vm.host_name = 'puppetmaster.boxnet'! # NOTE: Share folders, such as Git checkouts of the Puppet source code! 
! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'server.pp'! 
! end! config.vm.define :puppetagent do |box|! 
flavor = :centos_6! 
! set_box box, S3_BOXES[:centos_64_nocm]! box.vm.network :hostonly, "192.168.23.21"! 
! box.vm.host_name = "puppetagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :centos_59 do |box|! 
flavor = :centos_59_nocm! 
! set_box box, S3_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.22"! 
! box.vm.host_name = "centos-59.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[:centos_59]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :ubuntuagent do |box|! 
flavor = :ubuntu_1204! 
! set_box box, S3_BOXES[:ubuntu_1204_nocm]! box.vm.network :hostonly, "192.168.23.23"! 
! box.vm.host_name = "ubuntuagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! 
provision_box box, 'agent.pp'! 
! end! config.vm.define :solaris_10 do |box|! 
box.vm.guest = :solaris! 
flavor = :solaris_10! 
! set_box box, LOCAL_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.24"! 
box.vm.host_name = "solaris-10.boxnet"! 
! end! config.vm.define :debianagent do |box|! 
flavor = :debian_7_nocm! 
! set_box box, S3_BOXES[flavor]! 
The uberVagrantfile 
• Maintenance costs increase as 
more machines are added 
• Unique to each individual or 
team 
• Hard to scale across teams
Build Abstractions
Build Abstractions 
• Eliminate manual bookkeeping
Build Abstractions 
• Eliminate manual bookkeeping config.vm.define :pemaster do |node|! 
node.vm.network :hostonly, "192.168.23.40"! 
end! 
! 
config.vm.define :peagent do |node|! 
node.vm.network :hostonly, "192.168.23.41"! 
end
Build Abstractions 
• Eliminate manual bookkeeping config.vm.define :pemaster do |node|! 
node.vm.network :hostonly, "192.168.23.40"! 
end! 
! 
config.vm.define :peagent do |node|! 
node.vm.network :hostonly, "192.168.23.41"! 
end 
config.vm.define :pemaster do |node|! 
node.vm.network :hostonly, auto_network: true! 
end! 
! 
config.vm.define :peagent do |node|! 
node.vm.network :hostonly, auto_network: true! 
end!
Build Abstractions 
• Eliminate manual bookkeeping 
• Automate repetitive tasks
Build Abstractions 
• Eliminate manual bookkeeping 
• Automate repetitive tasks 
config.vm.define :pemaster do |node|! 
# ...! 
! 
node.vm.provision :pe_bootstrap do |p|! 
p.role = :master! 
p.version = '3.3.0'! 
end! 
end!
Build Abstractions 
• Eliminate manual bookkeeping 
• Automate repetitive tasks 
• Separate data from logic
Build Abstractions 
• Eliminate manual bookkeeping 
• Automate repetitive tasks 
• Separate data from logic 
config.vm.define :pemaster do |node|! 
node.vm.hostname =! 
'pe-330-master.puppetdebug.vlan'! 
node.vm.box = 'puppetlabs/centos-6.5-64-nocm'! 
! 
node.vm.network :hostonly, auto_network: true! 
! 
node.vm.provision :pe_bootstrap do |p|! 
p.role = :master! 
p.version = '3.3.0'! 
end! 
end!
Build Abstractions 
• Eliminate manual bookkeeping 
• Automate repetitive tasks 
• Separate data from logic 
---! 
vms:! 
- name: pe-330-master! 
hostname: pe-330-master.puppetdebug.vlan! 
box: puppetlabs/centos-6.5-64-nocm! 
private_networks:! 
- auto_network: true! 
provisioners:! 
- type: pe_bootstrap! 
role: master! 
version: 3.3.0!
Build Abstractions 
• Eliminate manual bookkeeping 
• Automate repetitive tasks 
• Separate data from logic 
---! 
vms:! 
- name: pe-330-master! 
hostname: pe-330-master.puppetdebug.vlan! 
box: puppetlabs/centos-6.5-64-nocm! 
roles:! 
- base! 
provisioners:! 
- type: pe_bootstrap! 
role: master! 
version: 3.3.0! 
! 
roles:! 
base:! 
private_networks:! 
- auto_network: true!
Build Abstractions 
• Eliminate manual bookkeeping 
• Automate repetitive tasks 
• Separate data from logic 
---! 
vms:! 
- name: pe-330-master! 
debug-kit: true! 
box: puppetlabs/centos-6.5-64-nocm! 
roles:! 
- base! 
! 
roles:! 
base:! 
private_networks:! 
- auto_network: true!
Raw Materials
Raw Materials 
• Which boxes are in use? Do 
the older boxes still work?
Raw Materials 
• Which boxes are in use? Do 
the older boxes still work? 
• How were the boxes created?
Raw Materials 
• Which boxes are in use? Do 
the older boxes still work? 
• How were the boxes created?
Phased Builds
Phased Builds 
Base Install
Phased Builds 
Shared Customizations 
Base Install
Phased Builds 
Open Source Puppet Enterprise 
Shared Customizations 
Base Install
Build Server 
Phased Builds 
Open Source Puppet Enterprise 
Shared Customizations 
Base Install
Where We Ended Up
Where We Ended Up 
• Shared environments enable teams to focus on problem solving
Where We Ended Up 
• Shared environments enable teams to focus on problem solving 
• New employee on-boarding is easier
Where We Ended Up 
• Shared environments enable teams to focus on problem solving 
• New employee on-boarding is easier 
• Company-wide efforts to build and maintain virtual environments are 
focused instead of scattered
Resources 
• http://www.vagrantup.com/ 
• https://github.com/adrienthebo/oscar 
• https://github.com/Sharpie/puppet-debugging-kit 
• http://www.packer.io/ 
• https://vagrantcloud.com/puppetlabs

Mais conteúdo relacionado

Mais procurados

Environments line-up! Vagrant & Puppet 101
Environments line-up! Vagrant & Puppet 101Environments line-up! Vagrant & Puppet 101
Environments line-up! Vagrant & Puppet 101jelrikvh
 
Vagrant WordCamp Hamilton
Vagrant  WordCamp HamiltonVagrant  WordCamp Hamilton
Vagrant WordCamp HamiltonPaul Bearne
 
Kickin' Ass with Cache-Fu (with notes)
Kickin' Ass with Cache-Fu (with notes)Kickin' Ass with Cache-Fu (with notes)
Kickin' Ass with Cache-Fu (with notes)err
 
Przemysław Iwanek - ABC AWS, budowanie infrastruktury przy pomocy Terraform
Przemysław Iwanek - ABC AWS, budowanie infrastruktury przy pomocy TerraformPrzemysław Iwanek - ABC AWS, budowanie infrastruktury przy pomocy Terraform
Przemysław Iwanek - ABC AWS, budowanie infrastruktury przy pomocy Terraformjzielinski_pl
 
Automate with Ansible basic (2/e, English)
Automate with Ansible basic (2/e, English)Automate with Ansible basic (2/e, English)
Automate with Ansible basic (2/e, English)Chu-Siang Lai
 
Debugging webOS applications
Debugging webOS applicationsDebugging webOS applications
Debugging webOS applicationsfpatton
 
Kickin' Ass with Cache-Fu (without notes)
Kickin' Ass with Cache-Fu (without notes)Kickin' Ass with Cache-Fu (without notes)
Kickin' Ass with Cache-Fu (without notes)err
 
Boxen: How to Manage an Army of Laptops and Live to Talk About It
Boxen: How to Manage an Army of Laptops and Live to Talk About ItBoxen: How to Manage an Army of Laptops and Live to Talk About It
Boxen: How to Manage an Army of Laptops and Live to Talk About ItPuppet
 
Chef Workshop: Setup Environment with Chef,Vagrant, and Berkshelf
Chef Workshop: Setup Environment with Chef,Vagrant, and BerkshelfChef Workshop: Setup Environment with Chef,Vagrant, and Berkshelf
Chef Workshop: Setup Environment with Chef,Vagrant, and BerkshelfJun Sakata
 
May The Nodejs Be With You
May The Nodejs Be With YouMay The Nodejs Be With You
May The Nodejs Be With YouDalibor Gogic
 
pam_container -- jeszcze lżejsza wirtualizacja
pam_container -- jeszcze lżejsza wirtualizacjapam_container -- jeszcze lżejsza wirtualizacja
pam_container -- jeszcze lżejsza wirtualizacjagnosek
 
An Introduction to Go
An Introduction to GoAn Introduction to Go
An Introduction to GoCloudflare
 
Hands on Pier
Hands on PierHands on Pier
Hands on PierESUG
 
Getting started with ES6 : Future of javascript
Getting started with ES6 : Future of javascriptGetting started with ES6 : Future of javascript
Getting started with ES6 : Future of javascriptMohd Saeed
 

Mais procurados (19)

Environments line-up! Vagrant & Puppet 101
Environments line-up! Vagrant & Puppet 101Environments line-up! Vagrant & Puppet 101
Environments line-up! Vagrant & Puppet 101
 
Es.next
Es.nextEs.next
Es.next
 
Vagrant WordCamp Hamilton
Vagrant  WordCamp HamiltonVagrant  WordCamp Hamilton
Vagrant WordCamp Hamilton
 
Kickin' Ass with Cache-Fu (with notes)
Kickin' Ass with Cache-Fu (with notes)Kickin' Ass with Cache-Fu (with notes)
Kickin' Ass with Cache-Fu (with notes)
 
Przemysław Iwanek - ABC AWS, budowanie infrastruktury przy pomocy Terraform
Przemysław Iwanek - ABC AWS, budowanie infrastruktury przy pomocy TerraformPrzemysław Iwanek - ABC AWS, budowanie infrastruktury przy pomocy Terraform
Przemysław Iwanek - ABC AWS, budowanie infrastruktury przy pomocy Terraform
 
Automate with Ansible basic (2/e, English)
Automate with Ansible basic (2/e, English)Automate with Ansible basic (2/e, English)
Automate with Ansible basic (2/e, English)
 
Debugging webOS applications
Debugging webOS applicationsDebugging webOS applications
Debugging webOS applications
 
Ruby
RubyRuby
Ruby
 
Kickin' Ass with Cache-Fu (without notes)
Kickin' Ass with Cache-Fu (without notes)Kickin' Ass with Cache-Fu (without notes)
Kickin' Ass with Cache-Fu (without notes)
 
Boxen: How to Manage an Army of Laptops and Live to Talk About It
Boxen: How to Manage an Army of Laptops and Live to Talk About ItBoxen: How to Manage an Army of Laptops and Live to Talk About It
Boxen: How to Manage an Army of Laptops and Live to Talk About It
 
Automate or Die
Automate or DieAutomate or Die
Automate or Die
 
Chef Workshop: Setup Environment with Chef,Vagrant, and Berkshelf
Chef Workshop: Setup Environment with Chef,Vagrant, and BerkshelfChef Workshop: Setup Environment with Chef,Vagrant, and Berkshelf
Chef Workshop: Setup Environment with Chef,Vagrant, and Berkshelf
 
May The Nodejs Be With You
May The Nodejs Be With YouMay The Nodejs Be With You
May The Nodejs Be With You
 
Effective ES6
Effective ES6Effective ES6
Effective ES6
 
pam_container -- jeszcze lżejsza wirtualizacja
pam_container -- jeszcze lżejsza wirtualizacjapam_container -- jeszcze lżejsza wirtualizacja
pam_container -- jeszcze lżejsza wirtualizacja
 
An Introduction to Go
An Introduction to GoAn Introduction to Go
An Introduction to Go
 
Hands on Pier
Hands on PierHands on Pier
Hands on Pier
 
Getting started with ES6 : Future of javascript
Getting started with ES6 : Future of javascriptGetting started with ES6 : Future of javascript
Getting started with ES6 : Future of javascript
 
Transforming WebSockets
Transforming WebSocketsTransforming WebSockets
Transforming WebSockets
 

Semelhante a Taking the Friction Out of Ticket Investigation (Standardized Debugging Environments) - Charlie Sharpsteen

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
 
Андрей Поданенко - Start using Vagrant now!
Андрей Поданенко - Start using Vagrant now!Андрей Поданенко - Start using Vagrant now!
Андрей Поданенко - Start using Vagrant now!LEDC 2016
 
Modern tooling to assist with developing applications on FreeBSD
Modern tooling to assist with developing applications on FreeBSDModern tooling to assist with developing applications on FreeBSD
Modern tooling to assist with developing applications on FreeBSDSean Chittenden
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopWalter Heck
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopOlinData
 
Using Vagrant, Puppet, Testing & Hadoop
Using Vagrant, Puppet, Testing & HadoopUsing Vagrant, Puppet, Testing & Hadoop
Using Vagrant, Puppet, Testing & HadoopPuppet
 
How I hack on puppet modules
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modulesKris Buytaert
 
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
 
Vagrant for real
Vagrant for realVagrant for real
Vagrant for realCodemotion
 
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
 
puppet @techlifecookpad
puppet @techlifecookpadpuppet @techlifecookpad
puppet @techlifecookpadNaoya Nakazawa
 
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 introduction for Developers
Vagrant introduction for DevelopersVagrant introduction for Developers
Vagrant introduction for DevelopersAntons Kranga
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Carlos Sanchez
 
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
 
Open stack and_vagrant-os-meetup-2015
Open stack and_vagrant-os-meetup-2015Open stack and_vagrant-os-meetup-2015
Open stack and_vagrant-os-meetup-2015yfauser
 
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
 

Semelhante a Taking the Friction Out of Ticket Investigation (Standardized Debugging Environments) - Charlie Sharpsteen (20)

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
 
Start using vagrant now!
Start using vagrant now!Start using vagrant now!
Start using vagrant now!
 
Андрей Поданенко - Start using Vagrant now!
Андрей Поданенко - Start using Vagrant now!Андрей Поданенко - Start using Vagrant now!
Андрей Поданенко - Start using Vagrant now!
 
Modern tooling to assist with developing applications on FreeBSD
Modern tooling to assist with developing applications on FreeBSDModern tooling to assist with developing applications on FreeBSD
Modern tooling to assist with developing applications on FreeBSD
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
 
Using Vagrant, Puppet, Testing & Hadoop
Using Vagrant, Puppet, Testing & HadoopUsing Vagrant, Puppet, Testing & Hadoop
Using Vagrant, Puppet, Testing & Hadoop
 
How I hack on puppet modules
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modules
 
Intro to vagrant
Intro to vagrantIntro to vagrant
Intro 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 Vagrant
 
Vagrant for real
Vagrant for realVagrant for real
Vagrant for real
 
Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)
 
puppet @techlifecookpad
puppet @techlifecookpadpuppet @techlifecookpad
puppet @techlifecookpad
 
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 introduction for Developers
Vagrant introduction for DevelopersVagrant introduction for Developers
Vagrant introduction for Developers
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
 
Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))
 
Open stack and_vagrant-os-meetup-2015
Open stack and_vagrant-os-meetup-2015Open stack and_vagrant-os-meetup-2015
Open stack and_vagrant-os-meetup-2015
 
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
 
Vagrant and CentOS 7
Vagrant and CentOS 7Vagrant and CentOS 7
Vagrant and CentOS 7
 

Mais de Atlassian

International Women's Day 2020
International Women's Day 2020International Women's Day 2020
International Women's Day 2020Atlassian
 
10 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 202010 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 2020Atlassian
 
Forge App Showcase
Forge App ShowcaseForge App Showcase
Forge App ShowcaseAtlassian
 
Let's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UILet's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UIAtlassian
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge RuntimeAtlassian
 
Forge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceForge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceAtlassian
 
Take Action with Forge Triggers
Take Action with Forge TriggersTake Action with Forge Triggers
Take Action with Forge TriggersAtlassian
 
Observability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeObservability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeAtlassian
 
Trusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelTrusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelAtlassian
 
Designing Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemDesigning Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemAtlassian
 
Forge: Under the Hood
Forge: Under the HoodForge: Under the Hood
Forge: Under the HoodAtlassian
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAtlassian
 
Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginAtlassian
 
Tear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingTear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingAtlassian
 
Nailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterNailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterAtlassian
 
Building Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindBuilding Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindAtlassian
 
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Atlassian
 
Beyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsBeyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsAtlassian
 
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamThe Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamAtlassian
 
Building Apps With Enterprise in Mind
Building Apps With Enterprise in MindBuilding Apps With Enterprise in Mind
Building Apps With Enterprise in MindAtlassian
 

Mais de Atlassian (20)

International Women's Day 2020
International Women's Day 2020International Women's Day 2020
International Women's Day 2020
 
10 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 202010 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 2020
 
Forge App Showcase
Forge App ShowcaseForge App Showcase
Forge App Showcase
 
Let's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UILet's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UI
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge Runtime
 
Forge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceForge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User Experience
 
Take Action with Forge Triggers
Take Action with Forge TriggersTake Action with Forge Triggers
Take Action with Forge Triggers
 
Observability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeObservability and Troubleshooting in Forge
Observability and Troubleshooting in Forge
 
Trusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelTrusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy Model
 
Designing Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemDesigning Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI System
 
Forge: Under the Hood
Forge: Under the HoodForge: Under the Hood
Forge: Under the Hood
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIs
 
Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch Plugin
 
Tear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingTear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the Building
 
Nailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterNailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that Matter
 
Building Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindBuilding Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in Mind
 
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
 
Beyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsBeyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced Teams
 
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamThe Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
 
Building Apps With Enterprise in Mind
Building Apps With Enterprise in MindBuilding Apps With Enterprise in Mind
Building Apps With Enterprise in Mind
 

Último

Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 

Último (20)

Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 

Taking the Friction Out of Ticket Investigation (Standardized Debugging Environments) - Charlie Sharpsteen

  • 1. Standardized Debugging Environments Taking the Friction Out of Ticket Investigation Charlie Sharpsteen Open Source Support Engineer, Puppet Labs
  • 2. What Are We Trying to Improve?
  • 5. Collaboration Across Groups… Support Engineering
  • 6. Collaboration Across Groups… Support Engineering Users
  • 7. Collaboration Across Groups… Support Engineering Users …and Across Environments
  • 8. Collaboration Across Groups… Support Engineering Users …and Across Environments Windows Linux
  • 9. Collaboration Across Groups… Support Engineering Users …and Across Environments Windows OS X Solaris Linux
  • 10. What I cannot create, I do not understand. - Richard Feynmen
  • 12. First Steps • Hand-built VMs
  • 13. First Steps • Hand-built VMs • Manually managed snapshots
  • 14. First Steps • Hand-built VMs • Manually managed snapshots • Hard to scale out and manually manage many VMs
  • 16. Enter Vagrant • A tool that allows us to create and manage many VM instances
  • 17. Enter Vagrant • A tool that allows us to create and manage many VM instances • Manages artifacts required to use multiple guest operating systems • Provisions VMs after creation
  • 18. Enter Vagrant • A tool that allows us to create and manage many VM instances • Manages artifacts required to use multiple guest operating systems • Provisions VMs after creation • Each VM is specified in a plain text file
  • 19. # -*- mode: ruby -*-! # vi: set ft=ruby :! !! # Hashes of box URLs! S3_BOXES = {! :sles_11sp1 => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! :sles_11sp1_nocm => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210- nocm.box',! :fedora_18 => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210.box',! :fedora_18_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! :centos_59 => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210.box',! :centos_59_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! :centos_64_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! :centos_64_fusion_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-fusion503-nocm.box',! :debian_6_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! :debian_7 => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box',! :debian_7_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210- nocm.box',! :ubuntu_1204_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210- nocm.box',! }!! LOCAL_BOXES = {! :centos_64_pe => "~/Data/boxes/centos-6.4-i386-pe.box",! :solaris_10 => '~/Data/boxes/solaris-10u11-i386-vbox4210.box',! :solaris_10_nocm => '~/Data/boxes/solaris-10u11-i386-vbox4210-nocm.box',! }!! BOOTSTRAPS = {! :centos_6 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing EPEL'! wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm! wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm! ! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! :centos_59 => <<-EOS,! # CentOS 5 has some networking problems! /etc/init.d/network restart! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! :ubuntu_1204 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! wget --output-document=/tmp/puppet-repo-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise. deb! dpkg -i /tmp/puppet-repo-precise.deb! apt-get update! apt-get install -y --allow-unauthenticated puppet! fi! EOS! :fedora_18 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! sudo rpm -ivh http://yum.puppetlabs.com/fedora/f18/products/i386/puppetlabs-release-18-7.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! }!! # Shorthand method for setting box URL and name in one shot.! def set_box box, box_url! box.vm.box_url = box_url! # Recover box name from url by returning the last component minus the! # `.box` extension.! box.vm.box = File.basename(box.vm.box_url, File.extname(box.vm.box_url))! e!nd! def share_puppet_source box! e!nd! def share_puppet_modules box! box.vm.share_folder 'puppet-source', '/puppetlabs', "#{ENV['HOME']}/Source/puppetlabs"! e!nd! def provision_box box, manifest! box.vm.provision :puppet do |puppet|! box.vm.share_folder 'puppet-modules', '/usr/share/puppet/modules', 'provisioning/modules'! puppet.pp_path = '/tmp/vagrant-puppet'! puppet.manifests_path = 'provisioning/manifests'! puppet.module_path = 'provisioning/modules'! puppet.manifest_file = manifest! e!nd! end! !! Vagrant::Config.run do |config|! ! config.ssh.forward_x11 = true! config.vm.define :pemaster do |box|! flavor = :centos_64_pe! ! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.40"! box.vm.host_name = 'pemaster.boxnet'! ! end! config.vm.define :peagent do |box|! flavor = :centos_64_pe! ! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.41"! box.vm.host_name = 'peagent.boxnet'! end! !! config.vm.define :puppetmaster do |box|! flavor = :centos_6! ! set_box box, S3_BOXES[:centos_64_nocm]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.20"! ! box.vm.host_name = 'puppetmaster.boxnet'! # NOTE: Share folders, such as Git checkouts of the Puppet source code! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'server.pp'! ! end! config.vm.define :puppetagent do |box|! flavor = :centos_6! ! set_box box, S3_BOXES[:centos_64_nocm]! box.vm.network :hostonly, "192.168.23.21"! ! box.vm.host_name = "puppetagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'agent.pp'! ! end! config.vm.define :centos_59 do |box|! flavor = :centos_59_nocm! ! set_box box, S3_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.22"! ! box.vm.host_name = "centos-59.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[:centos_59]! provision_box box, 'agent.pp'! ! end! config.vm.define :ubuntuagent do |box|! flavor = :ubuntu_1204! ! set_box box, S3_BOXES[:ubuntu_1204_nocm]! box.vm.network :hostonly, "192.168.23.23"! ! box.vm.host_name = "ubuntuagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'agent.pp'! ! end! config.vm.define :solaris_10 do |box|! box.vm.guest = :solaris! flavor = :solaris_10! ! set_box box, LOCAL_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.24"! box.vm.host_name = "solaris-10.boxnet"! ! end! config.vm.define :debianagent do |box|! flavor = :debian_7_nocm! ! set_box box, S3_BOXES[flavor]! The uberVagrantfile
  • 20. # -*- mode: ruby -*-! # vi: set ft=ruby :! !! # Hashes of box URLs! S3_BOXES = {! :sles_11sp1 => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! :sles_11sp1_nocm => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210- nocm.box',! :fedora_18 => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210.box',! :fedora_18_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! :centos_59 => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210.box',! :centos_59_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! :centos_64_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! :centos_64_fusion_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-fusion503-nocm.box',! :debian_6_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! :debian_7 => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box',! :debian_7_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210- nocm.box',! :ubuntu_1204_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210- nocm.box',! }!! LOCAL_BOXES = {! :centos_64_pe => "~/Data/boxes/centos-6.4-i386-pe.box",! :solaris_10 => '~/Data/boxes/solaris-10u11-i386-vbox4210.box',! :solaris_10_nocm => '~/Data/boxes/solaris-10u11-i386-vbox4210-nocm.box',! }!! BOOTSTRAPS = {! :centos_6 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing EPEL'! wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm! wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm! ! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! :centos_59 => <<-EOS,! # CentOS 5 has some networking problems! /etc/init.d/network restart! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! :ubuntu_1204 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! wget --output-document=/tmp/puppet-repo-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise. deb! dpkg -i /tmp/puppet-repo-precise.deb! apt-get update! apt-get install -y --allow-unauthenticated puppet! fi! EOS! :fedora_18 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! sudo rpm -ivh http://yum.puppetlabs.com/fedora/f18/products/i386/puppetlabs-release-18-7.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! }!! # Shorthand method for setting box URL and name in one shot.! def set_box box, box_url! box.vm.box_url = box_url! # Recover box name from url by returning the last component minus the! # `.box` extension.! box.vm.box = File.basename(box.vm.box_url, File.extname(box.vm.box_url))! e!nd! def share_puppet_source box! e!nd! def share_puppet_modules box! box.vm.share_folder 'puppet-source', '/puppetlabs', "#{ENV['HOME']}/Source/puppetlabs"! e!nd! def provision_box box, manifest! box.vm.provision :puppet do |puppet|! box.vm.share_folder 'puppet-modules', '/usr/share/puppet/modules', 'provisioning/modules'! puppet.pp_path = '/tmp/vagrant-puppet'! puppet.manifests_path = 'provisioning/manifests'! puppet.module_path = 'provisioning/modules'! puppet.manifest_file = manifest! e!nd! end! !! Vagrant::Config.run do |config|! ! config.ssh.forward_x11 = true! config.vm.define :pemaster do |box|! flavor = :centos_64_pe! ! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.40"! box.vm.host_name = 'pemaster.boxnet'! ! end! config.vm.define :peagent do |box|! flavor = :centos_64_pe! ! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.41"! box.vm.host_name = 'peagent.boxnet'! end! !! config.vm.define :puppetmaster do |box|! flavor = :centos_6! ! set_box box, S3_BOXES[:centos_64_nocm]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.20"! ! box.vm.host_name = 'puppetmaster.boxnet'! # NOTE: Share folders, such as Git checkouts of the Puppet source code! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'server.pp'! ! end! config.vm.define :puppetagent do |box|! flavor = :centos_6! ! set_box box, S3_BOXES[:centos_64_nocm]! box.vm.network :hostonly, "192.168.23.21"! ! box.vm.host_name = "puppetagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'agent.pp'! ! end! config.vm.define :centos_59 do |box|! flavor = :centos_59_nocm! ! set_box box, S3_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.22"! ! box.vm.host_name = "centos-59.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[:centos_59]! provision_box box, 'agent.pp'! ! end! config.vm.define :ubuntuagent do |box|! flavor = :ubuntu_1204! ! set_box box, S3_BOXES[:ubuntu_1204_nocm]! box.vm.network :hostonly, "192.168.23.23"! ! box.vm.host_name = "ubuntuagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'agent.pp'! ! end! config.vm.define :solaris_10 do |box|! box.vm.guest = :solaris! flavor = :solaris_10! ! set_box box, LOCAL_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.24"! box.vm.host_name = "solaris-10.boxnet"! ! end! config.vm.define :debianagent do |box|! flavor = :debian_7_nocm! ! set_box box, S3_BOXES[flavor]! The uberVagrantfile Data: ! # Hashes of box URLs! S3_BOXES = {! :sles_11sp1 => 'http://puppet-vagrant-boxes. s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! :sles_11sp1_nocm => 'http://puppet-vagrant-boxes. s3.amazonaws.com/sles-11sp1-x64-vbox4210-nocm.box',! :fedora_18 => 'http://puppet-vagrant-boxes. puppetlabs.com/fedora-18-x64-vbox4210.box',! :fedora_18_nocm => 'http://puppet-vagrant-boxes. puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! :centos_59 => 'http://puppet-vagrant-boxes. puppetlabs.com/centos-59-x64-vbox4210.box',! :centos_59_nocm => 'http://puppet-vagrant-boxes. puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! :centos_64_nocm => 'http://puppet-vagrant-boxes. puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! :centos_64_fusion_nocm => 'http://puppet-vagrant-boxes. puppetlabs.com/centos-64-x64-fusion503-nocm.box',! :debian_6_nocm => 'http://puppet-vagrant-boxes. puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! :debian_7 => 'http://puppet-vagrant-boxes. puppetlabs.com/debian-70rc1-x64-vbox4210.box',! :debian_7_nocm => 'http://puppet-vagrant-boxes. puppetlabs.com/debian-70rc1-x64-vbox4210-nocm.box',! :ubuntu_1204_nocm => 'http://puppet-vagrant-boxes. puppetlabs.com/ubuntu-server-12042-x64-vbox4210- nocm.box',! }!
  • 21. # -*- mode: ruby -*-! # vi: set ft=ruby :! !! # Hashes of box URLs! S3_BOXES = {! :sles_11sp1 => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! :sles_11sp1_nocm => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210- nocm.box',! :fedora_18 => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210.box',! :fedora_18_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! :centos_59 => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210.box',! :centos_59_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! :centos_64_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! :centos_64_fusion_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-fusion503-nocm.box',! :debian_6_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! :debian_7 => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box',! :debian_7_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210- nocm.box',! :ubuntu_1204_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210- nocm.box',! }!! LOCAL_BOXES = {! :centos_64_pe => "~/Data/boxes/centos-6.4-i386-pe.box",! :solaris_10 => '~/Data/boxes/solaris-10u11-i386-vbox4210.box',! :solaris_10_nocm => '~/Data/boxes/solaris-10u11-i386-vbox4210-nocm.box',! }!! BOOTSTRAPS = {! :centos_6 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing EPEL'! wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm! wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm! ! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! :centos_59 => <<-EOS,! # CentOS 5 has some networking problems! /etc/init.d/network restart! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! :ubuntu_1204 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! wget --output-document=/tmp/puppet-repo-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise. deb! dpkg -i /tmp/puppet-repo-precise.deb! apt-get update! apt-get install -y --allow-unauthenticated puppet! fi! EOS! :fedora_18 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! sudo rpm -ivh http://yum.puppetlabs.com/fedora/f18/products/i386/puppetlabs-release-18-7.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! }!! # Shorthand method for setting box URL and name in one shot.! def set_box box, box_url! box.vm.box_url = box_url! # Recover box name from url by returning the last component minus the! # `.box` extension.! box.vm.box = File.basename(box.vm.box_url, File.extname(box.vm.box_url))! e!nd! def share_puppet_source box! e!nd! def share_puppet_modules box! box.vm.share_folder 'puppet-source', '/puppetlabs', "#{ENV['HOME']}/Source/puppetlabs"! e!nd! def provision_box box, manifest! box.vm.provision :puppet do |puppet|! box.vm.share_folder 'puppet-modules', '/usr/share/puppet/modules', 'provisioning/modules'! puppet.pp_path = '/tmp/vagrant-puppet'! puppet.manifests_path = 'provisioning/manifests'! puppet.module_path = 'provisioning/modules'! puppet.manifest_file = manifest! e!nd! end! !! Vagrant::Config.run do |config|! ! config.ssh.forward_x11 = true! config.vm.define :pemaster do |box|! flavor = :centos_64_pe! ! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.40"! box.vm.host_name = 'pemaster.boxnet'! ! end! config.vm.define :peagent do |box|! flavor = :centos_64_pe! ! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.41"! box.vm.host_name = 'peagent.boxnet'! end! !! config.vm.define :puppetmaster do |box|! flavor = :centos_6! ! set_box box, S3_BOXES[:centos_64_nocm]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.20"! ! box.vm.host_name = 'puppetmaster.boxnet'! # NOTE: Share folders, such as Git checkouts of the Puppet source code! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'server.pp'! ! end! config.vm.define :puppetagent do |box|! flavor = :centos_6! ! set_box box, S3_BOXES[:centos_64_nocm]! box.vm.network :hostonly, "192.168.23.21"! ! box.vm.host_name = "puppetagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'agent.pp'! ! end! config.vm.define :centos_59 do |box|! flavor = :centos_59_nocm! ! set_box box, S3_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.22"! ! box.vm.host_name = "centos-59.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[:centos_59]! provision_box box, 'agent.pp'! ! end! config.vm.define :ubuntuagent do |box|! flavor = :ubuntu_1204! ! set_box box, S3_BOXES[:ubuntu_1204_nocm]! box.vm.network :hostonly, "192.168.23.23"! ! box.vm.host_name = "ubuntuagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'agent.pp'! ! end! config.vm.define :solaris_10 do |box|! box.vm.guest = :solaris! flavor = :solaris_10! ! set_box box, LOCAL_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.24"! box.vm.host_name = "solaris-10.boxnet"! ! end! config.vm.define :debianagent do |box|! flavor = :debian_7_nocm! ! set_box box, S3_BOXES[flavor]! The uberVagrantfile Custom Provisioners: ! BOOTSTRAPS = {! :centos_6 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing EPEL'! wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release- 6-8.noarch.rpm! wget http://rpms.famillecollet.com/enterprise/remi-release- 6.rpm! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! ! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/ puppetlabs-release-6-6.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! ...! ! def provision_box box, manifest! box.vm.provision :puppet do |puppet|! puppet.pp_path = '/tmp/vagrant-puppet'! puppet.manifests_path = 'provisioning/manifests'! puppet.module_path = 'provisioning/modules'! puppet.manifest_file = manifest! end! end
  • 22. # -*- mode: ruby -*-! # vi: set ft=ruby :! !! # Hashes of box URLs! S3_BOXES = {! :sles_11sp1 => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! :sles_11sp1_nocm => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210- nocm.box',! :fedora_18 => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210.box',! :fedora_18_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! :centos_59 => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210.box',! :centos_59_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! :centos_64_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! :centos_64_fusion_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-fusion503-nocm.box',! :debian_6_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! :debian_7 => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box',! :debian_7_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210- nocm.box',! :ubuntu_1204_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210- nocm.box',! }!! LOCAL_BOXES = {! :centos_64_pe => "~/Data/boxes/centos-6.4-i386-pe.box",! :solaris_10 => '~/Data/boxes/solaris-10u11-i386-vbox4210.box',! :solaris_10_nocm => '~/Data/boxes/solaris-10u11-i386-vbox4210-nocm.box',! }!! BOOTSTRAPS = {! :centos_6 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing EPEL'! wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm! wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm! ! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! :centos_59 => <<-EOS,! # CentOS 5 has some networking problems! /etc/init.d/network restart! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! :ubuntu_1204 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! wget --output-document=/tmp/puppet-repo-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise. deb! dpkg -i /tmp/puppet-repo-precise.deb! apt-get update! apt-get install -y --allow-unauthenticated puppet! fi! EOS! :fedora_18 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! sudo rpm -ivh http://yum.puppetlabs.com/fedora/f18/products/i386/puppetlabs-release-18-7.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! }!! # Shorthand method for setting box URL and name in one shot.! def set_box box, box_url! box.vm.box_url = box_url! # Recover box name from url by returning the last component minus the! # `.box` extension.! box.vm.box = File.basename(box.vm.box_url, File.extname(box.vm.box_url))! e!nd! def share_puppet_source box! e!nd! def share_puppet_modules box! box.vm.share_folder 'puppet-source', '/puppetlabs', "#{ENV['HOME']}/Source/puppetlabs"! e!nd! def provision_box box, manifest! box.vm.provision :puppet do |puppet|! box.vm.share_folder 'puppet-modules', '/usr/share/puppet/modules', 'provisioning/modules'! puppet.pp_path = '/tmp/vagrant-puppet'! puppet.manifests_path = 'provisioning/manifests'! puppet.module_path = 'provisioning/modules'! puppet.manifest_file = manifest! e!nd! end! !! Vagrant::Config.run do |config|! ! config.ssh.forward_x11 = true! config.vm.define :pemaster do |box|! flavor = :centos_64_pe! ! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.40"! box.vm.host_name = 'pemaster.boxnet'! ! end! config.vm.define :peagent do |box|! flavor = :centos_64_pe! ! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.41"! box.vm.host_name = 'peagent.boxnet'! end! !! config.vm.define :puppetmaster do |box|! flavor = :centos_6! ! set_box box, S3_BOXES[:centos_64_nocm]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.20"! ! box.vm.host_name = 'puppetmaster.boxnet'! # NOTE: Share folders, such as Git checkouts of the Puppet source code! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'server.pp'! ! end! config.vm.define :puppetagent do |box|! flavor = :centos_6! ! set_box box, S3_BOXES[:centos_64_nocm]! box.vm.network :hostonly, "192.168.23.21"! ! box.vm.host_name = "puppetagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'agent.pp'! ! end! config.vm.define :centos_59 do |box|! flavor = :centos_59_nocm! ! set_box box, S3_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.22"! ! box.vm.host_name = "centos-59.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[:centos_59]! provision_box box, 'agent.pp'! ! end! config.vm.define :ubuntuagent do |box|! flavor = :ubuntu_1204! ! set_box box, S3_BOXES[:ubuntu_1204_nocm]! box.vm.network :hostonly, "192.168.23.23"! ! box.vm.host_name = "ubuntuagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'agent.pp'! ! end! config.vm.define :solaris_10 do |box|! box.vm.guest = :solaris! flavor = :solaris_10! ! set_box box, LOCAL_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.24"! box.vm.host_name = "solaris-10.boxnet"! ! end! config.vm.define :debianagent do |box|! flavor = :debian_7_nocm! ! set_box box, S3_BOXES[flavor]! The uberVagrantfile VM Definitions ! config.vm.define :pemaster do |box|! flavor = :centos_64_pe! set_box box, LOCAL_BOXES[flavor]! ! # NOTE: Headless or no?! #webnode_config.vm.boot_mode = :gui! ! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.40"! box.vm.host_name = 'pemaster.boxnet'! end! ! config.vm.define :peagent do |box|! flavor = :centos_64_pe! set_box box, LOCAL_BOXES[flavor]! ! # NOTE: Headless or no?! #webnode_config.vm.boot_mode = :gui! ! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.41"! box.vm.host_name = 'peagent.boxnet'! end
  • 23. # -*- mode: ruby -*-! # vi: set ft=ruby :! !! # Hashes of box URLs! S3_BOXES = {! :sles_11sp1 => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210.box',! :sles_11sp1_nocm => 'http://puppet-vagrant-boxes.s3.amazonaws.com/sles-11sp1-x64-vbox4210- nocm.box',! :fedora_18 => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210.box',! :fedora_18_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/fedora-18-x64-vbox4210-nocm.box',! :centos_59 => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210.box',! :centos_59_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-59-x64-vbox4210-nocm.box',! :centos_64_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210-nocm.box',! :centos_64_fusion_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-fusion503-nocm.box',! :debian_6_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-607-x64-vbox4210-nocm.box',! :debian_7 => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210.box',! :debian_7_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/debian-70rc1-x64-vbox4210- nocm.box',! :ubuntu_1204_nocm => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210- nocm.box',! }!! LOCAL_BOXES = {! :centos_64_pe => "~/Data/boxes/centos-6.4-i386-pe.box",! :solaris_10 => '~/Data/boxes/solaris-10u11-i386-vbox4210.box',! :solaris_10_nocm => '~/Data/boxes/solaris-10u11-i386-vbox4210-nocm.box',! }!! BOOTSTRAPS = {! :centos_6 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing EPEL'! wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm! wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm! ! sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! :centos_59 => <<-EOS,! # CentOS 5 has some networking problems! /etc/init.d/network restart! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! echo 'Installing Puppet.'! rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-7.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! :ubuntu_1204 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! wget --output-document=/tmp/puppet-repo-precise.deb http://apt.puppetlabs.com/puppetlabs-release-precise. deb! dpkg -i /tmp/puppet-repo-precise.deb! apt-get update! apt-get install -y --allow-unauthenticated puppet! fi! EOS! :fedora_18 => <<-EOS,! if which puppet > /dev/null 2>&1; then! echo 'Puppet Installed.'! else! sudo rpm -ivh http://yum.puppetlabs.com/fedora/f18/products/i386/puppetlabs-release-18-7.noarch.rpm! yum --nogpgcheck -y install puppet-server! fi! EOS! }!! # Shorthand method for setting box URL and name in one shot.! def set_box box, box_url! box.vm.box_url = box_url! # Recover box name from url by returning the last component minus the! # `.box` extension.! box.vm.box = File.basename(box.vm.box_url, File.extname(box.vm.box_url))! e!nd! def share_puppet_source box! e!nd! def share_puppet_modules box! box.vm.share_folder 'puppet-source', '/puppetlabs', "#{ENV['HOME']}/Source/puppetlabs"! e!nd! def provision_box box, manifest! box.vm.provision :puppet do |puppet|! box.vm.share_folder 'puppet-modules', '/usr/share/puppet/modules', 'provisioning/modules'! puppet.pp_path = '/tmp/vagrant-puppet'! puppet.manifests_path = 'provisioning/manifests'! puppet.module_path = 'provisioning/modules'! puppet.manifest_file = manifest! e!nd! end! !! Vagrant::Config.run do |config|! ! config.ssh.forward_x11 = true! config.vm.define :pemaster do |box|! flavor = :centos_64_pe! ! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.40"! box.vm.host_name = 'pemaster.boxnet'! ! end! config.vm.define :peagent do |box|! flavor = :centos_64_pe! ! set_box box, LOCAL_BOXES[flavor]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.41"! box.vm.host_name = 'peagent.boxnet'! end! !! config.vm.define :puppetmaster do |box|! flavor = :centos_6! ! set_box box, S3_BOXES[:centos_64_nocm]! # NOTE: Headless or no?! ! #webnode_config.vm.boot_mode = :gui! # NOTE: Hostonly _may_ mean no internets if this adapter gets found first!!!! # Check /etc/resolv.conf !! box.vm.network :hostonly, "192.168.23.20"! ! box.vm.host_name = 'puppetmaster.boxnet'! # NOTE: Share folders, such as Git checkouts of the Puppet source code! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'server.pp'! ! end! config.vm.define :puppetagent do |box|! flavor = :centos_6! ! set_box box, S3_BOXES[:centos_64_nocm]! box.vm.network :hostonly, "192.168.23.21"! ! box.vm.host_name = "puppetagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'agent.pp'! ! end! config.vm.define :centos_59 do |box|! flavor = :centos_59_nocm! ! set_box box, S3_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.22"! ! box.vm.host_name = "centos-59.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[:centos_59]! provision_box box, 'agent.pp'! ! end! config.vm.define :ubuntuagent do |box|! flavor = :ubuntu_1204! ! set_box box, S3_BOXES[:ubuntu_1204_nocm]! box.vm.network :hostonly, "192.168.23.23"! ! box.vm.host_name = "ubuntuagent.boxnet"! ! share_puppet_source box! box.vm.provision :shell, :inline => BOOTSTRAPS[flavor]! provision_box box, 'agent.pp'! ! end! config.vm.define :solaris_10 do |box|! box.vm.guest = :solaris! flavor = :solaris_10! ! set_box box, LOCAL_BOXES[flavor]! box.vm.network :hostonly, "192.168.23.24"! box.vm.host_name = "solaris-10.boxnet"! ! end! config.vm.define :debianagent do |box|! flavor = :debian_7_nocm! ! set_box box, S3_BOXES[flavor]! The uberVagrantfile • Maintenance costs increase as more machines are added • Unique to each individual or team • Hard to scale across teams
  • 25. Build Abstractions • Eliminate manual bookkeeping
  • 26. Build Abstractions • Eliminate manual bookkeeping config.vm.define :pemaster do |node|! node.vm.network :hostonly, "192.168.23.40"! end! ! config.vm.define :peagent do |node|! node.vm.network :hostonly, "192.168.23.41"! end
  • 27. Build Abstractions • Eliminate manual bookkeeping config.vm.define :pemaster do |node|! node.vm.network :hostonly, "192.168.23.40"! end! ! config.vm.define :peagent do |node|! node.vm.network :hostonly, "192.168.23.41"! end config.vm.define :pemaster do |node|! node.vm.network :hostonly, auto_network: true! end! ! config.vm.define :peagent do |node|! node.vm.network :hostonly, auto_network: true! end!
  • 28. Build Abstractions • Eliminate manual bookkeeping • Automate repetitive tasks
  • 29. Build Abstractions • Eliminate manual bookkeeping • Automate repetitive tasks config.vm.define :pemaster do |node|! # ...! ! node.vm.provision :pe_bootstrap do |p|! p.role = :master! p.version = '3.3.0'! end! end!
  • 30. Build Abstractions • Eliminate manual bookkeeping • Automate repetitive tasks • Separate data from logic
  • 31. Build Abstractions • Eliminate manual bookkeeping • Automate repetitive tasks • Separate data from logic config.vm.define :pemaster do |node|! node.vm.hostname =! 'pe-330-master.puppetdebug.vlan'! node.vm.box = 'puppetlabs/centos-6.5-64-nocm'! ! node.vm.network :hostonly, auto_network: true! ! node.vm.provision :pe_bootstrap do |p|! p.role = :master! p.version = '3.3.0'! end! end!
  • 32. Build Abstractions • Eliminate manual bookkeeping • Automate repetitive tasks • Separate data from logic ---! vms:! - name: pe-330-master! hostname: pe-330-master.puppetdebug.vlan! box: puppetlabs/centos-6.5-64-nocm! private_networks:! - auto_network: true! provisioners:! - type: pe_bootstrap! role: master! version: 3.3.0!
  • 33. Build Abstractions • Eliminate manual bookkeeping • Automate repetitive tasks • Separate data from logic ---! vms:! - name: pe-330-master! hostname: pe-330-master.puppetdebug.vlan! box: puppetlabs/centos-6.5-64-nocm! roles:! - base! provisioners:! - type: pe_bootstrap! role: master! version: 3.3.0! ! roles:! base:! private_networks:! - auto_network: true!
  • 34. Build Abstractions • Eliminate manual bookkeeping • Automate repetitive tasks • Separate data from logic ---! vms:! - name: pe-330-master! debug-kit: true! box: puppetlabs/centos-6.5-64-nocm! roles:! - base! ! roles:! base:! private_networks:! - auto_network: true!
  • 36. Raw Materials • Which boxes are in use? Do the older boxes still work?
  • 37. Raw Materials • Which boxes are in use? Do the older boxes still work? • How were the boxes created?
  • 38. Raw Materials • Which boxes are in use? Do the older boxes still work? • How were the boxes created?
  • 41. Phased Builds Shared Customizations Base Install
  • 42. Phased Builds Open Source Puppet Enterprise Shared Customizations Base Install
  • 43. Build Server Phased Builds Open Source Puppet Enterprise Shared Customizations Base Install
  • 45. Where We Ended Up • Shared environments enable teams to focus on problem solving
  • 46. Where We Ended Up • Shared environments enable teams to focus on problem solving • New employee on-boarding is easier
  • 47. Where We Ended Up • Shared environments enable teams to focus on problem solving • New employee on-boarding is easier • Company-wide efforts to build and maintain virtual environments are focused instead of scattered
  • 48. Resources • http://www.vagrantup.com/ • https://github.com/adrienthebo/oscar • https://github.com/Sharpie/puppet-debugging-kit • http://www.packer.io/ • https://vagrantcloud.com/puppetlabs