SlideShare a Scribd company logo
1 of 126
Download to read offline
PUPPET
WPROWADZENIE DO TECHNOLOGII
by Krzysztof Suszyński | @ksuszynski
HEJ!
Krzysztof Suszyński
Ewangelizuje z Puppet i Java
Główny Programista w COI / właściciel Wave Software
Od 2014r. współpraca z
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
JAK BĘDZIE WYGLĄDAŁ
WARSZTAT?
~9 tematów:
Wstęp
teoretyczny
Samodzielna praca
Przerwa
Mikro projekt
Obiad koło 13
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
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ę?
PRZYJRZYJMY SIĘ
PROBLEMOM W IT
POMIĘDZY ROZWOJEM APLIKACJI
A UTRZYMANIEM
ZMIANA
ZMIANA TO JEDYNA PEWNA RZECZ W KAŻDEJ
FIRMIE
POWINNA BYĆ WYKORZYSTANA I SPRAWNIE
WPROWADZONA
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"
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
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"
ROZWIĄZANIE?
DEVOPS
DEFINICJA
"DevOps to praktyka codziennej
współpracy i współtworzenia zespołów
administracyjnych z zespołami
programistów"
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
DEVOPS W PUNKTACH
1. Infrastucture as a Code
2. Continuous build
3. Continuous testing
4. Continuous inspection
5. Continuous integration
6. Continuous delivery
7. Continuous configuration
enforcement
8. Continuous deployment
9. Continuous monitoring
10. Continuous recovery
11. 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ę
jej
współpraca a nie odebranie jej
uwolnienie ukrytych mocy
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
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
NIE CHODZI (TYLKO) O
POŁĄCZENIE DEV I
OPS
obejmuje również: administratorach
sieci
specjalistów bezpieczeństwa
architektów systemów
analityków
NIE CHODZI (TYLKO) O
TYTUŁ POSADY
bez faktycznej zmiany sposobu pracy nie będzie dużych
sukcesów
zmiana musi być po obu stronach
NIE CHODZI O
WSZYSTKO, WSZĘDZIE
po złym wprowadzeniu, upraszcza się DevOps do
rozwodnionego Agile
lub "miłości" do wszystkich
PROCES DEVOPS
Krótkie szybkie iteracje
ZMIANA W CAŁEJ FIRMIE
Dev Ops
Dev Ops
DYSKUSJA
ZAPIS
INFRASTRUKTURY
JAKO KOD
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!”
SPOSOBY PRACY Z
NARZĘDZIAMI
CONFIGURATION
MANAGEMENT
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 :-(
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
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
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
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
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
BAZOWE OBRAZY DO VAGRANTA
https://atlas.hashicorp.com/boxes/search
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 .
$ _
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
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
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 STANU
MASZYNY
Aby sprawdzić jaki jest aktualny stan maszyny w ramach
konfiguracji, należy wywołać polecenie vagrant status.
USUNIĘCIE MASZYNY
Aby skasować maszynę wykonać należy polecenie
vagrant destroy.
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
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
$ _
WTYCZKI
DO VAGRANTA
github.com/mitchellh/vagrant/wiki/Available-Vagrant-
Plugins
landrush - Lokalnego micro DNS, który automatycznie
przyznaje maszynom IP. Działa zarówno w maszynach
wirtualnych jak i na hoście
sahara - Możliwość wykonywania migawek stanu,
przywracania stanu i potwierdzania zmian
VAGRANT
DEMO
ZADANIE
Jedno z najbardziej dojrzałych narzędzi DevOps
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?
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
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
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
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
PUPPET
JAK DZIAŁA?
PROCES DZIAŁANIA
KLASYFIKACJA
PROCES WPROWADZANIA ZMIANY
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!
DEMO
INSTALACJA PUPPET
ZADANIE
DYSKUSJA
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
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.
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
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.
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
DEMO
AUGEAS
HIERA
Hierarchiczna, 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 |
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /
DEMO
HIERA
PUPPET RESOURCE
Moż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 ' ,
}
DEMO
PUPPET RESOURCE
ZADANIE
PODSTAWA SKŁADNI
DSL PUPPET
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
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
PODSTAWOWE ZASOBY
file
service
package
exec
user
group
augeas
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 ' ,
}
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 ' ,
}
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 ,
}
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 ' ] ,
}
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 ' ] ,
}
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 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 ' ] ,
}
ZADANIE
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
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 '
}
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 } "
}
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 ,
}
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.
ZADANIE
SPOSOBY
URUCHAMIANIA
RESOURCE
APPLY
AGENT
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
TRYB AGENT
DEMO
ZADANIE
WSTĘP DO
TESTOWANIA
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
WALIDACJA POPRAWNOŚCI
MANIFESTÓW
IDE - polecam w szczególności na początku Geppetto,
ale też Atom czy Intellij
puppet-lint
puppet parser validate
TRYB BEZOPERACYJNY
Unikalna funkcjonalność puppet
Pozwala uruchamianie manifestów bez wprowadzania
zmian
Flaga: --noop
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
ZADANIE
STRUKTURA KODU
PUPPET
MODUŁOWOŚĆ
Kod puppet umieszczamy w:
modułach
klasach
definicjach
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
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/...
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
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 ' ] ,
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
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
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 ' ] ,
}
ZADANIE
KOMPILACJA,
KATALOG I
RAPORTOWANIE
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
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
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
PE CONSOLE
HERALD
RAPORTY
DEMO
ZADANIE
PEŁNE SZKOLENIA
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
DZIĘKUJĘ
DO ZOBACZENIA

More Related Content

Viewers also liked

Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startSages
 
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Sages
 
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSages
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Sages
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji androidSages
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemSages
 
Warsztaty ansible
Warsztaty ansibleWarsztaty ansible
Warsztaty ansiblegnosek
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopSages
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkitSages
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITKamil Grabowski
 

Viewers also liked (11)

Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki start
 
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
Zrób dobrze swojej komórce - programowanie urządzeń mobilnych z wykorzystanie...
 
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
 
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
 
Warsztaty ansible
Warsztaty ansibleWarsztaty ansible
Warsztaty ansible
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
 
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkit
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań IT
 

Similar to Wprowadzenie do technologii Puppet

Marketing - zagadnienia podstawowe - ebook
Marketing - zagadnienia podstawowe - ebookMarketing - zagadnienia podstawowe - ebook
Marketing - zagadnienia podstawowe - ebooke-booksweb.pl
 
Prezentacja z e learningu ;]
Prezentacja z e learningu ;]Prezentacja z e learningu ;]
Prezentacja z e learningu ;]Patryk Jędruszek
 
PLNOG 2: Marcin Szreter - Jak zbudować skalowalną i bezpieczną sieć dostępową
PLNOG 2: Marcin Szreter - Jak zbudować skalowalną i bezpieczną sieć dostępowąPLNOG 2: Marcin Szreter - Jak zbudować skalowalną i bezpieczną sieć dostępową
PLNOG 2: Marcin Szreter - Jak zbudować skalowalną i bezpieczną sieć dostępowąPROIDEA
 
[DPTO] Michał Pogorzelski - Testy jednostkowe – narzędzie, które pozwala prac...
[DPTO] Michał Pogorzelski - Testy jednostkowe – narzędzie, które pozwala prac...[DPTO] Michał Pogorzelski - Testy jednostkowe – narzędzie, które pozwala prac...
[DPTO] Michał Pogorzelski - Testy jednostkowe – narzędzie, które pozwala prac...Future Processing
 
Okiem szefa IT: certyfikaty czy osobowość ? łowca certyfikatów czy praktyk ?
Okiem szefa IT: certyfikaty czy osobowość ? łowca certyfikatów czy praktyk ?Okiem szefa IT: certyfikaty czy osobowość ? łowca certyfikatów czy praktyk ?
Okiem szefa IT: certyfikaty czy osobowość ? łowca certyfikatów czy praktyk ?Adam Mizerski
 
Bartłomiej Anszperger - Next Generation Multicast V P N ( M V P N)
Bartłomiej Anszperger - Next Generation Multicast V P N ( M V P N)Bartłomiej Anszperger - Next Generation Multicast V P N ( M V P N)
Bartłomiej Anszperger - Next Generation Multicast V P N ( M V P N)PROIDEA
 
Mini-Przewodnik dla Szefów Uczestników szkoleń
Mini-Przewodnik dla Szefów Uczestników szkoleńMini-Przewodnik dla Szefów Uczestników szkoleń
Mini-Przewodnik dla Szefów Uczestników szkoleńZAI Magdalena Robak
 
TouchID, Handoff, Spotlight oraz Multitasking: Nowości W Projektowaniu Interf...
TouchID, Handoff, Spotlight oraz Multitasking: Nowości W Projektowaniu Interf...TouchID, Handoff, Spotlight oraz Multitasking: Nowości W Projektowaniu Interf...
TouchID, Handoff, Spotlight oraz Multitasking: Nowości W Projektowaniu Interf...Maciej Kołek
 
Z Perspektywy Programisty: Projektowanie Interfejsów Aplikacji Mobilnych
Z Perspektywy Programisty: Projektowanie Interfejsów Aplikacji MobilnychZ Perspektywy Programisty: Projektowanie Interfejsów Aplikacji Mobilnych
Z Perspektywy Programisty: Projektowanie Interfejsów Aplikacji MobilnychMaciej Kołek
 
Wdrażanie PN-ISO/IEC 27001 w warunkach urzędu - XIII Samorządowe Forum Kapi...
Wdrażanie PN-ISO/IEC 27001 w warunkach urzędu - XIII Samorządowe Forum Kapi...Wdrażanie PN-ISO/IEC 27001 w warunkach urzędu - XIII Samorządowe Forum Kapi...
Wdrażanie PN-ISO/IEC 27001 w warunkach urzędu - XIII Samorządowe Forum Kapi...Adam Mizerski
 
Świat B2B - Od projektowania doświadczeń do projektowania produktu
Świat B2B - Od projektowania doświadczeń do projektowania produktuŚwiat B2B - Od projektowania doświadczeń do projektowania produktu
Świat B2B - Od projektowania doświadczeń do projektowania produktuTomasz Skórski
 
DPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdfDPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdfFuture Processing
 
TipiUX#4: Od pomysłu do wdrożenia - proces projektowania interfejsów aplikacj...
TipiUX#4: Od pomysłu do wdrożenia - proces projektowania interfejsów aplikacj...TipiUX#4: Od pomysłu do wdrożenia - proces projektowania interfejsów aplikacj...
TipiUX#4: Od pomysłu do wdrożenia - proces projektowania interfejsów aplikacj...Maciej Kołek
 
Mobilny urzędnik ulotka
Mobilny urzędnik  ulotkaMobilny urzędnik  ulotka
Mobilny urzędnik ulotkaGrupa PTWP S.A.
 

Similar to Wprowadzenie do technologii Puppet (20)

Marketing - zagadnienia podstawowe - ebook
Marketing - zagadnienia podstawowe - ebookMarketing - zagadnienia podstawowe - ebook
Marketing - zagadnienia podstawowe - ebook
 
Prezentacja z e learningu ;]
Prezentacja z e learningu ;]Prezentacja z e learningu ;]
Prezentacja z e learningu ;]
 
Prezentacja z e learningu
Prezentacja z e learningu Prezentacja z e learningu
Prezentacja z e learningu
 
PLNOG 2: Marcin Szreter - Jak zbudować skalowalną i bezpieczną sieć dostępową
PLNOG 2: Marcin Szreter - Jak zbudować skalowalną i bezpieczną sieć dostępowąPLNOG 2: Marcin Szreter - Jak zbudować skalowalną i bezpieczną sieć dostępową
PLNOG 2: Marcin Szreter - Jak zbudować skalowalną i bezpieczną sieć dostępową
 
I etap projektu
I etap projektuI etap projektu
I etap projektu
 
[DPTO] Michał Pogorzelski - Testy jednostkowe – narzędzie, które pozwala prac...
[DPTO] Michał Pogorzelski - Testy jednostkowe – narzędzie, które pozwala prac...[DPTO] Michał Pogorzelski - Testy jednostkowe – narzędzie, które pozwala prac...
[DPTO] Michał Pogorzelski - Testy jednostkowe – narzędzie, które pozwala prac...
 
Okiem szefa IT: certyfikaty czy osobowość ? łowca certyfikatów czy praktyk ?
Okiem szefa IT: certyfikaty czy osobowość ? łowca certyfikatów czy praktyk ?Okiem szefa IT: certyfikaty czy osobowość ? łowca certyfikatów czy praktyk ?
Okiem szefa IT: certyfikaty czy osobowość ? łowca certyfikatów czy praktyk ?
 
Narzędzie content marketera - czy możemy bez nich żyć?
Narzędzie content marketera - czy możemy bez nich żyć?Narzędzie content marketera - czy możemy bez nich żyć?
Narzędzie content marketera - czy możemy bez nich żyć?
 
Bartłomiej Anszperger - Next Generation Multicast V P N ( M V P N)
Bartłomiej Anszperger - Next Generation Multicast V P N ( M V P N)Bartłomiej Anszperger - Next Generation Multicast V P N ( M V P N)
Bartłomiej Anszperger - Next Generation Multicast V P N ( M V P N)
 
ID-EYE Ewaluacja online Joanna Kowalczyk
ID-EYE Ewaluacja online Joanna KowalczykID-EYE Ewaluacja online Joanna Kowalczyk
ID-EYE Ewaluacja online Joanna Kowalczyk
 
ERLA MISTO odświeżacz powietrza z neutralizatorem zapachów
ERLA MISTO odświeżacz powietrza z neutralizatorem zapachówERLA MISTO odświeżacz powietrza z neutralizatorem zapachów
ERLA MISTO odświeżacz powietrza z neutralizatorem zapachów
 
Mini-Przewodnik dla Szefów Uczestników szkoleń
Mini-Przewodnik dla Szefów Uczestników szkoleńMini-Przewodnik dla Szefów Uczestników szkoleń
Mini-Przewodnik dla Szefów Uczestników szkoleń
 
TouchID, Handoff, Spotlight oraz Multitasking: Nowości W Projektowaniu Interf...
TouchID, Handoff, Spotlight oraz Multitasking: Nowości W Projektowaniu Interf...TouchID, Handoff, Spotlight oraz Multitasking: Nowości W Projektowaniu Interf...
TouchID, Handoff, Spotlight oraz Multitasking: Nowości W Projektowaniu Interf...
 
Z Perspektywy Programisty: Projektowanie Interfejsów Aplikacji Mobilnych
Z Perspektywy Programisty: Projektowanie Interfejsów Aplikacji MobilnychZ Perspektywy Programisty: Projektowanie Interfejsów Aplikacji Mobilnych
Z Perspektywy Programisty: Projektowanie Interfejsów Aplikacji Mobilnych
 
Wdrażanie PN-ISO/IEC 27001 w warunkach urzędu - XIII Samorządowe Forum Kapi...
Wdrażanie PN-ISO/IEC 27001 w warunkach urzędu - XIII Samorządowe Forum Kapi...Wdrażanie PN-ISO/IEC 27001 w warunkach urzędu - XIII Samorządowe Forum Kapi...
Wdrażanie PN-ISO/IEC 27001 w warunkach urzędu - XIII Samorządowe Forum Kapi...
 
Świat B2B - Od projektowania doświadczeń do projektowania produktu
Świat B2B - Od projektowania doświadczeń do projektowania produktuŚwiat B2B - Od projektowania doświadczeń do projektowania produktu
Świat B2B - Od projektowania doświadczeń do projektowania produktu
 
DPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdfDPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdf
 
Dorożkarnia. Prezentacja Forum Kraków
Dorożkarnia. Prezentacja Forum KrakówDorożkarnia. Prezentacja Forum Kraków
Dorożkarnia. Prezentacja Forum Kraków
 
TipiUX#4: Od pomysłu do wdrożenia - proces projektowania interfejsów aplikacj...
TipiUX#4: Od pomysłu do wdrożenia - proces projektowania interfejsów aplikacj...TipiUX#4: Od pomysłu do wdrożenia - proces projektowania interfejsów aplikacj...
TipiUX#4: Od pomysłu do wdrożenia - proces projektowania interfejsów aplikacj...
 
Mobilny urzędnik ulotka
Mobilny urzędnik  ulotkaMobilny urzędnik  ulotka
Mobilny urzędnik ulotka
 

More from Sages

Python szybki start
Python   szybki startPython   szybki start
Python szybki startSages
 
Budowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureBudowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureSages
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawySages
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
Jak działa blockchain?
Jak działa blockchain?Jak działa blockchain?
Jak działa blockchain?Sages
 
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki startSages
 
Architektura SOA - wstęp
Architektura SOA - wstępArchitektura SOA - wstęp
Architektura SOA - wstępSages
 
Wprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataWprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataSages
 

More from Sages (8)

Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
Budowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze AzureBudowanie rozwiązań serverless w chmurze Azure
Budowanie rozwiązań serverless w chmurze Azure
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawy
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Jak działa blockchain?
Jak działa blockchain?Jak działa blockchain?
Jak działa blockchain?
 
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki start
 
Architektura SOA - wstęp
Architektura SOA - wstępArchitektura SOA - wstęp
Architektura SOA - wstęp
 
Wprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataWprowadzenie do technologii Big Data
Wprowadzenie do technologii Big Data
 

Wprowadzenie do technologii Puppet

  • 1. PUPPET WPROWADZENIE DO TECHNOLOGII by Krzysztof Suszyński | @ksuszynski
  • 2. HEJ! Krzysztof Suszyński Ewangelizuje z Puppet i Java Główny Programista w COI / właściciel Wave Software Od 2014r. współpraca z
  • 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
  • 4. JAK BĘDZIE WYGLĄDAŁ WARSZTAT? ~9 tematów: Wstęp teoretyczny Samodzielna praca Przerwa Mikro projekt Obiad koło 13
  • 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ę?
  • 7. PRZYJRZYJMY SIĘ PROBLEMOM W IT POMIĘDZY ROZWOJEM APLIKACJI A UTRZYMANIEM
  • 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
  • 15. DEVOPS W PUNKTACH 1. Infrastucture as a Code 2. Continuous build 3. Continuous testing 4. Continuous inspection 5. Continuous integration 6. Continuous delivery 7. Continuous configuration enforcement 8. Continuous deployment 9. Continuous monitoring 10. Continuous recovery 11. Continuous scaling
  • 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
  • 25. ZMIANA W CAŁEJ FIRMIE Dev Ops Dev Ops
  • 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 . $ _
  • 43. ZWERYFIKOWANIE STANU MASZYNY Aby sprawdzić jaki jest aktualny stan maszyny w ramach konfiguracji, należy wywołać polecenie vagrant status.
  • 44. USUNIĘCIE MASZYNY Aby skasować maszynę wykonać należy polecenie vagrant destroy.
  • 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 $ _
  • 47. WTYCZKI DO VAGRANTA github.com/mitchellh/vagrant/wiki/Available-Vagrant- Plugins landrush - Lokalnego micro DNS, który automatycznie przyznaje maszynom IP. Działa zarówno w maszynach wirtualnych jak i na hoście sahara - Możliwość wykonywania migawek stanu, przywracania stanu i potwierdzania zmian
  • 50. Jedno z najbardziej dojrzałych narzędzi DevOps
  • 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
  • 71. HIERA Hierarchiczna, prosta baza danych dzięki której możliwe są kontekstowe konfiguracje.
  • 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 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /
  • 74. PUPPET RESOURCE Możliwość uruchamiania puppeta dla konkretnych pojedynczych zasobów i listowania ich
  • 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
  • 102. WALIDACJA POPRAWNOŚCI MANIFESTÓW IDE - polecam w szczególności na początku Geppetto, ale też Atom czy Intellij puppet-lint puppet parser validate
  • 103. TRYB BEZOPERACYJNY Unikalna funkcjonalność puppet Pozwala uruchamianie manifestów bez wprowadzania zmian Flaga: --noop
  • 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
  • 107. MODUŁOWOŚĆ Kod puppet umieszczamy w: modułach klasach definicjach
  • 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
  • 121. 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