Download - Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Transcript
Page 1: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Living in a Multi-Provider World

Friday, August 23, 13

Page 2: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

I’m Mitchell HashimotoAlso known as @mitchellh

Friday, August 23, 13

Page 3: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

I build toolshttp://hashicorp.com

Friday, August 23, 13

Page 4: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagranthttp://www.vagrantup.com

Friday, August 23, 13

Page 5: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Packerhttp://www.packer.io

Friday, August 23, 13

Page 6: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

http://vagrantup.com

Friday, August 23, 13

Page 7: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

I think you know what this nowadays...

Friday, August 23, 13

Page 8: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

SUCCESS!

Friday, August 23, 13

Page 9: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

You probably should really be using this nowadays to be working with and testing Puppet modules...

Friday, August 23, 13

Page 10: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

State of the Vagrant

Friday, August 23, 13

Page 11: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrants are still struggling to find work, shelter, and food.

Friday, August 23, 13

Page 12: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Friday, August 23, 13

Page 13: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrants are still struggling to find work, shelter, and food.

Friday, August 23, 13

Page 14: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant!

Friday, August 23, 13

Page 15: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Mature, stable, proven.Development since Jan 2010.Used by thousands of companies.

Friday, August 23, 13

Page 16: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Friday, August 23, 13

Page 17: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Friday, August 23, 13

Page 18: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant

Friday, August 23, 13

Page 19: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Puppet

Friday, August 23, 13

Page 20: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Friday, August 23, 13

Page 21: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Create and Manage Virtualized Development Environments

Mitchell Hashimoto

VagrantUp and Running

http://hashi.co/vagrant-book

Friday, August 23, 13

Page 22: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Releases in 2013: 14

Friday, August 23, 13

Page 23: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant 1.1+ was finally released in March. A year in development.

Friday, August 23, 13

Page 24: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

SUCCESS!

Friday, August 23, 13

Page 25: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Things are good.

Friday, August 23, 13

Page 26: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Things are getting

BETTER!

Friday, August 23, 13

Page 27: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant 1.1+

Friday, August 23, 13

Page 28: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

I hear you like VirtualBox...

Friday, August 23, 13

Page 29: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Providers.

Friday, August 23, 13

Page 30: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

a.k.a.No more VirtualBox.

Friday, August 23, 13

Page 31: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

(Don’t worry, Vagrant still works with VirtualBox)

Friday, August 23, 13

Page 32: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

BUT NOW IT WORKS WITH:

AWS, DigitalOcean, HP Cloud, Joyent, KVM, libvirt, lxc, OpenStack, Rackspace, VMware.

Friday, August 23, 13

Page 33: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Mother of God...

Friday, August 23, 13

Page 34: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant 1.1: March 2013

Friday, August 23, 13

Page 35: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

We’re now on 1.2.7.(14 releases later)

Friday, August 23, 13

Page 36: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

The same Vagrant you know and love, butso much better.

Friday, August 23, 13

Page 37: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Backwards Compatible*Just “vagrant up” your 1.0.x Vagrantfiles.

* Plugins from 1.0.x aren’t backwards compatible.

Friday, August 23, 13

Page 38: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

VAGRANT_API_VERSION = “2”

Vagrant.configure(VAGRANT_API_VERSION) do |config| config.vm.box = “precise64”end

A Vagrantfile

Friday, August 23, 13

Page 39: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Installer only.“gem install” folks living in the past, take note.

http://downloads.vagrantup.com

Friday, August 23, 13

Page 40: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Path to 2.0Guaranteed Vagrantfile stability, widespread use.

Friday, August 23, 13

Page 41: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

But 1.2.x is quite goodThe core is much stronger, many subtle issues fixed, latest support for various host/guest combos, NFS is way better, etc.

Friday, August 23, 13

Page 42: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant Future

Friday, August 23, 13

Page 43: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Going to get way better.This is the part where I tease you.

Friday, August 23, 13

Page 44: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Windows VM support“vagrant up” Windows VMs with ease.

Friday, August 23, 13

Page 45: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Box versioningNo more “am I using the latest box?”

Friday, August 23, 13

Page 46: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Docker ProvisionerYes, I’ll take a RabbitMQ with a side of Nginx.

Friday, August 23, 13

Page 47: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Superpowered “package”Powered by Packer, to be discussed.

Friday, August 23, 13

Page 48: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Automated box buildingPACKER!

Friday, August 23, 13

Page 49: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Other stuff...I think I’ve said enough. Get excited.

Friday, August 23, 13

Page 50: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Multi-ProviderWhat does it mean? Why?

Friday, August 23, 13

Page 51: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

A provider manages compute resources* for Vagrant machines.

* But also sets up networking and some basic storage too.

Friday, August 23, 13

Page 52: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant 1.0: VirtualBox was the only “provider”

Friday, August 23, 13

Page 53: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Why?Because you didn’t love VirtualBox hard enough.

Friday, August 23, 13

Page 54: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

VirtualBox isn’t great for every situation.

Friday, August 23, 13

Page 55: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Honestly: VirtualBox is bad.* Its okay, until you realize almost anything else is way better.

Friday, August 23, 13

Page 56: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Multiple providers enable Vagrant to do new and awesome things.

Friday, August 23, 13

Page 57: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

People love Vagrant for the workflow. Not for VirtualBox.

Friday, August 23, 13

Page 58: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Other providers let you have that workflow in an environment that works best for you.

Friday, August 23, 13

Page 59: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

New use cases...Vagrant where Vagrant has never gone before.

Friday, August 23, 13

Page 60: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Continuous IntegrationAWS, LXC, etc. Fantastic.

Friday, August 23, 13

Page 61: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Develop locally. Test remotely.Work in VirtualBox. Test in AWS (more prod-like).

Friday, August 23, 13

Page 62: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant in VagrantVMware outside. LXC inside. Etcetera.

Friday, August 23, 13

Page 63: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Corporate EnvironmentsMaximize that VMware investment.

Friday, August 23, 13

Page 64: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

etc...That was just a taste.

Friday, August 23, 13

Page 65: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Multi-ProviderHow do I use it?

Friday, August 23, 13

Page 66: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

vagrant up --provider=fooWhere foo is “vmware_fusion”, “aws”, etc.

Friday, August 23, 13

Page 67: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Same Vagrantfile,multiple providers.Pretty magical once you see it.

Friday, August 23, 13

Page 68: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant.configure(“2”) do |config| config.vm.box = “precise64”end

A Vagrantfile

Friday, August 23, 13

Page 69: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

$ vagrant box add precise64 \ http://files.vagrantup.com/precise64.box...

$ vagrant box add precise64 \ http://files.vagrantup.com/precise64_vmware_fusion.box...

Some Boxes

Friday, August 23, 13

Page 70: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

$ vagrant up --provider=virtualbox...

OR$ vagrant up --provider=vmware_fusion...

Up in VirtualBox or VMware

Friday, August 23, 13

Page 71: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

It’s that easy.

Friday, August 23, 13

Page 72: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Best effort.Not every provider can satisfy every Vagrant abstraction, but it won’t fail if it can’t.

Example: AWS networking doesn’t map well to Vagrant networking.

Vagrant + AWS will just ignore networking configurations. Not error. It’ll make a “best effort” to work.

Friday, August 23, 13

Page 73: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

BoxesThey’re now tied to providers.

Friday, August 23, 13

Page 74: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

$ vagrant box listcentos (virtualbox)precise64 (aws)precise64 (virtualbox)precise64 (vmware_fusion)

Tied to a Provider

Friday, August 23, 13

Page 75: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

You need a box for each provider.Packer to the rescue!

Friday, August 23, 13

Page 76: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

VirtualBox: OVF exportVMware: VMX exportLXC: rootfs tarballAWS: Metadata (AMI info)

What’s in a box?

It varies by provider. Actually, anything can be in a box. The provider is responsible for reading and verifying structure.

Friday, August 23, 13

Page 77: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Provider-Specific ConfigThe full power of the provider, if you need it.

Abstractions are nice, but sometimes you want to take advantage of specific properties of a provider. For example, AWS can do things VMware can’t, and vice versa.

Provider-specific config lets you do that.

Friday, August 23, 13

Page 78: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant.configure(“2”) do |config| config.vm.box = “precise64”

config.vm.provider “virtualbox” do |v| v.customize [“modifyvm”, :id, “--memory”, “2048”] end

config.vm.provider “vmware_fusion” do |v| v.vmx[“memsize”] = “2048” endend

Example: Setting Memory

Friday, August 23, 13

Page 79: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant.configure(“2”) do |config| config.vm.box = “precise64”

config.vm.provider “virtualbox” do |v| v.customize [“modifyvm”, :id, “--memory”, “2048”] end

config.vm.provider “vmware_fusion” do |v| v.vmx[“memsize”] = “2048” endend

Example: Setting Memory

Friday, August 23, 13

Page 80: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Vagrant.configure(“2”) do |config| config.vm.box = “precise64”

config.vm.provider “virtualbox” do |v| v.customize [“modifyvm”, :id, “--memory”, “2048”] end

config.vm.provider “vmware_fusion” do |v| v.vmx[“memsize”] = “2048” endend

Example: Setting Memory

Friday, August 23, 13

Page 81: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

PowerfulA place to expose full capabilities of underlying providers.

Friday, August 23, 13

Page 82: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

PortableEven if the user doesn’t have that provider installed, the Vagrantfile will still work.

Friday, August 23, 13

Page 83: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Clear PurposeIt makes it clear that that configuration applies ONLY to specific providers.

Friday, August 23, 13

Page 84: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Totally OptionalJust use a normal Vagrantfile if you don’t care.This is for power users.

Friday, August 23, 13

Page 85: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

That’s it for providers.Same powerful workflow, clean abstractions, uncompromised flexibility.

Friday, August 23, 13

Page 86: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Real world: People usually choose one provider and stick with it. The important part is you now have choice.

Friday, August 23, 13

Page 87: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

PackerFriday, August 23, 13

Page 88: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Automatically create machine images for multiple platforms from a single source config

Friday, August 23, 13

Page 89: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Friday, August 23, 13

Page 90: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Friday, August 23, 13

Page 91: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Machine image: A single deployable unit that contains a pre-configured OS and software.

Friday, August 23, 13

Page 92: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

AWS: AMIVMware: VMX + disksVirtualBox: OVF + disksDigitalOcean: Snapshots

Friday, August 23, 13

Page 93: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Useful on its own, without Vagrant. But also very useful with Vagrant.

Friday, August 23, 13

Page 94: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Production and dev are different providers.

Case One

Friday, August 23, 13

Page 95: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

“vagrant up” takes too long.

Case Two

Friday, August 23, 13

Page 96: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Multi-provider Vagrant, but want identical images.

Case Three

Friday, August 23, 13

Page 97: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Packer images solve these three cases (and way more).

Friday, August 23, 13

Page 98: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Ew... Images.The anti-image stigma

Friday, August 23, 13

Page 99: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

DevOps has historically been against machine images.

Friday, August 23, 13

Page 100: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Important to understand why DevOps has historically been against machine images.

Friday, August 23, 13

Page 101: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Golden images used to be the way.

Friday, August 23, 13

Page 102: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Quarterly, unchanged, blessed image.

Friday, August 23, 13

Page 103: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Getting any changes (ops or dev) in was slow and frustrating.

Friday, August 23, 13

Page 104: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Necessary evil while tooling wasn’t as good as it is today.

Friday, August 23, 13

Page 105: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

With modern config management, easy to simply ignore images.

Friday, August 23, 13

Page 106: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Machine images also have a ton of benefits.

Friday, August 23, 13

Page 107: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Super fast infrastructure deployment.

Friday, August 23, 13

Page 108: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Multi-cloud portability

Friday, August 23, 13

Page 109: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Stability and Testability

Friday, August 23, 13

Page 110: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

A Modern ToolEmbrace best practices.

Friday, August 23, 13

Page 111: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Packer brings all the benefits of machine images without the downsides.

Friday, August 23, 13

Page 112: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

AutomationNo human interaction. Great for CI.

Friday, August 23, 13

Page 113: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Config managementUse Puppet to configure the image, run Puppet after it boots still. Lose nothing.

Friday, August 23, 13

Page 114: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

RepeatabilityTemplate goes into version control. Image creation knowledge is now in code.

Friday, August 23, 13

Page 115: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

ExampleDocker-ready AMI

Friday, August 23, 13

Page 116: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Template{ "variables": { "aws_access_key": "", "aws_secret_key": "" },

Friday, August 23, 13

Page 117: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Template "builders": [{ "type": "amazon-ebs", "access_key": "{{user `aws_access_key`}}", "secret_key": "{{user `aws_secret_key` }}", "region": "us-east-1", "source_ami": "ami-23d9a94a", "instance_type": "m1.small", "ssh_username": "ubuntu", "ami_name": "packer-docker {{timestamp}}" }],

Friday, August 23, 13

Page 118: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Template "provisioners": [{ "type": "shell", "scripts": [ "scripts/kernel.sh", "scripts/docker.sh" ] }]}

Friday, August 23, 13

Page 119: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

BUILD!$ packer build \ -var ‘aws_access_key=YOUR KEY’ \ -var ‘aws_secret_key=YOUR SECRET’ \ template.json...

Friday, August 23, 13

Page 120: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

A few minutes later...

Friday, August 23, 13

Page 121: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Easiest AMI creation ever? Just the beginning.

Friday, August 23, 13

Page 122: Multi-Provider Vagrant: AWS, VMware & More - PuppetConf 2013

Thank you.

vagrantup.com packer.io

Friday, August 23, 13