Slide 1

Slide 1 text

VAGRANT & PUPPET Srdjan Vranac // code4hire.com // @vranac

Slide 2

Slide 2 text

A LONG TIME AGO IN A GALAXY FAR, FAR AWAY...

Slide 3

Slide 3 text

WORKS ON MY MACHINEā„¢

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

SINGLE & MULTIPLE VM c o n f i g . v m . d e f i n e : d e v b o x d o | d e v b o x | . . . e n d c o n f i g . v m . d e f i n e : d e v b o x d o | d e v b o x | . . . e n d c o n f i g . v m . d e f i n e : d b b o x d o | d b b o x | . . . e n d

Slide 7

Slide 7 text

TWO STEP PROCESS (PROVIDE & PROVISION)

Slide 8

Slide 8 text

PROVIDING: Download basebox Create a VM from basebox Configure VM Boot the VM

Slide 9

Slide 9 text

PROVISIONING: Puppet (remote puppet master) Shell script Chef (solo or master) Ansible

Slide 10

Slide 10 text

SHOW ME THE CODE

Slide 11

Slide 11 text

FIRST BLO... AHEM RUN VAGRANTFILE

Slide 12

Slide 12 text

ONCE MORE, WITH A BOX VAGRANTFILE

Slide 13

Slide 13 text

VAGRANTFILE V a g r a n t : : C o n f i g . r u n d o | c o n f i g | c o n f i g . v m . b o x = " q u a n t a l " c o n f i g . v m . b o x _ u r l = " h t t p : / / c l o u d - i m a g e s . u b u n t u . c o m / q u a n t a l / c u r r e n t / q u a n t a l - s e r v e r - c l o u # c o m p o s e r r e q u i r e s l o n g t i m e o u t s c o n f i g . s s h . t i m e o u t = 9 0 0 0 c o n f i g . s s h . m a x _ t r i e s = 3 0 0 c o n f i g . v m . p r o v i s i o n : p u p p e t d o | p u p p e t | p u p p e t . m a n i f e s t s _ p a t h = " m a n i f e s t s " p u p p e t . m a n i f e s t _ f i l e = " d e v . p p " # U n c o m m e n t t h i s f o r a t o r r e n t o f p u p p e t i n f o # p u p p e t . o p t i o n s = " - - v e r b o s e - - d e b u g " e n d c o n f i g . v m . n e t w o r k : h o s t o n l y , " 3 3 . 3 3 . 3 3 . 1 0 0 " c o n f i g . v m . s h a r e _ f o l d e r " w w w " , " / v a r / w w w " , " . / " , : n f s = > t r u e e n d

Slide 14

Slide 14 text

TRIFECTA Package/File/Service: Learn it, live it, love it. If you can use only this, you can still do a lot

Slide 15

Slide 15 text

Package (install) File (configure) Service (startup)

Slide 16

Slide 16 text

BASE.PP n o d e b a s e { . . . f i l e { ' / e t c / a p t / s o u r c e s . l i s t . d / p h p 5 5 . l i s t ' : e n s u r e = > p r e s e n t , c o n t e n t = > " d e b h t t p : / / p a c k a g e s . d o t d e b . o r g w h e e z y - p h p 5 5 a l l " } . . . e x e c { " a u t h o r i z e - p h p 5 5 " : c o m m a n d = > " s u d o a p t - k e y a d v - - r e c v - k e y s - - k e y s e r v e r k e y s e r v e r . u b u n t u . c o m E 9 C 7 4 F E E A 2 0 r e q u i r e = > F i l e [ " / e t c / a p t / s o u r c e s . l i s t . d / p h p 5 5 . l i s t " ] , } . . . # b e c a u s e p u p p e t c o m m a n d a r e n o t r u n s e q u e n t i a l l y , e n s u r e t h a t p a c k a g e s a r e # u p t o d a t e b e f o r e i n s t a l l i n g p a c k a g e s , s e r v i c e s , f i l e s , e t c . P a c k a g e { r e q u i r e = > E x e c [ " a p t - g e t u p d a t e " ] } . . . p a c k a g e { " n g i n x " : e n s u r e = > p r e s e n t , r e q u i r e = > P a c k a g e [ " a p a c h e 2 . 2 - c o m m o n " ] } # s t a r t s t h e n g i n x s e r v i c e o n c e t h e p a c k a g e s i n s t a l l e d , a n d m o n i t o r s c h a n g e s # t o i t s c o n f i g u r a t i o n f i l e s a n d r e l o a d s i f n e c e s s a r y s e r v i c e { " n g i n x " : e n s u r e = > r u n n i n g , e n a b l e = > t r u e , p r o v i d e r = > ' u p s t a r t ' , r e q u i r e = > [ P a c k a g e [ ' n g i n x ' ] , P a c k a g e [ ' p h p 5 - f p m ' ] ] , s u b s c r i b e = > F i l e [ " / e t c / n g i n x / s i t e s - a v a i l a b l e / d e f a u l t " ] ,

Slide 17

Slide 17 text

COMPOSER INSTALL n o d e b a s e { . . . e x e c { " d o w n l o a d - c o m p o s e r " : c o m m a n d = > " c u r l - s S h t t p s : / / g e t c o m p o s e r . o r g / i n s t a l l e r | p h p & & m v c o m p o s e r . p h a r / u c r e a t e s = > " / u s r / l o c a l / b i n / c o m p o s e r " , r e q u i r e = > P a c k a g e [ " m a k e " , " c u r l " , " g i t " , " p h p 5 " ] } e x e c { " i n s t a l l - v e n d o r s " : c o m m a n d = > " / u s r / l o c a l / b i n / c o m p o s e r - n - q - d = / v a r / w w w i n s t a l l " , r e q u i r e = > [ E x e c [ ' d o w n l o a d - c o m p o s e r ' , ' g e a r m a n p h p ' ] , P a c k a g e [ ' p h p 5 ' , ' p h p 5 - d e v ' , ' p h p l o g o u t p u t = > " o n _ f a i l u r e " , n o t i f y = > S e r v i c e [ " n g i n x " ] } }

Slide 18

Slide 18 text

SERVER.PP n o d e s e r v e r i n h e r i t s b a s e { . . . s s h _ a u t h o r i z e d _ k e y { " v r a n a c _ u b u n t u " : e n s u r e = > p r e s e n t , u s e r = > " u b u n t u " , t y p e = > " s s h - r s a " , t a r g e t = > " / h o m e / u b u n t u / . s s h / a u t h o r i z e d _ k e y s " , k e y = > ' . . . ' , } }

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

PROBLEMS:

Slide 21

Slide 21 text

DIFFERENT VAGRANTFILE SYNTAX v1 V a g r a n t : : C o n f i g . r u n d o | c o n f i g | . . . . e n d v2 V a g r a n t . c o n f i g u r e ( " 2 " ) d o | c o n f i g | . . . . e n d

Slide 22

Slide 22 text

SHARED RESOURCES vboxfs can be slow NFS extensions, performance is ok(ish) but they do not work on windows Windows

Slide 23

Slide 23 text

SPEED VM are booted sequentially, that can take time Package installation can take time, especially if apt-get (or similar) is executed before each command

Slide 24

Slide 24 text

DEBUG: Passing arguments to puppet from console is almost impossible

Slide 25

Slide 25 text

DEBUG: Commands in manifest files are not being executed in known order e x e c { " d o w n l o a d - c o m p o s e r " : c o m m a n d = > " c u r l - s S h t t p s : / / g e t c o m p o s e r . o r g / i n s t a l l e r | p h p & & m v c o m p o s e r . p h a r / u s r c r e a t e s = > " / u s r / l o c a l / b i n / c o m p o s e r " , r e q u i r e = > P a c k a g e [ " m a k e " , " c u r l " , " g i t " , " p h p 5 " ] }

Slide 26

Slide 26 text

DEBUG: Error messages can be completelly useless

Slide 27

Slide 27 text

DEBUG: Puppet files can be linted, but without running them you do not know if/when they will fail (and where) Puppet unit testing with rspec-puppet and rspec-system- serverspec

Slide 28

Slide 28 text

THE END ?

Slide 29

Slide 29 text

LINKS