43
VAGRANT 3rd WEEK SATURDAY, JULY 06, 2013 – SUNDAY, JULY 07, 2013 GEEK ACADEMY 2013

Geeky Academy Week 3 :: Vagrant + Puppet

Embed Size (px)

DESCRIPTION

Geeky Academy Week 3 :: Vagrant + Puppet - Vagrant 101 - Vagrant 201 - Vagrant 301

Citation preview

Page 1: Geeky Academy Week 3 :: Vagrant + Puppet

VAGRANT

3rd WEEKSATURDAY, JULY 06, 2013 – SUNDAY, JULY 07, 2013

GEEK ACADEMY 2013

Page 2: Geeky Academy Week 3 :: Vagrant + Puppet

INSTRUCTOR TEAMTAVEE SOMKIAT THAWATCHAI

Tavee (Vee) Khunbida Somkiat (Pui) Puisungnuen Thawatchai (Boy) JongsuwanpaisanSiam Chamnan Kit

[email protected]

Siam Chamnan Kit

[email protected]

Siam Chamnan Kit

[email protected]

Page 3: Geeky Academy Week 3 :: Vagrant + Puppet
Page 4: Geeky Academy Week 3 :: Vagrant + Puppet

What Vagrant ?

ohttp://www.vagrantup.com/oBased on VirtualBox and RubyoManage VM with Simple Command lineoRun on

oWindowsoLinuxoMac OS

Page 5: Geeky Academy Week 3 :: Vagrant + Puppet

VAGRANT 101

GEEK ACADEMY 2013

Page 6: Geeky Academy Week 3 :: Vagrant + Puppet

Simple Command Line

$ gem install vagrant$ vagrant box add base <box url>$ vagrant init$ vagrant up

Page 7: Geeky Academy Week 3 :: Vagrant + Puppet

Step 1 :: Installation with Ruby Gem

$ gem install vagrant

Page 8: Geeky Academy Week 3 :: Vagrant + Puppet

Step 2 :: Add Base Box

$ vagrant box add base http://files.vagrantup.com/precise32.box

…….[vagrant] Downloading with Vagrant::Downloaders::File...[vagrant] Copying box to temporary location...[vagrant] Extracting box...[vagrant] Verifying box...[vagrant] Cleaning up downloaded box...

Page 9: Geeky Academy Week 3 :: Vagrant + Puppet

Step 2.1 :: Where is my box ?

ohttp://www.vagrantbox.es/

Page 10: Geeky Academy Week 3 :: Vagrant + Puppet

Step 3 :: Configuration

$ vagrant init

…..A `Vagrantfile` has been placed in this directory. You

are nowready to `vagrant up` your first virtual environment!

Please readthe comments in the Vagrantfile as well as

documentation on`vagrantup.com` for more information on using Vagrant.

Page 11: Geeky Academy Week 3 :: Vagrant + Puppet

Vagrantfile

Vagrant::Config.run do |config|

config.vm.box = "base“

end

Page 12: Geeky Academy Week 3 :: Vagrant + Puppet

Step 4 :: Boot

$ vagrant up

….[default] Importing base box 'base'...[default] Matching MAC address for NAT networking...[default] Clearing any previously set forwarded ports...[default] Fixed port collision for 22 => 2222. Now on port 2200.[default] Forwarding ports...[default] -- 22 => 2200 (adapter 1)[default] Creating shared folders metadata...[default] Clearing any previously set network interfaces...[default] Booting VM...[default] Waiting for VM to boot. This can take a few minutes.

Page 13: Geeky Academy Week 3 :: Vagrant + Puppet

Ready to SSH

User=vagrantPassword=vagrant

Page 14: Geeky Academy Week 3 :: Vagrant + Puppet

Optional Command

$ vagrant status$ vagrant halt$ vagrant destroy$ vagrant reload$ vagrant provision$ vagrant suspend$ vagrant resume

Page 15: Geeky Academy Week 3 :: Vagrant + Puppet

Summary for 101

oReduce setup timeoSimpleoSelf-serviceoConsistencyoRepeat

Page 16: Geeky Academy Week 3 :: Vagrant + Puppet

VAGRANT 201

GEEK ACADEMY 2013

https://github.com/up1/geeky_devops

Page 17: Geeky Academy Week 3 :: Vagrant + Puppet

Working with Vagrantfile

oSpecified base boxoNetwork ConfigurationoSharing FolderoMultiple VM

Page 18: Geeky Academy Week 3 :: Vagrant + Puppet

Specified Base Box

Vagrant::Config.run do |config| config.vm.box = "lucid32“

config.vm.box_url = "http://files.vagrantup.com/lucid32.box"

config.vm.box_url = "c:\\demo-geeky\\lucid32.box"

end

Page 19: Geeky Academy Week 3 :: Vagrant + Puppet

Network Configuration

Vagrant::Config.run do |config| config.vm.network :hostonly,

"33.33.33.10"

end

Page 20: Geeky Academy Week 3 :: Vagrant + Puppet

Sharing Folder

Vagrant::Config.run do |config| config.vm.share_folder "foo", "/guest/path",

"/host/path"

end

Path on VM Path on Local

Page 21: Geeky Academy Week 3 :: Vagrant + Puppet

Sharing Folder

Vagrant::Config.run do |config|

config.vm.share_folder "work", "/var/www", "./webapp”

end

Page 22: Geeky Academy Week 3 :: Vagrant + Puppet

Multiple VM in Stack

oWeb ServeroApplication ServeroDatabase ServeroCaching ServeroMessaging Server

Page 23: Geeky Academy Week 3 :: Vagrant + Puppet

Web Server and DB ServerVagrant::Config.run do |config|

config.vm.define :web do |web_config| web_config.vm.host_name = "web01.internal" web_config.vm.network :hostonly,

"192.168.0.100" end

config.vm.define :db do |db_config| db_config.vm.host_name = "db01.internal" db_config.vm.network :hostonly, "192.168.0.101" end

end

Page 24: Geeky Academy Week 3 :: Vagrant + Puppet

DEMO MORE

oFlexible configurationo# of ServeroHostnameoManage IP

Page 25: Geeky Academy Week 3 :: Vagrant + Puppet

DEMO MOREoWeb Server

oweb-01.vagrant.internal 33.33.33.11 oweb-02.vagrant.internal 33.33.33.12

oDB Serverodb-01.vagrant.internal 33.33.33.21

Page 26: Geeky Academy Week 3 :: Vagrant + Puppet

Serversnodes = { 'web' => [2, 10], 'db' => [1, 20],}

Page 27: Geeky Academy Week 3 :: Vagrant + Puppet

Create Serversnodes.each do |prefix, (count, ip_start)| count.times do |i|

hostname = "%s-%02d" % [prefix, (i+1)]

config.vm.define "#{hostname}" do |box|

box.vm.host_name = "#{hostname}.vagrant.internal"

box.vm.network :hostonly, "33.33.33.#{ip_start+i}“

end

endend

Page 28: Geeky Academy Week 3 :: Vagrant + Puppet

VAGRANT 301

GEEK ACADEMY 2013

Page 29: Geeky Academy Week 3 :: Vagrant + Puppet

Vagrant with Puppet

ohttps://puppetlabs.comoConfiguration management with CodeoRubyoRepeatable

Page 30: Geeky Academy Week 3 :: Vagrant + Puppet

Demo :: Install all in one

oManage package with Puppeto Javao Apache Tomcato Rediso RabbitMQ

https://github.com/up1/geeky_devopsdemo-puppet

Page 31: Geeky Academy Week 3 :: Vagrant + Puppet

Structure of Puppet

opuppetomanifests/default.ppomodules

o javaomanifests/init.pp

otomcatomanifests/init.pp

oredisomanifests/init.pp

orabbitMQomanifests/init.pp

Starting point

Page 32: Geeky Academy Week 3 :: Vagrant + Puppet

Vagrantfile

config.vm.provision :puppet do |puppet|

puppet.manifests_path = "puppet/manifests"

puppet.manifest_file = "default.pp"puppet.module_path = "puppet/modules"

end

Vagrant provision

Starting point

Page 33: Geeky Academy Week 3 :: Vagrant + Puppet

Default.pp

include bootstrap include redisinclude javainclude tomcatinclude rabbitmq

Step to execute modules

Page 34: Geeky Academy Week 3 :: Vagrant + Puppet

Structure of Puppet

opuppetomanifests/default.ppomodules

o javaomanifests/init.pp

otomcatomanifests/init.pp

oredisomanifests/init.pp

orabbitMQomanifests/init.pp

Starting point each module

Page 35: Geeky Academy Week 3 :: Vagrant + Puppet

Init.pp :: Java

class java {package { "openjdk-7-jdk":

ensure => installed,require => Exec['apt-get update']

}}

Page 36: Geeky Academy Week 3 :: Vagrant + Puppet

Init.pp :: Package Apache Tomcat

class tomcat { package { "tomcat6": ensure => installed, require => Package['openjdk-7-jdk'], } package { "tomcat6-admin": ensure => installed, require => Package['tomcat6'], }

}

Page 37: Geeky Academy Week 3 :: Vagrant + Puppet

Init.pp :: Service Apache Tomcat

class tomcat {

service { "tomcat6": ensure => running, require => Package['tomcat6'], subscribe => File["tomcat-users.xml"] }

}

Page 38: Geeky Academy Week 3 :: Vagrant + Puppet

Init.pp :: Tomcat-users.xml

class tomcat {

file { "tomcat-users.xml": owner => 'root', path => '/etc/tomcat6/tomcat-users.xml', require => Package['tomcat6'], notify => Service['tomcat6'], content => template( '/path/tomcat/templates/tomcat-

users.xml.erb') }

}

Page 39: Geeky Academy Week 3 :: Vagrant + Puppet

Tomcat-users.xml.erb

<?xml version='1.0' encoding='utf-8'?><tomcat-users>

<role rolename="manager"/><role rolename="admin"/><user name="tomcat-admin" password="12345" roles="manager,admin"/>

</tomcat-users>

Page 40: Geeky Academy Week 3 :: Vagrant + Puppet

More Demo

ohttps://github.com/up1/geeky_devopsodemo-multi-puppet

box.vm.provision :puppet do |puppet| puppet.manifests_path = "puppet/manifests" puppet.manifest_file = "#{prefix}.pp" puppet.module_path = "puppet/modules" end

Page 41: Geeky Academy Week 3 :: Vagrant + Puppet

Question ?

Page 42: Geeky Academy Week 3 :: Vagrant + Puppet

GEEK ACADEMY 2013

Page 43: Geeky Academy Week 3 :: Vagrant + Puppet

THANK YOU FORYOUR TIME

GEEK ACADEMY 2013