vagrant for devops

18
Vagrant For DevOps Lalatendu Mohanty @lalatenduM

Upload: lalatendu-mohanty

Post on 15-Apr-2017

2.266 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Vagrant For DevOps

Vagrant For DevOpsLalatendu Mohanty

@lalatenduM

Page 2: Vagrant For DevOps

DevOps

What is it?

• It is a culture.

• Filling the gap between developer and operations.

Page 3: Vagrant For DevOps

DevOpsIt aims at establishing a culture and environment where building, testing, and releasing software, can happen rapidly, frequently, and more reliably.

-Wikipedia

It means:

• Use right tools for automation, continuous integration and achieve continuous delivery.

Page 4: Vagrant For DevOps

Vagrant• Create and configure lightweight, reproducible,

and portable development environments.

• A higher-level wrapper around virtualization software such as VirtualBox, VMware, KVM.

• Also wrapper around configuration management software such as Ansible, Chef, Salt, and Puppet.

• Public clouds e.g. AWS, DigitalOcean can be providers too.

Page 5: Vagrant For DevOps

Use Continuos Integration Tools With Vagrant

• Machine provisioning

• Software provisioning

• Configuration Management

Page 6: Vagrant For DevOps

Vagrant :Quick Start

• mkdir centos; cd centos

• $ vagrant init centos/7

• $ vagrant up

OR

• $ vagrant up --provider <PROVIDER>

• $vagrant ssh

* These steps going to stay the same irrespective of OS and providers.

Page 7: Vagrant For DevOps

Understanding Vagrant• Check the files in current directory $ ls -al total 8 drwxr-xr-x 4 lmohanty staff 136 Apr 23 01:04 . drwxr-xr-x 14 lmohanty staff 476 Apr 22 23:32 .. drwxr-xr-x 3 lmohanty staff 102 Apr 22 23:36 .vagrant -rw-r--r-- 1 lmohanty staff 3178 Apr 23 01:04 Vagrantfile

$ tree .vagrant/ .vagrant/ └── machines └── default └── virtualbox ├── action_provision ├── action_set_name ├── creator_uid ├── id ├── index_uuid ├── private_key └── synced_folders

Page 8: Vagrant For DevOps

VagrantfileVagrant.configure(2) do |config| config.vm.box = “centos/7"

# config.vm.network "forwarded_port", guest: 80, host: 8080

# config.vm.network "private_network", ip: “192.168.33.10"

# config.vm.network "public_network"

# config.vm.synced_folder "../data", "/vagrant_data"

# config.vm.provider "virtualbox" do |vb| # # Display the VirtualBox GUI when booting the machine # vb.gui = true # # # Customize CPU # v.cpus = 2 # # # Customize the amount of memory on the VM: # vb.memory = "1024" # end #

# config.vm.provision "shell", inline: <<-SHELL # sudo yum update -y # sudo yum install -y docker # SHELL end

Page 9: Vagrant For DevOps

Multi-machine Environment• Setup multiple machines with just one “$ vagrant up”

command.

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

Page 10: Vagrant For DevOps

Using Configuration management Software

• We have Vagrant provisioners for Puppet, Chef, Ansible, CFEngine etc

Vagrant.configure("2") do |config|

# Run Ansible from the Host

config.vm.provision "ansible" do |ansible|

ansible.playbook = "playbook.yml"

end

end

Page 11: Vagrant For DevOps

Debugging• VAGRANT_LOG environment variable for the desired log level name.

• Log levels are : debug (loud), info (normal), warn (quiet), and error (very quiet)

$ VAGRANT_LOG=info vagrant up

OR

$ set VAGRANT_LOG=info

$ vagrant up

OR

$ vagrant up --info

Page 12: Vagrant For DevOps

Vagrant Plugins

• Add additional features or change default behaviour.

• It is a Ruby gem. Vagrant is written in Ruby.

• List : https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins

Page 13: Vagrant For DevOps

Using DigitalOcean as a Provider

• Install Vagrant plugin vagrant-digitalocean

• https://github.com/devopsgroup-io/vagrant-digitalocean

• Demo

Page 14: Vagrant For DevOps

VagrantboxA Vagrantbox is a tarred, gzip file containing the following:

• Vagrantfile

• The information from this will be merged into your Vagrantfile that is created when you run vagrant init boxname in a folder.

• box-disk.vmd (For Virtualbox)

• The box-disk.vmdk is the virtual machine image.

• box.of

• The box.ovf defines the virtual hardware for the box.

• metadata.son

• The metadata.json tells vagrant what provider the box works with.

Page 15: Vagrant For DevOps

Tools To Create Vagrantbox • You can use tools like packer.io, imagefactory etc.

• You can build a Vagrantbox manually

• Or use “vagrant package” command for Virtualbox.

• Modify base boxes and reuse them.

• Also there is vagrant-mutate

• https://github.com/sciurus/vagrant-mutate

Page 16: Vagrant For DevOps

DevOps Workflow

• Use same configuration management code as operations team in Vagrantfile.

• More automation means, more chance of parity between development, testing and operations.

• Create a environment where developers and QA can contribute to the automation and configuration management code.

Page 17: Vagrant For DevOps

Future• Otto

• The next generation tool from Hashicorp which uses Vagrant and other ecosystem tools.

• But It is specially designed for micro services.

• Knows how to install and configure service dependencies for development and deployment.

• otto dev : will create the development environment.

• otto infra, otto build, and otto deploy : will launches a complete infrastructure, builds your application, and deploys it

Page 18: Vagrant For DevOps

References• http://www.slideshare.net/nemo-mulodo/devops2-

vagrant-mosg

• https://blog.engineyard.com/2014/building-a-vagrant-box

• https://www.vagrantup.com/docs/boxes/format.html

• http://unix.stackexchange.com/questions/222427/how-to-create-custom-vagrant-box-from-libvirt-kvm-instance

• https://www.hashicorp.com/blog/otto.html