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ę?
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"
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
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
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!”
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.
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
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
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!
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
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
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 |
\ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /
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 ' ,
}
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
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 ' ] ,
}
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.
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
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
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 ' ] ,
}
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Ł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
Top Related