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

122
Living in a Multi-Provider World Friday, August 23, 13
  • date post

    18-Oct-2014
  • Category

    Technology

  • view

    7.064
  • download

    1

description

"Multi-Provider Vagrant: AWS, VMware & More" by Mitchell Hashimoto, Founder, HashiCorp. Presentation Overview: VirtualBox, VMware, AWS, RackSpace, and more. You get all the benefits of Vagrant with the power of working in whatever environment you need to. This capability unlocks entirely new use cases for Vagrant that can help better optimize the entire process of developing and testing Puppet code. In this talk, you'll learn how about the new multi-provider features, why they exist, and how they can be used. Your life will never be the same again. Speaker Bio: Mitchell is best known as the creator of Vagrant and founder of HashiCorp. He is also an O'Reilly author and professional speaker. He is one of the top GitHub users by followers, activity, and contributions. "Automation obsessed," Mitchell strives to build elegant, powerful DevOps tools at HashiCorp that automate anything and everything. Mitchell is probably the only person in the world with deep knowledge of most virtualization hypervisors.

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

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