wprowadzenie do technologii puppet

126
PUPPET WPROWADZENIE DO TECHNOLOGII by Krzysztof Suszyński | @ksuszynski

Upload: sages

Post on 07-Jan-2017

489 views

Category:

Presentations & Public Speaking


2 download

TRANSCRIPT

PUPPETWPROWADZENIE DO TECHNOLOGII

by Krzysztof Suszyński | @ksuszynski

HEJ!Krzysztof Suszyński

Ewangelizuje z Puppet i JavaGłówny Programista w COI / właściciel Wave Software

Od 2014r. współpraca z

Z DevOps pierwszy raz w 2010 rokuDuże wdrożenia z DevOps / PuppetPrezentacje na User Groups i szkolenia pracownikówWiele OS modułów: JBoss, Glassfish, XtreemFS,Artifactory, Flyway, Herald

JAK BĘDZIE WYGLĄDAŁWARSZTAT?~9 tematów:

WstępteoretycznySamodzielna pracaPrzerwa

Mikro projektObiad koło 13

CO PRZED NAMI?1. Czym jest DevOps i gdzie w tym Puppet?2. Sposoby pracy z Puppet3. Instalacja Puppet na systemie operacyjnym4. Architektura master - agent w Puppet5. Podstawowe typy takie jak file, service, user czy

package6. Składnia deklaratywnych manifestów7. Zasoby i zarządzanie kolejnością8. Klasy i definicje9. Wstęp do testowania i tryb bez operacyjny

10. Kompilacja, katalogi oraz raportowanie

DYSKUSJAJakie cele mam na tym warsztacie?Czy potrafię wskazać na czym najbardziej mi zależy?Czy mam już plan jak wykorzystać zdobytą tuwiedzę?

PRZYJRZYJMY SIĘPROBLEMOM W IT

POMIĘDZY ROZWOJEM APLIKACJIA UTRZYMANIEM

ZMIANAZMIANA TO JEDYNA PEWNA RZECZ W KAŻDEJ

FIRMIE

POWINNA BYĆ WYKORZYSTANA I SPRAWNIEWPROWADZONA

ZMIANANIE POWINNA PROWADZIĆ DO STRACHU W

ŻADNYM Z DZIAŁÓW W FIRMIE

NIE POWINNA OZNACZAĆ ZWIĘKSZONEGO STRESU

NIE POWINNA OZNACZAĆ KONIECZNOŚCI"GASZENIA POŻARÓW"

DALSZE WYZWANIANiska komunikacja = konflikty i niska efektywnośćProgramiści nie wdrażają spójnego software'uAdministratorzy mają tendencję do opierania sięzmianomProces wytwarzania jest najczęściej zwinnyProces utrzymania jest najczęściej statycznyCoraz potężniejsze, rozproszone rozwiązania

DEVS VS OPS  Developerzy Administratorzy

Zainteresowanie Szybkie zmianyStabilnośćśrodowiska

Skala

Cytaty" It works on my

machine"" It's not server, it's

your code"

ROZWIĄZANIE?

DEVOPS

DEFINICJA"DevOps to praktyka codziennej

współpracy i współtworzenia zespołówadministracyjnych z zespołami

programistów"

ZAŁOŻENIA DEVOPSDevOps stosujemy w trakcie trwania całego cyklu życiadanej usługi lub dłużejOd momentu jej projektowania, przez wykonanie,wdrożenie i utrzymaniePoprzez stosowanie wspólnych narzędzi i praktykAutomatyzację pracy i mikro wdrożenia

DEVOPS W PUNKTACH1. Infrastucture as a Code2. Continuous build3. Continuous testing4. Continuous inspection5. Continuous integration6. Continuous delivery7. Continuous configuration

enforcement8. Continuous deployment9. Continuous monitoring

10. Continuous recovery11. Continuous scaling

ZADANIE

KILKA UWAG!CZYM DEVOPS NIE JEST?!

TO NIE JEST NO-OPS"oni zabiorą nam nasze posady"współdzielenie odpowiedzialności a nie pozbycia sięjejwspółpraca a nie odebranie jejuwolnienie ukrytych mocy

NIE CHODZI (TYLKO) ONARZĘDZIA

przekonanie, że w DevOps chodzi głownie ozastosowanie nowych narzędzi w pracy, takich jakPuppet czy Chefpraktyka wspólnej pracywytworzenie kultury i nawyków spójnych z Agile

NIE CHODZI (TYLKO) OKULTURĘ

potrzebne są narzędzia spełniające wymagania obustronnarzędzia te muszą wspierać nawyki wspólnej pracyobie strony muszą czerpać korzyści

NIE CHODZI (TYLKO) OPOŁĄCZENIE DEV I

OPSobejmuje również: administratorachsiecispecjalistów bezpieczeństwaarchitektów systemówanalityków

NIE CHODZI (TYLKO) OTYTUŁ POSADY

bez faktycznej zmiany sposobu pracy nie będzie dużychsukcesówzmiana musi być po obu stronach

NIE CHODZI OWSZYSTKO, WSZĘDZIE

po złym wprowadzeniu, upraszcza się DevOps dorozwodnionego Agilelub "miłości" do wszystkich

PROCES DEVOPS

Krótkie szybkie iteracje

ZMIANA W CAŁEJ FIRMIE

Dev Ops

Dev Ops

DYSKUSJA

ZAPISINFRASTRUKTURY

JAKO KOD

CONFIGURATION ENFORCEMENTZapis infrastruktury jako kod przetwarzany iwykonywalny jest KLUCZOWY dla DevOps

Daje możliwość pracy w niedużych iteracjach.

“To co było zapisane w postaci koduzadziałało, problem był w tych elementach,

których jeszcze nie automatyzowaliśmy.Zróbmy to!”

SPOSOBY PRACY ZNARZĘDZIAMI

CONFIGURATIONMANAGEMENT

PRACA BEZPOŚREDNIO NADOCELOWEJ INFRASTRUKTURZE

Nie polecamNiebezpieczne i jedno dostępneSzczątkowe możliwościtestowaniaMożliwość używania środowisk

Najpopularniejsze i polecane przez Puppetlabs :-(

WYKORZYSTANIE NARZĘDZI TYPUVAGRANT

W miarę wygodne i prosteBezpieczneMożliwe dogłębne testowanieMożliwe wykorzystanie systemówCI

Tak będziemy pracować na tym warsztacie

WYKORZYSTANIE SEPARACJIMODUŁÓW

Wymaga ekosystemu developerskiego PuppetBezpieczne, wielodostępne i skalowalneMożliwe pełne testowanie i separacja naodpowiedzialnościKonieczne wykorzystanie systemów CI i CDWykorzystanie zaawansowanych testów rspec i beaker

Najlepszy sposób pracy lecz zaawansowany

VAGRANTTypowe narzędzie fazy rozwoju i wstępnego testowania

rozwiązań. Pozwala na:

szybkie zarządzanie obrazami maszyny wirtualnejzarządzanie połączeniami sieciowymimiejscem współdzielonymuruchamianiem na maszynie wirtualnej skryptów inarzędzi configuration management

KLUCZOWE FUNKCJE VAGRANTAdostarcza poleceń linii komend do sterowania maszyną lubmaszynami wirtualnymipozwala na zapis konfiguracji w pliku Vagrantfileposiada szereg wbudowanych providerów: VirtualBox,VMWare, Docker, Hyper-Vposiada szereg wbudowanych provisionerów: Shell, Chef,Puppet, Ansible, Docker, Salt, CFEngineposiada system wtyczek i istnieje wiele publicznych wtyczekposiada prostą instalację w postaci pliku DEB, RPM, MSI lubDMGdostarcza automatycznej konfiguracji sieci oraz folderówwspółdzielonych

INSTALACJAVAGRANT

# A l l c o m m a n d s a s r o o t

e c h o ' d e b h t t p : / / d o w n l o a d . v i r t u a l b o x . o r g / v i r t u a l b o x / d e b i a n t r u s t y c o n t r i b ' >

/ e t c / a p t / s o u r c e s . l i s t . d / v i r t u a l b o x . l i s t

w g e t - q h t t p s : / / w w w . v i r t u a l b o x . o r g / d o w n l o a d / o r a c l e _ v b o x . a s c - O - | a p t - k e y a d d -

a p t - g e t u p d a t e

a p t - g e t i n s t a l l v i r t u a l b o x - 5 . 0

c u r l - k L h t t p s : / / d l . b i n t r a y . c o m / m i t c h e l l h / v a g r a n t / v a g r a n t _ 1 . 7 . 2 _ x 8 6 _ 6 4 . d e b - o v a g r a n t _ 1 . 7 . 2

d p k g - i v a g r a n t _ 1 . 7 . 2 _ x 8 6 _ 6 4 . d e b

BAZOWE OBRAZY DO VAGRANTA

https://atlas.hashicorp.com/boxes/search

NOWE ŚRODOWISKO DLAVAGRANTA

$ v a g r a n t i n i t p u p p e t l a b s / u b u n t u - 1 4 . 0 4 - 6 4 - n o c m

A ` V a g r a n t f i l e ` h a s b e e n p l a c e d i n t h i s d i r e c t o r y . Y o u a r e n o w

r e a d y t o ` v a g r a n t u p ` y o u r f i r s t v i r t u a l e n v i r o n m e n t ! P l e a s e r e a d

t h e c o m m e n t s i n t h e V a g r a n t f i l e a s w e l l a s d o c u m e n t a t i o n o n

` v a g r a n t u p . c o m ` f o r m o r e i n f o r m a t i o n o n u s i n g V a g r a n t .

$ _

PRZYKŁADOWY PLIKVAGRANTFILE

# - * - m o d e : r u b y - * -

# v i : s e t f t = r u b y :

# V a g r a n t f i l e A P I / s y n t a x v e r s i o n . D o n ' t t o u c h u n l e s s y o u k n o w w h a t

V A G R A N T F I L E _ A P I _ V E R S I O N = " 2 "

V a g r a n t . c o n f i g u r e ( V A G R A N T F I L E _ A P I _ V E R S I O N ) d o | c o n f i g |

# E v e r y V a g r a n t v i r t u a l e n v i r o n m e n t r e q u i r e s a b o x t o b u i l d o f f o

c o n f i g . v m . b o x = " p u p p e t l a b s / u b u n t u - 1 4 . 0 4 - 6 4 - n o c m "

# E n a b l e p r o v i s i o n i n g w i t h P u p p e t s t a n d a l o n e . P u p p e t m a n i f e s t s

# a r e c o n t a i n e d i n a d i r e c t o r y p a t h r e l a t i v e t o t h i s V a g r a n t f i l e .

# Y o u w i l l n e e d t o c r e a t e t h e m a n i f e s t s d i r e c t o r y a n d a m a n i f e s t

KONFIGURACJA SIECI, PROCESORAI PAMIĘCI

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 |

c o n f i g . v m . n e t w o r k : p r i v a t e _ n e t w o r k , i p : " 1 9 2 . 1 6 8 . 5 0 . 4 "

c o n f i g . v m . p r o v i d e r : v i r t u a l b o x d o | v |

v . m e m o r y = 1 0 2 4

v . c p u s = 2

e n d

e n d

URUCHOMIENIE MASZYN WŚRODOWISKU

$ v a g r a n t u p

B r i n g i n g m a c h i n e ' d e f a u l t ' u p w i t h ' v i r t u a l b o x ' p r o v i d e r . . .

= = > d e f a u l t : I m p o r t i n g b a s e b o x ' p u p p e t l a b s / u b u n t u - 1 4 . 0 4 - 6 4 - n o c m ' .

= = > d e f a u l t : M a t c h i n g M A C a d d r e s s f o r N A T n e t w o r k i n g . . .

= = > d e f a u l t : C h e c k i n g i f b o x ' p u p p e t l a b s / u b u n t u - 1 4 . 0 4 - 6 4 - n o c m ' i s

= = > d e f a u l t : S e t t i n g t h e n a m e o f t h e V M : t m p _ d e f a u l t _ 1 4 2 6 7 2 7 6 7 1 4 6 1

= = > d e f a u l t : C l e a r i n g a n y p r e v i o u s l y s e t n e t w o r k i n t e r f a c e s . . .

= = > d e f a u l t : P r e p a r i n g n e t w o r k i n t e r f a c e s b a s e d o n c o n f i g u r a t i o n . .

d e f a u l t : A d a p t e r 1 : n a t

= = > d e f a u l t : F o r w a r d i n g p o r t s . . .

d e f a u l t : 2 2 = > 2 2 2 2 ( a d a p t e r 1 )

= = > d e f a u l t : B o o t i n g V M . . .

= = > d e f a u l t : W a i t i n g f o r m a c h i n e t o b o o t . T h i s m a y t a k e a f e w m i n u

SESJA SSH W ŚRODOWISKU$ v a g r a n t s s h

W e l c o m e t o U b u n t u 1 4 . 0 4 L T S ( G N U / L i n u x 3 . 1 3 . 0 - 2 4 - g e n e r i c x 8 6 _ 6 4 )

* D o c u m e n t a t i o n : h t t p s : / / h e l p . u b u n t u . c o m /

v a g r a n t @ l o c a l h o s t : ~ $ u p t i m e

1 8 : 1 7 : 4 7 u p 3 m i n , 1 u s e r , l o a d a v e r a g e : 0 . 0 0 , 0 . 0 0 , 0 . 0 0

v a g r a n t @ l o c a l h o s t : ~ $ l o g o u t

C o n n e c t i o n t o 1 2 7 . 0 . 0 . 1 c l o s e d .

$ _

ZWERYFIKOWANIE STANUMASZYNY

Aby sprawdzić jaki jest aktualny stan maszyny w ramachkonfiguracji, należy wywołać polecenie vagrant status.

USUNIĘCIE MASZYNYAby skasować maszynę wykonać należy polecenie

vagrant destroy.

ZAOPATRYWANIE WKONFIGURACJĘ

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 |

c o n f i g . v m . b o x = " p u p p e t l a b s / u b u n t u - 1 4 . 0 4 - 6 4 - p u p p e t "

# P r o v i s i o n w i t h B a s h

c o n f i g . v m . p r o v i s i o n : s h e l l , i n l i n e : " e c h o H i $ ( c a t / e t c / i s s u e ) "

# P r o v i s i o n w i t h P u p p e t a p p l y

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 "

# c o n t a i n s : " p a c k a g e { ' e l i n k s ' : e n s u r e = > ' i n s t a l l e d ' , } "

p u p p e t . m a n i f e s t _ f i l e = " d e f a u l t . p p "

e n d

e n d

WYNIK ZAOPATRYWANIA WKONFIGURACJĘ

$ v a g r a n t p r o v i s i o n

= = > d e f a u l t : R u n n i n g p r o v i s i o n e r : s h e l l . . .

d e f a u l t : R u n n i n g : i n l i n e s c r i p t

= = > d e f a u l t : H i U b u n t u 1 4 . 0 4 . 2 L T S \ n \ l

= = > d e f a u l t : R u n n i n g p r o v i s i o n e r : p u p p e t . . .

= = > d e f a u l t : R u n n i n g P u p p e t w i t h d e f a u l t . p p . . .

= = > d e f a u l t : N o t i c e : C o m p i l e d c a t a l o g f o r l o c a l h o s t . s u s z y n s k i . o r g

i n e n v i r o n m e n t p r o d u c t i o n i n 0 . 0 8 s e c o n d s

= = > d e f a u l t : N o t i c e : / S t a g e [ m a i n ] / M a i n / P a c k a g e [ e l i n k s ] / e n s u r e :

e n s u r e c h a n g e d ' p u r g e d ' t o ' p r e s e n t '

= = > d e f a u l t : N o t i c e : F i n i s h e d c a t a l o g r u n i n 4 . 8 8 s e c o n d s

$ _

WTYCZKIDO VAGRANTA

github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins

landrush - Lokalnego micro DNS, który automatycznieprzyznaje maszynom IP. Działa zarówno w maszynachwirtualnych jak i na hościesahara - Możliwość wykonywania migawek stanu,przywracania stanu i potwierdzania zmian

VAGRANTDEMO

ZADANIE

Jedno z najbardziej dojrzałych narzędzi DevOps

CZYTELNOŚĆ PUPPETp a c k a g e { ' p o s t g r e s q l ' :

e n s u r e = > ' i n s t a l l e d ' ,

}

s e r v i c e { ' p o s t g r e s q l ' :

e n s u r e = > ' r u n n i n g ' ,

e n a b l e = > t r u e ,

r e q u i r e = > P a c k a g e [ ' p o s t g r e s q l ' ] ,

}

Co to znaczy? Na pierwszy rzut oka?

ZALETY PUPPETDostarcza możliwości zapisania oczekiwanego stanu

infrastruktury IT

Wymuszenia wykonania zmian dostosowującego ją dotegoż stanu

Wszystkie elementy składowe to open-source

Prosty język manifestów naturalnie przyjaznyadministratorom

Silnik Puppeta składa się z zestawu komend konsolisystemu, które również można efektywniewykorzystywać w oderwaniu od Puppeta

ZALETY PUPPET - C.D.Język DSL w postaci deklaratywnej tzn. 4 generacji

podobnie jak SQL

Brak podejścia "all or nothing", można go wprowadzać nadowolnym etapie zaawansowania projektu

Największa społeczność użytkowników

Możliwość prostego rozszerzenia silnika Puppeta wpostaci zarówno manifestów Puppet jak i kodu

niskopoziomowego Ruby

Wytwarza naturalny podział pracy: programiści piszą kodw Ruby a administratorzy używają prostszych manifestów

ZALETY PUPPET - C.D. 2Największa ilość gotowych do użycia modułów i

rozszerzeń

Moduły pisane i utrzymywane przez firmę Puppetlabs

Dogłębne testowanie jednostkowe, "dymne", integracyjnei akceptacyjne

Możliwość symulowania zmiany w systemie

Dokładne, szczegółowe raportowanie

Bezpieczna i skalowalna architektura agent --> serwer

ZALETY PUPPET - C.D. 3Wsparcie i integracje z innymi narzędziami np. Vagrant,

VMWare, OpenStack

Wsparcie enterprise firmy Puppetlabs i Red Hat, orazdodatkowe bardzo przydatne narzędzia takie jakEnterprise Console, Razer czy Cloud Provisioning

Wsparcie dla największej liczby systemów operacyjnych:Linux (RHEL i podobne, Debian i podobne), Suse, AIX,

Solaris, Windows, Mac OSX

Największe wsparcie dla edytorów kodu, systemówweryfikacji i budowania oraz integracji ciągłej

PUPPETJAK DZIAŁA?

PROCES DZIAŁANIA

KLASYFIKACJA

PROCES WPROWADZANIA ZMIANY

SPOSOBY INSTALACJIPUPPET

z pakietów dostępnych w systemieoperacyjnymz rubygemsz pakietów z repozytoriów puppetlabsinstalator wersji Enterprise

Uwaga! Przed instalacją Puppet należy ustawić pełnąnazwę domenową (FQDN) i poleca się zainstalowanie i

uruchomienie usługi synchronizacji czasu ntp!

DEMOINSTALACJA PUPPET

ZADANIE

DYSKUSJA

OPIS EKOSYSTEMUPUPPET

Puppet składa się z kilku luźno powiązanych ze sobąnarzędzi i systemów.

Dzięki temu daje możliwość używania ich niezależnie

FACTERNarzędzie działające między innymi w konsoli

systemowej. Jego zadaniem jest wyliczanie faktów natemat maszyny na której został uruchomiony.

FACTER - PRZYKŁAD$ f a c t e r

a r c h i t e c t u r e = > a m d 6 4

i p a d d r e s s = > 1 7 2 . 1 7 . 4 2 . 1

k e r n e l = > L i n u x

k e r n e l m a j v e r s i o n = > 3 . 1 1

k e r n e l r e l e a s e = > 3 . 1 1 . 0 - 2 6 - g e n e r i c

k e r n e l v e r s i o n = > 3 . 1 1 . 0

l s b d i s t c o d e n a m e = > s a u c y

l s b d i s t d e s c r i p t i o n = > U b u n t u 1 3 . 1 0

l s b d i s t i d = > U b u n t u

l s b d i s t r e l e a s e = > 1 3 . 1 0

l s b m a j d i s t r e l e a s e = > 1 3 . 1 0

o p e r a t i n g s y s t e m = > U b u n t u

o p e r a t i n g s y s t e m m a j r e l e a s e = > 1 3 . 1 0

ZADANIE

AUGEASNarzędzie elastycznego zmieniania konfiguracji plików.

Potrafi inteligentnie zmieniać treść bardzo wielu różnychformatów plików, selektywnie, zmieniając jedyne

pożądaną wartość i nie zmieniając nic w przypadku pełnejzgodności.

AUGEAS$ a u g t o o l

a u g t o o l > g e t / f i l e s / e t c / p o s t g r e s q l / 9 . 1 / m a i n / p o s t g r e s q l . c o n f / m a x _ c o n n e c t i o n s

/ f i l e s / e t c / p o s t g r e s q l / 9 . 1 / m a i n / p o s t g r e s q l . c o n f / m a x _ c o n n e c t i o n s = 1 0 0

a u g t o o l > s e t / f i l e s / e t c / p o s t g r e s q l / 9 . 1 / m a i n / p o s t g r e s q l . c o n f / m a x _ c o n n e c t i o n s 1 3 0

a u g t o o l > g e t / f i l e s / e t c / p o s t g r e s q l / 9 . 1 / m a i n / p o s t g r e s q l . c o n f / m a x _ c o n n e c t i o n s

/ f i l e s / e t c / p o s t g r e s q l / 9 . 1 / m a i n / p o s t g r e s q l . c o n f / m a x _ c o n n e c t i o n s = 1 3 0

a u g t o o l > s a v e

DEMOAUGEAS

HIERAHierarchiczna, prosta baza danych dzięki której możliwe

są kontekstowe konfiguracje.

HIERA - GRAF / - - - - - - - - - - - - - D C 1 - - - - - - - - - - - - - \ / - - - - - - - - - - - - - D C 2 - - - - - - - - - - - - - \

| n t p s e r v e r : n t p 1 . d c 1 . e x a m p l e . c o m | | n t p s e r v e r : n t p 1 . d c 2 . e x a m p l e . c o m |

| s y s a d m i n : d c 1 n o c @ e x a m p l e . c o m | | |

| c l a s s e s : u s e r s : : d c 1 | | c l a s s e s : u s e r s : : d c 2 |

\ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /

\ /

\ /

/ - - - - - - - - - - - - - C O M M O N - - - - - - - - - - - - - \

| n t p s e r v e r : 1 . p o o l . n t p . o r g |

| s y s a d m i n : s y s a d m i n @ % { d o m a i n } |

| c l a s s e s : u s e r s : : c o m m o n |

\ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /

DEMOHIERA

PUPPET RESOURCEMożliwość uruchamiania puppeta dla konkretnych

pojedynczych zasobów i listowania ich

PUPPET RESOURCE - PRZYKŁAD# p u p p e t r e s o u r c e u s e r k s u s z y n s k i

u s e r { ' k s u s z y n s k i ' :

e n s u r e = > ' p r e s e n t ' ,

c o m m e n t = > ' K r z y s z t o f S u s z y n s k i , , , ' ,

g i d = > ' 1 0 0 0 ' ,

g r o u p s = > [ ' a d m ' , ' s u d o ' , ' d o c k e r ' ] ,

h o m e = > ' / h o m e / k s u s z y n s k i ' ,

s h e l l = > ' / b i n / b a s h ' ,

u i d = > ' 1 0 0 0 ' ,

}

DEMOPUPPET RESOURCE

ZADANIE

PODSTAWA SKŁADNIDSL PUPPET

JĘZYK PUPPETJęzyk Puppet zapisywany jest w manifestach

Manifesty są grupowane w moduły

Manifesty mogą zawierać definicje, klasy lub wywołaniazasobów

ZASÓB PUPPETZasobem jest każdy pojedynczy deklaratywny element,

który puppet może wymusić

s e r v i c e { ' a p a c h e 2 ' :

e n s u r e = > ' r u n n i n g ' ,

}

Puppet posiada wiele wbudowanych zasobów

PODSTAWOWE ZASOBYfileservicepackageexecusergroupaugeas

FILEPotrafi zarządzać plikami, katalogami i linkami

symbolicznymi. Dodatkowo kopiować pliki i katalogi.

f i l e { ' / e t c ' :

e n s u r e = > ' d i r e c t o r y ' ,

m o d e = > ' 0 7 5 5 ' ,

}

f i l e { ' / e t c / a c m e - m o t d ' :

e n s u r e = > ' f i l e ' ,

c o n t e n t = > ' H e l l o f r o m A c m e D a t a c e n t e r m a n a g e d b y P u p p e t ! ' ,

m o d e = > ' 0 6 4 4 ' ,

}

f i l e { ' / e t c / m o t d ' :

e n s u r e = > ' l i n k ' ,

t a r g e t = > ' / e t c / a c m e - m o t d ' ,

}

PACKAGEPotrafi zarządzać pakietami przy użyciu YUM, APT, GEM,

PIP i wielu innych.

p a c k a g e { ' r u b y ' :

e n s u r e = > ' i n s t a l l e d ' ,

}

p a c k a g e { ' l o l c a t ' :

e n s u r e = > ' i n s t a l l e d ' ,

p r o v i d e r = > ' g e m ' ,

}

SERVICEPotrafi zarządzać usługami w systemie.

s e r v i c e { ' a p a c h e ' :

e n s u r e = > ' r u n n i n g ' ,

e n a b l e = > t r u e ,

h a s r e s t a r t = > t r u e ,

h a s s t a t u s = > t r u e ,

}

USERZarządza użytkownikami w systemie

u s e r { ' k s u s z y n s k i ' :

e n s u r e = > ' p r e s e n t ' ,

s h e l l = > ' / b i n / b a s h ' ,

g r o u p s = > [ ' a d m i n ' , ' u s e r ' ] ,

}

EXECPozwala na uruchamianie poleceń w systemie

e x e c { ' / u s r / b i n / y e s y e s | b u n d l e e x e c r a k e g i t l a b : s e t u p ' :

u n l e s s = > ' / u s r / b i n / t e s t - f / o p t / g i t l a b / . d b _ d o n e ' ,

t i m e o u t = > 6 0 0 ,

e n v i r o n m e n t = > [ ' R A I L S _ E N V = p r o d u c t i o n ' ] ,

}

KOLEJNOŚĆZasoby tworzą graf w którym określamy kolejność

wykonania

s e r v i c e { ' a p a c h e 2 ' :

e n s u r e = > ' r u n n i n g ' ,

r e q u i r e = > P a c k a g e [ ' a p a c h e 2 ' ] ,

}

p a c k a g e { ' a p a c h e 2 ' :

e n s u r e = > ' i n s t a l l e d ' ,

}

require, before, subscribe, notify

POLECANY FLOWinstall -> configure ~> service

p a c k a g e { ' o p e n s s h - s e r v e r ' :

e n s u r e = > ' i n s t a l l e d ' ,

}

f i l e { ' / e t c / s s h / s s h d _ c o n f i g . c o n f ' :

e n s u r e = > ' f i l e ' ,

c o n t e n t = > t e m p l a t e ( ' m y s s h / s s h d _ c o n f i g . c o n f . e r b ' ) ,

r e q u i r e = > P a c k a g e [ ' o p e n s s h - s e r v e r ' ] ,

}

s e r v i c e { ' s s h ' :

e n s u r e = > ' i n s t a l l e d ' ,

s u b s c r i b e = > F i l e [ ' / e t c / s s h / s s h d _ c o n f i g . c o n f ' ] ,

}

ZADANIE

ZMIENNEW języku DSL Puppet występuje możliwość tworzenia i

wykorzystywania zmiennych

Wbrew nazwie, raz ustalonej zmiennej nie można zmienić

$ s e r v i c e = ' a p a c h e 2 '

s e r v i c e { $ s e r v i c e :

e n s u r e = > ' r u n n i n g ' ,

r e q u i r e = > P a c k a g e [ $ s e r v i c e ] ,

}

p a c k a g e { $ s e r v i c e :

e n s u r e = > ' i n s t a l l e d ' ,

}

Fakty są dostępne w przestrzeni globalnej np.: $::fqdn

WYRAŻENIA WARUNKOWEW języku DSL Puppet występuje zestaw wyrażeń

warunkowych

i f $ : : o s f a m i l y = = ' D e b i a n ' {

$ s e r v i c e = ' a p a c h e 2 '

} e l s e {

$ s e r v i c e = ' h t t p d '

}

WARUNKI CASEc a s e $ : : o p e r a t i n g s y s t e m {

' R e d H a t ' , ' C e n t O S ' : { $ s e r v i c e = ' h t t p d ' }

/ ^ ( D e b i a n | U b u n t u ) $ / : { $ s e r v i c e = ' a p a c h e 2 ' }

d e f a u l t : { f a i l ( " U n s u p p o r t e d p l a t f o r m : $ { : : o p e r a t i n g s y s t e m } "

}

SELEKTORY$ r o o t g r o u p = $ : : o s f a m i l y ? {

' S o l a r i s ' = > ' w h e e l ' ,

/ ( D a r w i n | F r e e B S D ) / = > ' w h e e l ' ,

d e f a u l t = > ' r o o t ' ,

}

f i l e { ' / e t c / p a s s w d ' :

e n s u r e = > ' f i l e ' ,

o w n e r = > ' r o o t ' ,

g r o u p = > $ r o o t g r o u p ,

}

FUNKCJEi f s t r 2 b o o l ( $ : : i s _ v i r t u a l ) {

f a i l ( ' u n s u p p o r t e d ' )

} e l s e {

i n c l u d e n t p

}

W tym przykładzie funkcje to fail, include orazstr2bool.

ZADANIE

SPOSOBYURUCHAMIANIA

RESOURCE

APPLY

AGENT

TRYB AGENTPuppet łączy się do serwera i pobiera z niego konfigurację

Dostęp tylko po SSL z zaufanym certyfikatem

Kompilacja na serwerze, wykonanie na agencie

TRYB AGENTDEMO

ZADANIE

WSTĘP DOTESTOWANIA

SPOSOBY TESTOWANIAPuppet posiada szereg możliwości testowania

puppet parser validate i puppet-lintsmoke testy i tryb bezoperacyjnyrspec-puppetbeaker

Nie będziemu tu mówić o 2 ostatnich

WALIDACJA POPRAWNOŚCIMANIFESTÓW

IDE - polecam w szczególności na początku Geppetto,ale też Atom czy Intellijpuppet-lintpuppet parser validate

TRYB BEZOPERACYJNYUnikalna funkcjonalność puppet

Pozwala uruchamianie manifestów bez wprowadzaniazmian

Flaga: --noop

SMOKE TESTY PUPPETW Puppet smoke testy to po prostu uruchamianie

manifestów, specjalnie przygotowanych w katalogu testsw trybie bezoperacyjnym --noop

p u p p e t a p p l y t e s t s / a p a c h e . p p - - n o o p

ZADANIE

STRUKTURA KODUPUPPET

MODUŁOWOŚĆKod puppet umieszczamy w:

modułachklasachdefinicjach

STRUKTURA MODUŁUm y m o d u l e # T h i s o u t e r m o s t d i r e c t o r y ’ s n a m e m a t c h e s t h e

│ # n a m e o f t h e m o d u l e .

├ ─ ─ m a n i f e s t s # C o n t a i n s a l l o f t h e m a n i f e s t s i n t h e m o d u l e .

│ └ ─ ─ i n i t . p p # C o n t a i n s a c l a s s d e f i n i t i o n . T h i s c l a s s ’ s

│ # n a m e m u s t m a t c h t h e m o d u l e ’ s n a m e .

├ ─ ─ m e t a d a t a . j s o n # C o n t a i n s M E T A i n f o r m a t i o n a b o u t m o d u l e

├ ─ ─ s p e c # C o n t a i n s s p e c t e s t s f o r a n y p l u g i n s i n t h e

│ # l i b d i r e c t o r y .

├ ─ ─ t e m p l a t e s # C o n t a i n s t e m p l a t e s , w h i c h t h e m o d u l e ’ s

│ # m a n i f e s t s c a n u s e .

├ ─ ─ f i l e s # C o n t a i n s f i l e s t o b e s o u r c e d

├ ─ ─ t e s t s # C o n t a i n s e x a m p l e s s h o w i n g h o w t o d e c l a r e

│ │ # t h e m o d u l e ' s c l a s s e s a n d d e f i n e d t y p e s .

│ └ ─ ─ i n i t . p p

MODUŁY 101Moduły znajdują się na PMModuły zawierają kod PuppetModuły posiadają określony układModuły mogą być prostoinstalowane

Wiecej: http://slides.com/cardil/...

KLASYKlasy to nazwane bloki kodu PuppetSą definiowane w modułach do późniejszego użyciaNie są automatycznie wywoływane, muszą byćdołączone do kataloguGeneralnie opisują średnie i duże fragmentyfunkcjonalnościNazwa może mylić z innymi językami programowania

KLASY PRZYKŁADc l a s s a p a c h e ( $ v e r s i o n = ' l a t e s t ' ) {

p a c k a g e { ' h t t p d ' :

e n s u r e = > $ v e r s i o n , # U s i n g t h e c l a s s p a r a m e t e r f r o m a b o v e

b e f o r e = > F i l e [ ' / e t c / h t t p d . c o n f ' ] ,

}

f i l e { ' / e t c / h t t p d . c o n f ' :

e n s u r e = > f i l e ,

o w n e r = > ' h t t p d ' ,

c o n t e n t = > t e m p l a t e ( ' a p a c h e / h t t p d . c o n f . e r b ' ) , # T e m p l a t e f r o m a m o d u l e

}

s e r v i c e { ' h t t p d ' :

e n s u r e = > r u n n i n g ,

e n a b l e = > t r u e ,

s u b s c r i b e = > F i l e [ ' / e t c / h t t p d . c o n f ' ] ,

UŻYCIE KLASY# o n l y o n c e i n c a t a l o g

# c l a s s i s a r e s o u r c e

c l a s s { ' a p a c h e ' :

v e r s i o n = > ' l a t e s t ' ,

}

# o r s i m p l y

i n c l u d e a p a c h e

i n c l u d e a p a c h e

DEFINICJETo bloki kodu puppet które mogą być wywołanewielokrotnie z różnymi parametramiMogą być użyte jako proste makra dla powtarzającychsię operacji

DEFINICJE - PRZYKŁAD# / e t c / p u p p e t / m o d u l e s / a p a c h e / m a n i f e s t s / v h o s t . p p

d e f i n e a p a c h e : : v h o s t ( $ p o r t , $ d o c r o o t , $ s e r v e r n a m e = $ t i t l e , $ v h o s t _ n a m e

i n c l u d e a p a c h e # c o n t a i n s P a c k a g e [ ' h t t p d ' ] a n d S e r v i c e [ ' h t t p d ' ]

i n c l u d e a p a c h e : : p a r a m s # c o n t a i n s c o m m o n c o n f i g s e t t i n g s

$ v h o s t _ d i r = $ a p a c h e : : p a r a m s : : v h o s t _ d i r

f i l e { " $ { v h o s t _ d i r } / $ { s e r v e r n a m e } . c o n f " :

c o n t e n t = > t e m p l a t e ( ' a p a c h e / v h o s t - d e f a u l t . c o n f . e r b ' ) ,

# T h i s t e m p l a t e c a n a c c e s s a l l o f t h e p a r a m e t e r s a n d v a r i a b l e s f r o m a b o v e .

o w n e r = > ' w w w ' ,

g r o u p = > ' w w w ' ,

m o d e = > ' 6 4 4 ' ,

r e q u i r e = > P a c k a g e [ ' h t t p d ' ] ,

n o t i f y = > S e r v i c e [ ' h t t p d ' ] ,

}

ZADANIE

KOMPILACJA,KATALOG I

RAPORTOWANIE

KOMPILACJAPuppet kompiluje kod wczytując klasy przypisane dowęzłaSprawdzana jest kolejność i unikalność zasobówPowstaje katalog, plik json z konkretnymi zadaniami dowykonania w określonej kolejności

KATALOGKatalog to wynik kompilacjiZawiera tylko te zasoby które mają się wywołać nadanym węźleZawiera konkretne wartości w tym treści plików ipotrzebne hasła

RAPORTW trakcie uruchomienia generowany jest raportRaport może zostać zapisany lub wysłany do procesowaraportówProcesory raportów to Enterprise console i Herald

PE CONSOLE

HERALD

RAPORTYDEMO

ZADANIE

PEŁNE SZKOLENIA

PEŁNE SZKOLENIA1. DevOps - zwinne dostarczanie aplikacji2. DevOps Foundations3. Podstawy języka i technologii Puppet4. Zaawansowane techniki użycia Puppet5. Rozszerzanie elementów ekosystemu Puppet6. Wprowadzenie do technologii Docker7. Continuous Integration z wykorzystaniem

Jenkins

DZIĘKUJĘDO ZOBACZENIA