rackspace hack night - vagrant & packer
DESCRIPTION
TRANSCRIPT
Vagrant & Packer RAX Hack Night
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
So…
I automated *all* the things
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
So…
Feel quite smug about it
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
So…
Got my environments in order
DEV QA PROD
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
So…
All is good
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
So…
OR IS IT?!?!
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
So…
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
So…
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
So… the problem
How do you get your DEVs mobile?
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
So… the problem
Have a dev portable platform!that is the *SAME* everywhere
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
So… the problem
Why the hell they all work from Starbucks?!?!?
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Vagrant!
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Vagrant!
You have a base Box VM
Attach to chef or Puppet!Add some script sprinkles
or something else
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Base Box
You have a base Box
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Base Box
Where can I run this Base Box?VirtualBox!
VMWare Fusion!VMWare Workstation
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Base Box
Where can I run this Base Box?Rackspace Cloud!
Amazon!OpenStack
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Base Box
As simple as 1…2…3…vagrant box add $title $BOX_URL
vagrant init $title
vagrant up
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Plugins!
ansible
vagrant-‐berkshelf
vagrant-‐librarian-‐puppet
vagrant-‐lxc
vagrant-‐salt
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Vagrantfile
Defines what Vagrant will do
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
VagrantfileVagrant.configure("2") do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.network :private_network, ip: "192.168.33.10"
config.vm.synced_folder "../data", "/vagrant_data"
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "-‐-‐memory", "1024"]
end
end
!
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
VagrantfileVagrant.configure("2") do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.network :private_network, ip: "192.168.33.10"
config.vm.provision :puppet do |puppet|
puppet.manifests_path = "manifests"
puppet.manifest_file = "init.pp"
end
end
!!
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Taking this to 11!
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Taking this to 11!Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "echo Hello"
config.vm.define "web" do |web|
web.vm.box = "apache"
end
config.vm.define "db" do |db|
db.vm.box = "mysql"
end
end
!!
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Taking this to 11!
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
And now…
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
And now…
Packer!
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer
Do your GMs RIGHT
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
PackerAdd that Puppet!you always!wanted
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer
From a single config file
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer
Deploy EVERYWHERE
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer
Amazon AWS!Digital Ocean!
OpenStack!VMWare
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer{
"builders": [{
"type": "amazon-‐ebs",
"access_key": "YOUR KEY HERE",
"secret_key": "YOUR SECRET KEY HERE",
"region": "us-‐east-‐1",
"source_ami": "ami-‐de0d9eb7",
"instance_type": "t1.micro",
"ssh_username": "ubuntu",
"ami_name": "packer-‐example {{timestamp}}"
}]
}
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer$ packer build example.json ==> amazon-‐ebs: amazon-‐ebs output will be in this color. ==> amazon-‐ebs: Creating temporary keypair for this instance... ==> amazon-‐ebs: Creating temporary security group for this instance... ==> amazon-‐ebs: Authorizing SSH access on the temporary security group... ==> amazon-‐ebs: Launching a source AWS instance... ==> amazon-‐ebs: Waiting for instance to become ready... ==> amazon-‐ebs: Connecting to the instance via SSH... ==> amazon-‐ebs: Stopping the source instance... ==> amazon-‐ebs: Waiting for the instance to stop... ==> amazon-‐ebs: Creating the AMI: packer-‐example 1371856345 ==> amazon-‐ebs: AMI: ami-‐19601070 ==> amazon-‐ebs: Waiting for AMI to become ready... ==> amazon-‐ebs: Terminating the source AWS instance... ==> amazon-‐ebs: Deleting temporary security group... ==> amazon-‐ebs: Deleting temporary keypair... ==> amazon-‐ebs: Build finished. !==> Builds finished. The artifacts of successful builds are: -‐-‐> amazon-‐ebs: AMIs were created: !us-‐east-‐1: ami-‐19601070
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer
Deploy to more than one!provider at the same time!using the “builders” array
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer$ packer build example.json ==> amazon-‐ebs: amazon-‐ebs output will be in this color. ==> digitalocean: digitalocean output will be in this color. !==> digitalocean: Creating temporary ssh key for droplet... ==> amazon-‐ebs: Creating temporary keypair for this instance... ==> amazon-‐ebs: Creating temporary security group for this instance... ==> digitalocean: Creating droplet... ==> amazon-‐ebs: Authorizing SSH access on the temporary security group... ==> amazon-‐ebs: Launching a source AWS instance... ==> digitalocean: Waiting for droplet to become active... ==> amazon-‐ebs: Waiting for instance to become ready... ==> digitalocean: Connecting to the droplet via SSH... ==> amazon-‐ebs: Connecting to the instance via SSH... ... ==> Builds finished. The artifacts of successful builds are: -‐-‐> amazon-‐ebs: AMIs were created: !us-‐east-‐1: ami-‐376d1d5e -‐-‐> digitalocean: A snapshot was created: packer-‐1371870364
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer
Also deploy to Vagrant!using the “post-processors”!
array
RACKSPACE® HOSTING | WWW.RACKSPACE.CO.UK
Packer
{
"builders": [...],
! "provisioners": [...],
! "post-‐processors": ["vagrant"]
}
!39RACKSPACE® HOSTING | © RACKSPACE US, INC. | RACKSPACE® AND FANATICAL SUPPORT® ARE SERVICE MARKS OF RACKSPACE US, INC. REGISTERED IN THE UNITED STATES AND OTHER COUNTRIES. | WWW.RACKSPACE.CO.UK
RACKSPACE® HOSTING | 5 MILLINGTON ROAD | HAYES, UNITED KINGDOM UB3 4AZ UK SALES: +44 (0)20 8712 6507 | UK SUPPORT: 0800 988 0300 | WWW.RACKSPACE.CO.UK