Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Wprowadzenie do technologii Puppet

998 views

Published on

Presentation prepared by Krzysztof Suszyński.
http://stacja.it

  • Be the first to comment

  • Be the first to like this

Wprowadzenie do technologii Puppet

  1. 1. PUPPET WPROWADZENIE DO TECHNOLOGII by Krzysztof Suszyński | @ksuszynski
  2. 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. 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. 4. JAK BĘDZIE WYGLĄDAŁ WARSZTAT? ~9 tematów: Wstęp teoretyczny Samodzielna praca Przerwa Mikro projekt Obiad koło 13
  5. 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. 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. 7. PRZYJRZYJMY SIĘ PROBLEMOM W IT POMIĘDZY ROZWOJEM APLIKACJI A UTRZYMANIEM
  8. 8. ZMIANA ZMIANA TO JEDYNA PEWNA RZECZ W KAŻDEJ FIRMIE POWINNA BYĆ WYKORZYSTANA I SPRAWNIE WPROWADZONA
  9. 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. 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. 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"
  12. 12. ROZWIĄZANIE? DEVOPS
  13. 13. DEFINICJA "DevOps to praktyka codziennej współpracy i współtworzenia zespołów administracyjnych z zespołami programistów"
  14. 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. 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
  16. 16. ZADANIE
  17. 17. KILKA UWAG! CZYM DEVOPS NIE JEST?!
  18. 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. 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. 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. 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. 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. 23. NIE CHODZI O WSZYSTKO, WSZĘDZIE po złym wprowadzeniu, upraszcza się DevOps do rozwodnionego Agile lub "miłości" do wszystkich
  24. 24. PROCES DEVOPS Krótkie szybkie iteracje
  25. 25. ZMIANA W CAŁEJ FIRMIE Dev Ops Dev Ops
  26. 26. DYSKUSJA
  27. 27. ZAPIS INFRASTRUKTURY JAKO KOD
  28. 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!”
  29. 29. SPOSOBY PRACY Z NARZĘDZIAMI CONFIGURATION MANAGEMENT
  30. 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. 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. 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. 33. 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
  34. 34. 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
  35. 35. 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
  36. 36. BAZOWE OBRAZY DO VAGRANTA https://atlas.hashicorp.com/boxes/search
  37. 37. 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 . $ _
  38. 38. 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
  39. 39. 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
  40. 40. 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
  41. 41. 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 . $ _
  42. 42. ZWERYFIKOWANIE STANU MASZYNY Aby sprawdzić jaki jest aktualny stan maszyny w ramach konfiguracji, należy wywołać polecenie vagrant status.
  43. 43. USUNIĘCIE MASZYNY Aby skasować maszynę wykonać należy polecenie vagrant destroy.
  44. 44. 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
  45. 45. 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 $ _
  46. 46. 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
  47. 47. VAGRANT DEMO
  48. 48. ZADANIE
  49. 49. Jedno z najbardziej dojrzałych narzędzi DevOps
  50. 50. 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?
  51. 51. 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
  52. 52. 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
  53. 53. 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
  54. 54. 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
  55. 55. PUPPET JAK DZIAŁA?
  56. 56. PROCES DZIAŁANIA
  57. 57. KLASYFIKACJA
  58. 58. PROCES WPROWADZANIA ZMIANY
  59. 59. 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!
  60. 60. DEMO INSTALACJA PUPPET
  61. 61. ZADANIE
  62. 62. DYSKUSJA
  63. 63. 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
  64. 64. 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.
  65. 65. 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
  66. 66. ZADANIE
  67. 67. 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.
  68. 68. 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
  69. 69. DEMO AUGEAS
  70. 70. HIERA Hierarchiczna, prosta baza danych dzięki której możliwe są kontekstowe konfiguracje.
  71. 71. 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 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /
  72. 72. DEMO HIERA
  73. 73. PUPPET RESOURCE Możliwość uruchamiania puppeta dla konkretnych pojedynczych zasobów i listowania ich
  74. 74. 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 ' , }
  75. 75. DEMO PUPPET RESOURCE
  76. 76. ZADANIE
  77. 77. PODSTAWA SKŁADNI DSL PUPPET
  78. 78. 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
  79. 79. 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
  80. 80. PODSTAWOWE ZASOBY file service package exec user group augeas
  81. 81. 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 ' , }
  82. 82. 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 ' , }
  83. 83. 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 , }
  84. 84. 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 ' ] , }
  85. 85. 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 ' ] , }
  86. 86. 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
  87. 87. 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 ' ] , }
  88. 88. ZADANIE
  89. 89. 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
  90. 90. 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 ' }
  91. 91. 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 } " }
  92. 92. 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 , }
  93. 93. 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.
  94. 94. ZADANIE
  95. 95. SPOSOBY URUCHAMIANIA RESOURCE APPLY AGENT
  96. 96. 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
  97. 97. TRYB AGENT DEMO
  98. 98. ZADANIE
  99. 99. WSTĘP DO TESTOWANIA
  100. 100. 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
  101. 101. 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
  102. 102. TRYB BEZOPERACYJNY Unikalna funkcjonalność puppet Pozwala uruchamianie manifestów bez wprowadzania zmian Flaga: --noop
  103. 103. 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
  104. 104. ZADANIE
  105. 105. STRUKTURA KODU PUPPET
  106. 106. MODUŁOWOŚĆ Kod puppet umieszczamy w: modułach klasach definicjach
  107. 107. 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
  108. 108. 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/...
  109. 109. 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
  110. 110. 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 ' ] ,
  111. 111. 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
  112. 112. 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
  113. 113. 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 ' ] , }
  114. 114. ZADANIE
  115. 115. KOMPILACJA, KATALOG I RAPORTOWANIE
  116. 116. 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
  117. 117. 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
  118. 118. 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
  119. 119. PE CONSOLE
  120. 120. HERALD
  121. 121. RAPORTY DEMO
  122. 122. ZADANIE
  123. 123. PEŁNE SZKOLENIA
  124. 124. 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
  125. 125. DZIĘKUJĘ DO ZOBACZENIA

×