3. Z DevOps pierwszy raz w 2010 roku
Duże wdrożenia z DevOps / Puppet
Prezentacje na User Groups i szkolenia pracowników
Wiele OS modułów: JBoss, Glassfish, XtreemFS,
Artifactory, Flyway, Herald
5. CO PRZED NAMI?
1. Czym jest DevOps i gdzie w tym Puppet?
2. Sposoby pracy z Puppet
3. Instalacja Puppet na systemie operacyjnym
4. Architektura master - agent w Puppet
5. Podstawowe typy takie jak file, service, user czy
package
6. Składnia deklaratywnych manifestów
7. Zasoby i zarządzanie kolejnością
8. Klasy i definicje
9. Wstęp do testowania i tryb bez operacyjny
10. Kompilacja, katalogi oraz raportowanie
6. DYSKUSJA
Jakie cele mam na tym warsztacie?
Czy potrafię wskazać na czym najbardziej mi zależy?
Czy mam już plan jak wykorzystać zdobytą tu
wiedzę?
8. ZMIANA
ZMIANA TO JEDYNA PEWNA RZECZ W KAŻDEJ
FIRMIE
POWINNA BYĆ WYKORZYSTANA I SPRAWNIE
WPROWADZONA
9. ZMIANA
NIE 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"
10. DALSZE WYZWANIA
Niska komunikacja = konflikty i niska efektywność
Programiści nie wdrażają spójnego software'u
Administratorzy mają tendencję do opierania się
zmianom
Proces wytwarzania jest najczęściej zwinny
Proces utrzymania jest najczęściej statyczny
Coraz potężniejsze, rozproszone rozwiązania
11. DEVS VS OPS
Developerzy Administratorzy
Zainteresowanie Szybkie zmiany
Stabilność
środowiska
Skala
Cytaty
" It works on my
machine"
" It's not server, it's
your code"
13. DEFINICJA
"DevOps to praktyka codziennej
współpracy i współtworzenia zespołów
administracyjnych z zespołami
programistów"
14. ZAŁOŻENIA DEVOPS
DevOps stosujemy w trakcie trwania całego cyklu życia
danej usługi lub dłużej
Od momentu jej projektowania, przez wykonanie,
wdrożenie i utrzymanie
Poprzez stosowanie wspólnych narzędzi i praktyk
Automatyzację pracy i mikro wdrożenia
18. TO NIE JEST NO-OPS
"oni zabiorą nam nasze posady"
współdzielenie odpowiedzialności a nie pozbycia się
jej
współpraca a nie odebranie jej
uwolnienie ukrytych mocy
19. NIE CHODZI (TYLKO) O
NARZĘDZIA
przekonanie, że w DevOps chodzi głownie o
zastosowanie nowych narzędzi w pracy, takich jak
Puppet czy Chef
praktyka wspólnej pracy
wytworzenie kultury i nawyków spójnych z Agile
20. NIE CHODZI (TYLKO) O
KULTURĘ
potrzebne są narzędzia spełniające wymagania obu
stron
narzędzia te muszą wspierać nawyki wspólnej pracy
obie strony muszą czerpać korzyści
21. NIE CHODZI (TYLKO) O
POŁĄCZENIE DEV I
OPS
obejmuje również: administratorach
sieci
specjalistów bezpieczeństwa
architektów systemów
analityków
22. NIE CHODZI (TYLKO) O
TYTUŁ POSADY
bez faktycznej zmiany sposobu pracy nie będzie dużych
sukcesów
zmiana musi być po obu stronach
23. NIE CHODZI O
WSZYSTKO, WSZĘDZIE
po złym wprowadzeniu, upraszcza się DevOps do
rozwodnionego Agile
lub "miłości" do wszystkich
28. CONFIGURATION ENFORCEMENT
Zapis infrastruktury jako kod przetwarzany i
wykonywalny jest KLUCZOWY dla DevOps
Daje możliwość pracy w niedużych iteracjach.
“To co było zapisane w postaci kodu
zadziałało, problem był w tych elementach,
których jeszcze nie automatyzowaliśmy.
Zróbmy to!”
30. PRACA BEZPOŚREDNIO NA
DOCELOWEJ INFRASTRUKTURZE
Nie polecam
Niebezpieczne i jedno dostępne
Szczątkowe możliwości
testowania
Możliwość używania środowisk
Najpopularniejsze i polecane przez Puppetlabs :-(
31. WYKORZYSTANIE NARZĘDZI TYPU
VAGRANT
W miarę wygodne i proste
Bezpieczne
Możliwe dogłębne testowanie
Możliwe wykorzystanie systemów
CI
Tak będziemy pracować na tym warsztacie
32. WYKORZYSTANIE SEPARACJI
MODUŁÓW
Wymaga ekosystemu developerskiego Puppet
Bezpieczne, wielodostępne i skalowalne
Możliwe pełne testowanie i separacja na
odpowiedzialności
Konieczne wykorzystanie systemów CI i CD
Wykorzystanie zaawansowanych testów rspec i beaker
Najlepszy sposób pracy lecz zaawansowany
33.
34. VAGRANT
Typowe narzędzie fazy rozwoju i wstępnego testowania
rozwiązań. Pozwala na:
szybkie zarządzanie obrazami maszyny wirtualnej
zarządzanie połączeniami sieciowymi
miejscem współdzielonym
uruchamianiem na maszynie wirtualnej skryptów i
narzędzi configuration management
35. KLUCZOWE FUNKCJE VAGRANTA
dostarcza poleceń linii komend do sterowania maszyną lub
maszynami wirtualnymi
pozwala na zapis konfiguracji w pliku Vagrantfile
posiada szereg wbudowanych providerów: VirtualBox,
VMWare, Docker, Hyper-V
posiada szereg wbudowanych provisionerów: Shell, Chef,
Puppet, Ansible, Docker, Salt, CFEngine
posiada system wtyczek i istnieje wiele publicznych wtyczek
posiada prostą instalację w postaci pliku DEB, RPM, MSI lub
DMG
dostarcza automatycznej konfiguracji sieci oraz folderów
współdzielonych
36. INSTALACJA
VAGRANT
# 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
37. BAZOWE OBRAZY DO VAGRANTA
https://atlas.hashicorp.com/boxes/search
38. NOWE ŚRODOWISKO DLA
VAGRANTA
$ 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 .
$ _
39. PRZYKŁADOWY PLIK
VAGRANTFILE
# - * - 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
40. KONFIGURACJA SIECI, PROCESORA
I 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
41. 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
42. 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 .
$ _
45. ZAOPATRYWANIE W
KONFIGURACJĘ
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
46. WYNIK ZAOPATRYWANIA W
KONFIGURACJĘ
$ 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
$ _
51. CZYTELNOŚĆ PUPPET
p 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?
52. ZALETY PUPPET
Dostarcza możliwości zapisania oczekiwanego stanu
infrastruktury IT
Wymuszenia wykonania zmian dostosowującego ją do
tegoż stanu
Wszystkie elementy składowe to open-source
Prosty język manifestów naturalnie przyjazny
administratorom
Silnik Puppeta składa się z zestawu komend konsoli
systemu, które również można efektywnie
wykorzystywać w oderwaniu od Puppeta
53. 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ć na
dowolnym etapie zaawansowania projektu
Największa społeczność użytkowników
Możliwość prostego rozszerzenia silnika Puppeta w
postaci zarówno manifestów Puppet jak i kodu
niskopoziomowego Ruby
Wytwarza naturalny podział pracy: programiści piszą kod
w Ruby a administratorzy używają prostszych manifestów
54. ZALETY PUPPET - C.D. 2
Największa ilość gotowych do użycia modułów i
rozszerzeń
Moduły pisane i utrzymywane przez firmę Puppetlabs
Dogłębne testowanie jednostkowe, "dymne", integracyjne
i akceptacyjne
Możliwość symulowania zmiany w systemie
Dokładne, szczegółowe raportowanie
Bezpieczna i skalowalna architektura agent --> serwer
55. ZALETY PUPPET - C.D. 3
Wsparcie i integracje z innymi narzędziami np. Vagrant,
VMWare, OpenStack
Wsparcie enterprise firmy Puppetlabs i Red Hat, oraz
dodatkowe bardzo przydatne narzędzia takie jak
Enterprise 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ów
weryfikacji i budowania oraz integracji ciągłej
60. SPOSOBY INSTALACJI
PUPPET
z pakietów dostępnych w systemie
operacyjnym
z rubygems
z pakietów z repozytoriów puppetlabs
instalator 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!
64. OPIS EKOSYSTEMU
PUPPET
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
65. FACTER
Narzędzie działające między innymi w konsoli
systemowej. Jego zadaniem jest wyliczanie faktów na
temat maszyny na której został uruchomiony.
66. 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
68. AUGEAS
Narzędzie elastycznego zmieniania konfiguracji plików.
Potrafi inteligentnie zmieniać treść bardzo wielu różnych
formatów plików, selektywnie, zmieniając jedyne
pożądaną wartość i nie zmieniając nic w przypadku pełnej
zgodności.
69. 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
72. 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 |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /
75. 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 ' ,
}
79. JĘZYK PUPPET
Język Puppet zapisywany jest w manifestach
Manifesty są grupowane w moduły
Manifesty mogą zawierać definicje, klasy lub wywołania
zasobów
80. ZASÓB PUPPET
Zasobem 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
82. FILE
Potrafi 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 ' ,
}
83. PACKAGE
Potrafi 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 ' ,
}
84. SERVICE
Potrafi 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 ,
}
85. USER
Zarzą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 ' ] ,
}
86. EXEC
Pozwala 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 ' ] ,
}
87. 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
88. POLECANY FLOW
install -> 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 ' ] ,
}
90. ZMIENNE
W 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
91. WYRAŻENIA WARUNKOWE
W 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 '
}
92. WARUNKI CASE
c 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 } "
}
93. 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 ,
}
94. FUNKCJE
i 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, includeoraz
str2bool.
97. TRYB AGENT
Puppet łączy się do serwera i pobiera z niego konfigurację
Dostęp tylko po SSL z zaufanym certyfikatem
Kompilacja na serwerze, wykonanie na agencie
101. SPOSOBY TESTOWANIA
Puppet posiada szereg możliwości testowania
puppet parser validatei puppet-
lint
smoke testy i tryb bezoperacyjny
rspec-puppet
beaker
Nie będziemu tu mówić o 2 ostatnich
104. SMOKE TESTY PUPPET
W Puppet smoke testy to po prostu uruchamianie
manifestów, specjalnie przygotowanych w katalogu tests
w 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
108. STRUKTURA MODUŁU
m 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
109. MODUŁY 101
Moduły znajdują się na PM
Moduły zawierają kod Puppet
Moduły posiadają określony układ
Moduły mogą być prosto
instalowane
Wiecej: http://slides.com/cardil/...
110. KLASY
Klasy to nazwane bloki kodu Puppet
Są definiowane w modułach do późniejszego użycia
Nie są automatycznie wywoływane, muszą być
dołączone do katalogu
Generalnie opisują średnie i duże fragmenty
funkcjonalności
Nazwa może mylić z innymi językami programowania
111. KLASY PRZYKŁAD
c 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 ' ] ,
112. 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
113. DEFINICJE
To bloki kodu puppet które mogą być wywołane
wielokrotnie z różnymi parametrami
Mogą być użyte jako proste makra dla powtarzających
się operacji
114. 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
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 ' ] ,
}
117. KOMPILACJA
Puppet kompiluje kod wczytując klasy przypisane do
węzła
Sprawdzana jest kolejność i unikalność zasobów
Powstaje katalog, plik json z konkretnymi zadaniami do
wykonania w określonej kolejności
118. KATALOG
Katalog to wynik kompilacji
Zawiera tylko te zasoby które mają się wywołać na
danym węźle
Zawiera konkretne wartości w tym treści plików i
potrzebne hasła
119. RAPORT
W trakcie uruchomienia generowany jest raport
Raport może zostać zapisany lub wysłany do procesowa
raportów
Procesory raportów to Enterprise console i Herald
125. PEŁNE SZKOLENIA
1. DevOps - zwinne dostarczanie aplikacji
2. DevOps Foundations
3. Podstawy języka i technologii Puppet
4. Zaawansowane techniki użycia Puppet
5. Rozszerzanie elementów ekosystemu Puppet
6. Wprowadzenie do technologii Docker
7. Continuous Integration z wykorzystaniem
Jenkins